PHP(GB库扩展)使用及常用函数

上周,有客户问我如何使用PHP+GD库创建水印图像叠加功能。
我直接把我的代码发给他了。
事实上,GD库非常有趣。
虽然看上去功能很多,但使用起来确实很方便。

仔细想想,生成验证码的需求完全是GD库的特权。
去年我在杭州做一个电商项目的时候,写过生成验证码的代码。
每次刷新时,我都会随机选择 4 个字符并添加 1 0 条随机行作为重叠。
关键是它不需要任何第三方库,仅由GD完成,服务器负载完全稳定。

但是如果你想避免风险,你确实需要注意GD库中的内存管理。
我曾经在青岛创建过一个批量图像处理脚本。
它可以很好地处理数千个小图像,但当处理大于 1 0 KB 的 PNG 文件时,内存就会耗尽。
后来查了资料,发现应该使用imagecreatefromstring()直接从文件流中读取,而不是使用imagecreatefrompng()。
修改后,内存占用立即下降。

经常使用 imagecopymerge() 和 imagecopyresampled() 等函数。
如果要合并水印,请使用第一个。
如果您对质量要求较高,请使用后者。
我有一个客户,他在主产品图像中添加了徽标,并使用 imagecopymerge() 关闭它。
发现背景颜色会模糊。
最后使用imagecopyresample()解决问题。
虽然这个函数重采样会消耗CPU,但是效果确实不错。

你问我为什么不使用imagick。
我想说主要是因为我的服务器环境懒得匹配。
PHP8 .1 之后,官方推荐使用imagick,但是我的很多老项目都运行在PHP7 .4 上,升级成本非常高。
而且GD库函数名称简单直观,imagick中画笔角度等参数非常难记。

创建缩略图实际上是一项艺术任务,它不仅仅是使原始图像变小。
我在长沙做一个旅游网站,发现直接缩放会导致文字模糊。
后来我用imagecopyresampled()按比例裁剪复制,效果还可以。
还要注意保存格式。
JPEG适合图像,PNG适合透明背景的图像。
你无法正确使用它瞎的。

无论如何,这取决于你。
虽然GD库比较旧,但是它的功能还是可用的。
想学就多写一些验证码、水印、缩略图之类的小例子,用了就熟练了。
我还在想如何提高大规模图像处理的性能,比如使用多进程或者队列?

告别繁琐的GD库:如何用claviska/simpleimage轻松搞定PHP图片处理!

结论:claviska/simpleimage简化了PHP图像处理,实用。

1 .简化操作:使用API​​代替GD函数,减少内存负担。
2 . 链式调用:代码流畅,e.g.例如。
“$image->resize(3 2 0,2 00)->flip('x')”。
3 .功能齐全:裁剪、缩放、滤镜、绘图等。
4 . 错误处理:异常机制,例如例如。
“$image->fromFile('image.jpg')”。
5 . 易于部署:基于GD,易于安装。
6 . 示例:生成缩略图、创建批量水印、格式转换。
7 . 代码少:比GD库少7 0%。
8 、维护方便:链式调用,逻辑清晰。

自己掂量一下。

php-gd怎样实现图片裁剪拉伸_php-gd不按比例裁剪缩放

最主要的是使用 imagecopyresampled() 来强制转换。

裁剪+拉伸:先剪切源区域,然后将其插入到新的画布尺寸中。

拉伸原始图像:选择整个源区域并为目标设置新的尺寸。

要点: 1 . 如果高清图像比例不等,请勿使用此方法创建高清图像。
2 . phpinfo()确认GD扩展已启用 3 .处理完图像后,imagedestroy()
不要混淆参数的顺序:目标图像、源图像、目标起始点、源起始点、目标宽度和高度、源宽度和高度。

如何选择来源地区?自己看一下代码中的数字。