100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > PHP处理图片(JPG/PNG/GIF)

PHP处理图片(JPG/PNG/GIF)

时间:2024-05-17 03:11:17

相关推荐

PHP处理图片(JPG/PNG/GIF)

后端处理图片

在有些特殊时候,可能需要后端来处理一些图片数据或者需要批量处理图片,这时候我们可以依赖GD库来实现

说明:主要是对JPG/PNG/GIF图的缩放,修改尺寸,如果需要裁剪而非缩放的话,其实原理也是一样,稍稍改造下函数即可

代码实现

<?php/*** Message: 处理图片* Date: /10/18* Time: 上午10:12* Return:*/class ImageHelper{const MAX_JPG_QUALITY = 100;const MAX_PNG_QUALITY = 9;/*** 对原图片按要求尺寸进行缩放* @param $srcFile //源文件* @param $objFile //输出文件* @param $newWidth* @param $newHeight* @param int $quality //输出图片质量,0 - 10* @param bool $keepFormat //如果你需要保持原图片的横版或竖版,请设为true* @return bool*/public function setImageSize($srcFile, $objFile, $newWidth, $newHeight, $quality = 7, $keepFormat = false){if (!file_exists($srcFile)) {return false;}if ($newWidth < 1 || $newHeight < 1) {return false;}if ($quality < 0 || $quality >10) {return false;}$type = exif_imagetype($srcFile);$supportType = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);if (!in_array($type, $supportType, true)) {return false;}//加载图片switch($type) {case IMAGETYPE_JPEG :$srcImg = imagecreatefromjpeg($srcFile);break;case IMAGETYPE_PNG :$srcImg = imagecreatefrompng($srcFile);break;case IMAGETYPE_GIF :$srcImg = imagecreatefromgif($srcFile);break;default:return false;}$w = imagesx($srcImg);$h = imagesy($srcImg);//保持版式,即保持原图的宽大于高或高大于宽的格式,防止变形if ($keepFormat) {if (($w < $h && $newWidth > $newHeight) || ($w > $h && $newWidth < $newHeight)) {list($newWidth, $newHeight) = array($newHeight, $newWidth);}}//将原图数据写入新图//注意--是否需要alpha通道按情况判断,不需要可以注释掉以节省内存和空间$newImg = imagecreatetruecolor($newWidth, $newHeight);$alpha = imagecolorallocatealpha($newImg, 0, 0, 0, 127);//alphaimagefill($newImg, 0, 0, $alpha);//alphaimagecopyresampled($newImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $w, $h);imagesavealpha($newImg, true);//alphaswitch($type) {case IMAGETYPE_JPEG :imagejpeg($newImg, $objFile,$quality * 10); // 存储图像break;case IMAGETYPE_PNG :imagepng($newImg, $objFile, intval($quality / 10 * 9));break;case IMAGETYPE_GIF :imagegif($newImg, $objFile);break;default:break;}return true;}}

简单示例

$imgHelper = new ImageHelper();if ($imgHelper->setImageSize('./test.jpg', './new_file.jpg', 1920, 1080)) {echo "change success\n";} else {echo "failed\n";}

批量处理

$src = '/test/';$count = 1;if ($dh = opendir($src)) {while ($fileName = readdir($dh) !== false) {if ($fileName != '.' && $fileName != '..' && !empty($fileName)) {if ($imgHelper->setImageSize('./test.jpg', './new_file' . $count++ . '.jpg', 1920, 1080)) {echo "{$count}change success\n";} else {echo "{$count}failed\n";}}}}

注意

在批处理图片的时候,或者某些图片比较大,可能会超出PHP脚本所允许的内存大小,这时候我们可以在脚本前去掉内存限制以满足需求。

请一定在确认不影响服务前提下操作!

ini_set('memory_limit', '-1');

-1 是 无限制,在图片数据不大的情况下设置比较安全,不然还是加上一定的内存限制吧

备注

文章纯手打,给个赞呗

也可以关注我的个人微信公众号,有问题留言即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。