首页 > PHP教程 > php开发知识文章

PHP图片无损压缩的处理方法

本篇文章主要介绍了PHP图片无损压缩的处理方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

imagecopyresized函数

拷贝部分图像并调整大小,将一幅图像中的一块矩形区域拷贝到另一个图像中。

imagecopyresampled函数

重采样拷贝部分图像并调整大小,将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值。

改函数减小了图像的大小且保持了极大的清晰度。如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。坐标指的是左上角。

imagecopyresampled函数

常用php压缩代码如下:

header("Content-type: image/jpeg");
$file = "aa.jpg";
$percent = 1.5; //图片压缩比
list($width, $height) = getimagesize($file); //获取原图尺寸 //缩放尺寸
$newwidth = $width * $percent;
$newheight = $height * $percent;
$src_im = imagecreatefromjpeg($file);
$dst_im = imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($dst_im); //输出压缩后的图片
imagedestroy($dst_im);
imagedestroy($src_im);

用php的imagecopyresized把大图片缩成小图片时,图片会变得很模糊,这里我们用 imagecopyresampled 代替 imagecopyresized函数。

新的php代码:

/**
* 压缩图片
* @param string $imgsrc 图片路径
* @param string $imgdst 压缩后保存路径
*/
function image_png_size_add($imgsrc, $imgdst)
{
list($width, $height, $type) = getimagesize($imgsrc);
$new_width = ($width > 600 ? 600 : $width) * 0.9;
$new_height = ($height > 600 ? 600 : $height) * 0.9;
switch ($type) {
case 1:
$giftype = check_gifcartoon($imgsrc);
if ($giftype) {
header('Content-Type:image/gif');
$image_wp = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromgif($imgsrc);
imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($image_wp, $imgdst, 75);
imagedestroy($image_wp);
}
break;
case 2:
header('Content-Type:image/jpeg');
$image_wp = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($imgsrc);
imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($image_wp, $imgdst, 75);
imagedestroy($image_wp);
break;
case 3:
header('Content-Type:image/png');
$image_wp = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefrompng($imgsrc);
imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($image_wp, $imgdst, 75);
imagedestroy($image_wp);
break;
}
}

/**
* 判断是否gif动画
* @param string $image_file图片路径
* @return boolean t f
*/
function check_gifcartoon($image_file)
{
$fp = fopen($image_file, 'rb');
$image_head = fread($fp, 1024);
fclose($fp);
return preg_match("/" . chr(0x21) . chr(0xff) . chr(0x0b) . 'NETSCAPE2.0' . "/", $image_head) ? false : true;
}

以上就是本文PHP图片无损压缩的处理方法的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。