具体用法如下:
$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' => '缩略图片生成成功']; }