主题
图片处理
使用图片处理功能,可以直接修改上传的原图,对原图进行诸如裁切、调整尺寸、增加滤镜、添加水印、改变图片格式等修改。
内存设置
一个 3MB 的 jpeg 图片,在处理中可能会占用到 60MB 甚至更高,这是理想的状态下。但通常情况下,甚至会有可能达到 30MB 的图片。这种图片一旦使用复杂的处理规则,加上合成水印时所使用的字体文件或图片,这可能会占用大量内存,而 PHP 的默认内存限制在 128MB,会很容易导致内存溢出。
为了避免这种情况,我们建议您修改 PHP 的脚本内存限制设置。找到对应 PHP 的配置文件(php.ini),搜索配置项名称 memory_limit
,将它的值改为 512M
。如果您有处理较大图片的需求,你也可以将它设置为 1G
或更高。
ini
...
; Maximum amount of memory a script may consume
; https://php.net/memory-limit
memory_limit = 512M
...
更改以后记得重启 PHP 和消息队列。
同步和异步的区别
图片处理支持同步或异步,设置为同步后,图片处理会在图片上传那一刻处理,实时输出处理后的图片。同步处理考验服务器的内存速度、I/O 读写速度,如果图片较大,或图片处理规则比较复杂,则处理时间就会较长,这可能导致上传图片的耗时更长。
设置为异步,则在图片上传成功后直接返回图片链接,然后图片会进入消息队列,通过作业链依次执行 图片安全审核(若有)->图片处理->自动删除图片(若有)->生成缩略图,可以看到,图片安全审核在图片处理之前,也就是说,只有正常状态的图片才会进行处理。处理完成后,程序会将处理后的图片直接替换掉原图。
异步处理不影响上传时间,不会增加上传耗时,但缺点就是异步不支持自定义图片输出格式(会导致 url 被改变)。
图片保存质量
图片保存质量取值范围为 1 到 100。
- 1 表示最低图像质量(压缩率最高)
- 100 表示最佳图像质量(压缩效果最弱)
默认 75 为估算值,是最接近原图片质量的,不建议将保存质量设置超过 92 或更高,否则可能会导致图片变的非常大。