后端处理图片

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

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

代码实现

<?php/*** Message: 处理图片* Date: 2018/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 是 无限制,在图片数据不大的情况下设置比较安全,不然还是加上一定的内存限制吧

备注

文章纯手打,给个赞呗

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

PHP处理图片(JPG/PNG/GIF)相关推荐

  1. 漫画:卷积神经网络为什么适合处理图片数据?

    传统的神经网络(全连接)如下所示: 比如一张图片如果是64*64的,那么它的数据量就是64×64×3,因为每张图片都有 3 个颜色通道.那么图片的特征向量维度为 12288. 对的!64×64还是比较 ...

  2. python获取图片像素矩阵_用python处理图片实现图像中的像素访问

    这篇文章主要介绍了关于用python处理图片实现图像中的像素访问,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然 ...

  3. im4java转换图片格式_ImageMagick和im4java处理图片[转]

    注意事项:如果是在windows下运行,则需要配置ImageMagick的路径: 我是配置在config.properties文件里了,内容如下所示: imageMagickPath=C:\\Imag ...

  4. python像素大于_用python处理图片实现图像中的像素访问

    前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

  5. GPUImage混合滤镜处理图片

    原文:http://blog.csdn.net/crazyduang/article/details/52413930 import "ViewController.h" #imp ...

  6. php 自动处理小图的代码,PHP 处理图片的类实现代码

    PHP 处理图片的类实现代码 2021-01-23 20:19:208 复制代码 代码如下: /** * author:yagas * email:yagas60@21cn.com */ class ...

  7. Node.js webpack中url-loader处理图片路径

    默认情况下, webpack 无法处理 css 文件中的 url 地址,不管是图片还是 字体库, 只要是 URL 地址,都处理不了,所以我们要使用 url-loader进行处理图片的url地址 安装 ...

  8. Filter Effects - 使用 CSS3 滤镜处理图片

    CSS3 Filter(滤镜)属性提供了提供模糊和改变元素颜色的功能.CSS3 Fitler 常用于调整图像的渲染.背景或边框显示效果.这里给大家分享的这个网站,大家可以体验下 CSS3 对图片的处理 ...

  9. 2021-02-24 Python等比例压缩与质量处理图片

    Python等比例压缩与质量处理图片 一.Python PIL 1.在使用PIL image处理图像要获取高质量的关键地方是下面两点: 1.处理时要用 ANTIALIAS:2.保存时是要设置 qual ...

  10. Windows Phone 实用开发技巧(10):Windows Phone 中处理图片的技巧

    在开发Windows Phone应用程序的时候,或多或少会与图片打交道,下面总结下Windows Phone 中处理图片的一些技巧 1.  图片格式. 2.  图片编译方式 3.  图片加载方式 4. ...

最新文章

  1. 不该被遗忘的nodeName、nodeValue和nodeType!
  2. [头脑风暴] 解读Docker Bridge网络模型
  3. P4027-[NOI2007]货币兑换【斜率优化dp,CDQ分治】
  4. visual studio 的各个版本下载地址
  5. (5)ISE软件开发流程(第1天)
  6. DNS(1) DNS基本概念和域名系统
  7. EasyUI 通过 Combobox 实现 AutoComplete 效果
  8. 安卓TV开发(前言)— AndroidTV模拟器初识与搭建
  9. 【线性模型引论】王松桂著 课后习题2.2参考答案
  10. 2022.3.14 阿里笔试
  11. 教师档案管理信息系统
  12. 2017青岛网络赛 C - The Dominator of Strings(AC自动机)
  13. 内网环境部署zabbix5.0版本监控(一)
  14. 企业怎么管理多个邮箱?如何高效地管理邮件?
  15. 圆周率一千万亿位_圆周率一千位
  16. java 24字母_java 时间格式化中的模式字母
  17. 跨境电商案例分析:他投资3万美元卖爆款手表,年入2.28亿!
  18. 【对讲机的那点事】“驴途”不是“囧途”,安全出游请务必配备上对讲机!
  19. Windows系统下电脑强制卡死、关机的邪恶方法
  20. 无监督学习应用在反欺诈中

热门文章

  1. 大学四年生活总结_大学四年生活的总结
  2. ARKit 让未来触手可及
  3. BCP命令,导入导出CSV文件
  4. AI人工智能相面项目总结四,AI相面需要分析的脸部数据
  5. 解决Internet HTML邮件中图片显示为红叉(X)的问题
  6. amazeui学习笔记一(开始使用3)--兼容性列表compatibility
  7. electron mac tray 当没设置菜单点击不高亮
  8. 初学Java接口,(USB接口)
  9. Airtest入门及多设备管理总结
  10. 做什么事情首先都要明确自己的目标!