php生成图片缩略图的函数,php缩小图片

 
更多

具体用法如下:

$a=thumbImage('1.jpg',200,100,'2.jpg');//将1.jpg生成宽为200,高为100的缩略图,并保存为2.jpg
print_r($a);

打印结果:

Array(
    [status] => 0
    [file] => 1.jpg
    [width] => 200
    [height] => 200
    [savePath] => 2.jpg
    [info] => 缩略图片生成成功
)

$a=thumbImage('1.jpg',200,100);//将1.jpg生成宽为200,高为100的缩略图,并直接覆盖1.jpg,不生成新图片

函数代码如下:

/**
 * 生成图片缩略图
 * @param string $file 原图
 * @param int $thumbWidth 缩略图宽
 * @param int $thumbHeight 缩略图高
 * @param bool $isCut 是否裁切
 * @param string $savePath 保存文件,若为空则直接修改原图
 * @param int $quality 质量
 * @return array
 */
function thumbImage($file, $thumbWidth, $thumbHeight, $isCut = true, $savePath = '', $quality = 100) {
    if (!file_exists($file)) {
        return ['status' => 1, 'file' => '', 'width' => 0, 'height' => 0, 'savePath' => '', 'info' => '图片文件不存在'];
    }
    //检测文件类型
    $fp = fopen($file, 'rb');
    $str = fread($fp, 2); //只读2字节
    fclose($fp);
    $str = @unpack("c2chars", $str);
    $typeCode = intval($str['chars1'] . $str['chars2']);
    switch ($typeCode) {
        case 255216:
            $fileType = 'jpg';
            break;
        case 7173:
            $fileType = 'gif';
            break;
        case 6677:
            $fileType = 'bmp';
            break;
        case 13780:
            $fileType = 'png';
            break;
        default:
            $fileType = $typeCode;
            break;
    }
    if ($str['chars1'] == '-1' && $str['chars2'] == '-40') {
        $fileType = 'jpg';
    }
    if ($str['chars1'] == '-119' && $str['chars2'] == '80') {
        $fileType = 'png';
    }
    /*if (!in_array($fileType, ['jpg', 'gif', 'bmp', 'png'])) {
        return ['status' => 2, 'file' => '', 'width' => 0, 'height' => 0, 'savePath' => '', 'info' => '图片文件类型不正确:' . $fileType];
    }*/
    if ($fileType == 'jpg') {
        $im = imagecreatefromjpeg($file);
    } else if ($fileType == 'gif') {
        $im = imagecreatefromgif($file);
    } else if ($fileType == 'png') {
        $im = imagecreatefrompng($file);
    } else {
        return ['status' => 2, 'file' => '', 'width' => 0, 'height' => 0, 'savePath' => '', 'info' => '图片文件类型不正确:' . $fileType];
    }
    if (empty($savePath)) {
        $savePath = $file;
    }
    // 获取图片信息
    [$width, $height, $sourceType] = getimagesize($file);
    //图片缩放处理
    if ($width < $thumbWidth && $height < $thumbHeight) {
        return ['status' => 3, 'file' => '', 'width' => 0, 'height' => 0, 'savePath' => '', 'info' => '图片尺寸小于生成缩略图的尺寸'];
    }
    $ratio = $width / $height;//实际图象的比例
    $thumbRatio = $thumbWidth / $thumbHeight;//改变后的图象的比例
    if ($isCut) {//裁切处理
        if (function_exists('imagepng') && (str_replace('.', '', PHP_VERSION) >= 512)) {//针对php版本大于5.12参数变化后的处理情况
            $quality = 9;
        }
        if ($ratio >= $thumbRatio) {//高度优先
            $newimg = imagecreatetruecolor($thumbWidth, $thumbHeight);
            imagecopyresampled($newimg, $im, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $height * $thumbRatio, $height);
            imagejpeg($newimg, $savePath, $quality);
        }
        if ($ratio < $thumbRatio) {//宽度优先
            $newimg = imagecreatetruecolor($thumbWidth, $thumbHeight);
            imagecopyresampled($newimg, $im, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $width, round($width / $thumbRatio));
            imagejpeg($newimg, $savePath, $quality);
        }
    } else {//不裁切处理
        if ($ratio >= $thumbRatio) {
            $newimg = imagecreatetruecolor($thumbWidth, round($thumbWidth / $ratio));
            imagecopyresampled($newimg, $im, 0, 0, 0, 0, $thumbWidth, round($thumbWidth / $ratio), $width, $height);
            imagejpeg($newimg, $savePath, $quality);
        }
        if ($ratio < $thumbRatio) {
            $newimg = imagecreatetruecolor($thumbHeight * $ratio, $thumbHeight);
            imagecopyresampled($newimg, $im, 0, 0, 0, 0, $thumbHeight * $ratio, $thumbHeight, $width, $height);
            imagejpeg($newimg, $savePath, $quality);
        }
    }
    ImageDestroy($im);//www.phpernote.com/php-function/1007.html
    return ['status' => 0, 'file' => $file, 'width' => $thumbWidth, 'height' => $thumbHeight, 'savePath' => $savePath, 'info' => '缩略图片生成成功'];
}
打赏

本文固定链接: https://www.cxy163.net/archives/2932 | 绝缘体

该日志由 绝缘体.. 于 2024年08月24日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: php生成图片缩略图的函数,php缩小图片 | 绝缘体
关键字: , , , ,

php生成图片缩略图的函数,php缩小图片:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter