php的GD库能否按百分比压缩图片?
程序员文章站
2022-05-12 23:39:29
...
用php的GD库压缩图片时,可以填入具体的宽和高进行压缩。那么,能否按百分比压缩呢,比如压缩为原图的90%,80%....等?
回复内容:
用php的GD库压缩图片时,可以填入具体的宽和高进行压缩。那么,能否按百分比压缩呢,比如压缩为原图的90%,80%....等?
可以啊,中午刚给朋友搞了个压缩的,
$maxWidth) {
$maxWidth = $maxWidth;
if($srcHeight > $maxHeight) {
$maxHeight = ($srcHeight/$srcHeight) * $maxWidth;
} else {
$maxHeight = $srcHeight;
}
return array('width' => $maxWidth,'height' => $maxHeight);
}
if($srcHeight > $maxHeight) {
$maxHeight = $maxHeight;
if($srcWidth > $maxWidth) {
$maxWidth = ($srcWidth/$srcHeight) * $maxHeight;
} else {
$maxWidth = $srcWidth;
}
return array('width' => $srcWidth,'height' => $maxHeight);
}
return array('width' => $srcWidth,'height' => $srcHeight);
}
/**
* 等比例生成缩略图
*
* @param String $srcFile 原始文件路径
* @param String $dstFile 目标文件路径
* @param Integer $maxWidth 生成的目标文件的最大宽度
* @param Integer $maxHeight 生成的目标文件的最大高度
* @return Boolean 生成成功则返回true,否则返回false
*/
function makeThumb($srcFile, $dstFile, $maxWidth, $maxHeight) {
if ($size = getimagesize($srcFile)) {
$srcWidth = $size[0];
$srcHeight = $size[1];
$mime = $size['mime'];
switch ($mime) {
case 'image/jpeg';
$isJpeg = true;
break;
case 'image/gif';
$isGif = true;
break;
case 'image/png';
$isPng = true;
break;
default:
return false;
break;
}
//header("Content-type:$mime");
$arr = $this->getNewSize($maxWidth, $maxHeight, $srcWidth, $srcHeight);
$thumbWidth = $arr['width'];
$thumbHeight = $arr['height'];
if (isset($isJpeg) && $isJpeg) {
$dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight);
$srcPic = imagecreatefromjpeg($srcFile);
imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);
imagejpeg($dstThumbPic, $dstFile, 100);
imagedestroy($dstThumbPic);
imagedestroy($srcPic);
return true;
} elseif (isset($isGif) && $isGif) {
$dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight);
//创建透明画布
imagealphablending($dstThumbPic, true);
imagesavealpha($dstThumbPic, true);
$trans_colour = imagecolorallocatealpha($dstThumbPic, 0, 0, 0, 127);
imagefill($dstThumbPic, 0, 0, $trans_colour);
$srcPic = imagecreatefromgif($srcFile);
imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);
imagegif($dstThumbPic, $dstFile);
imagedestroy($dstThumbPic);
imagedestroy($srcPic);
return true;
} elseif (isset($isPng) && $isPng) {
$dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight);
//创建透明画布
imagealphablending($dstThumbPic, true);
imagesavealpha($dstThumbPic, true);
$trans_colour = imagecolorallocatealpha($dstThumbPic, 0, 0, 0, 127);
imagefill($dstThumbPic, 0, 0, $trans_colour);
$srcPic = imagecreatefrompng($srcFile);
imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);
imagepng($dstThumbPic, $dstFile);
imagedestroy($dstThumbPic);
imagedestroy($srcPic);
return true;
} else {
return false;
}
} else {
return false;
}
}
}
?>
imagejpeg() 有一个参数可以设定压缩比例
http://php.net/manual/zh/function.imagejpeg.php
下一篇: 结合layer插件ajax弹出层