Aug
24
2024
php生成图片缩略图的函数,php缩小图片
作者:
绝缘体.. 发布:
2024-08-24 06:21 分类:
未分类 阅读:
抢沙发
具体用法如下:
$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' => '缩略图片生成成功'];
}
微信扫一扫,打赏作者吧~