php imagemagick 速度,php – ImageMagick单转换命令性能

我有几千个图像要处理,所以每毫秒计数.每张图片的大小约为2-3Mb.

源文件送入转换器:

image.jpg的

要从源生成的文件:

orig_image.jpg // original image

1024x768_image.jpg // large image

250x250_image.jpg // thumbnail 1

174x174_image.jpg // thumbnail 2

在浏览imagemagick转换性能的不同主题时,我感觉单个命令应该比每个图像大小的单个转换更快.此外,还提到了内存利用率作为性能提升. (ImageMagick batch resizing performance)

多个命令转换(每个命令在循环中通过php的exec()运行):

convert "image.jpg" \

-coalesce -resize "1024x768>" +repage "1024x768_image.jpg"

convert "1024x768_image.jpg" \

-coalesce \

-resize "250x250>" \

+repage \

-gravity center \

-extent "250x250" "250x250_image.jpg"

convert "1024x768_image.jpg" \

-coalesce \

-resize "174x174>" \

+repage \

-gravity center \

-extent "174x174" "174x174_image.jpg"

mv image.jpg orig_image.jpg

包含ImageMagicks mpr的单一命令转换:

convert "image.jpg" -quality 85 -colorspace rgb -coalesce \

-resize "1024x768>" \'

-write "1024x768_image.jpg" \

-write mpr:myoriginal +delete \

mpr:myoriginal -coalesce \

-resize "250x250>" \

-gravity center \

-extent "250x250" \

-write "250x250_image.jpg" +delete \

mpr:myoriginal -coalesce \'

-resize "174x174>" \

-gravity center \

-extent "174x174" \

-write "174x174_image.jpg"

性能测试后,结果有些出乎意料.循环中的单个命令转换在62秒内完成,而多个命令转换仅在16秒内执行?

# convert -version

Version: ImageMagick 7.0.2-1 Q8 i686 2017-02-03 http://www.imagemagick.org

Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC

License: http://www.imagemagick.org/script/license.php

Features: Cipher DPC HDRI OpenMP

Delegates (built-in): bzlib freetype jng jpeg lzma png tiff wmf xml zlib

还安装了libjpeg-turbo jpg处理库,但我不知道(不知道如何检查)如果ImageMagic正在使用它或旧的libjpeg.

任何想法如何加快图像转换过程?

编辑:

不知道如何在stackoverflow上正确格式化它,但我只是注意到单行命令有一个参数“-colorspace rgb”,并且多行命令没有实际导致如此奇怪的结果,其中更快地处理多个命令.

删除了“-colorspace rgb”参数,之后MPR转换版本运行最佳,并提供了额外的性能提升.

总而言之,我最终使用了这个命令:

// MPR

convert "orig_image.jpg" -quality 80 -coalesce \

-resize "1024x768>" \

-write 1024x768_image.jpg \

-write mpr:myoriginal +delete \

mpr:myoriginal -resize "250x250>" \

+repage -gravity center -extent "250x250" \

-write "250x250_image.jpg" \

-write mpr:myoriginal +delete \

mpr:myoriginal -coalesce -resize "174x174>" \

+repage -gravity center -extent "174x174" \

-write "174x174_image.jpg"

解决方法:

你没有使用jpeg收缩负载,这将提供一个简单的加速.

jpeg库有一个简洁的功能,它可以让你以全分辨率,1 / 2,1 / 4或1/8进行解压缩.由于jpg在内部工作的方式,1/8分辨率特别快.

要在转换中利用它,您需要提示您需要特定大小的图像的jpeg加载器.为避免混叠,您应该要求至少比目标尺寸大200%的图像.

在这台机器上,我看到:

$vipsheader image.jpg

image.jpg: 5112x3470 uchar, 3 bands, srgb, jpegload

$time convert image.jpg -resize 1024x768 1024x768_image.jpg

real 0m0.405s

user 0m1.896s

sys 0m0.068s

如果我设置了收缩负载提示,它的速度提高了约2倍:

$time convert -define jpeg:size=2048x1536 image.jpg -resize 1024x768 1024x768_image.jpg

real 0m0.195s

user 0m0.604s

sys 0m0.016s

对于非常大的jpg文件,你会看到一个惊人的加速.

你也可以考虑另一个缩略图.例如,vipsthumbnail再次快一点:

$time vipsthumbnail image.jpg -s 1024x768 -o 1024x768_image.jpg

real 0m0.111s

user 0m0.132s

sys 0m0.024s

虽然实时时间仅下降了2倍,但用户时间却下降了5倍左右.这使得与gnu并行运行很有用.例如:

parallel vipsthumbnail image.jpg -s {} -o {}_image.jpg ::: \

1024x768 250x250 174x174

标签:php,imagemagick,imagemagick-convert

来源: https://codeday.me/bug/20190717/1487311.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值