gpt4 book ai didi

imagemagick - 使用 ImageMagick 高效生成缩略图并转换

转载 作者:行者123 更新时间:2023-12-04 00:47:39 25 4
gpt4 key购买 nike

我希望使用 Python 中的 ImageMagick 转换实用程序有效地生成各种大小的缩略图。我的一些图像文件非常大(约 15MB JPG)。

我可以做到的一种方法是获取全尺寸图像,并从全尺寸图像生成各种缩略图,如下所示:

convert sample_image.jpg -resize 1024x768  sample_image-1024x768.jpg
convert sample_image.jpg -resize 800x600 sample_image-800x600.jpg
convert sample_image.jpg -resize 400x300 sample_image-400x300.jpg
convert sample_image.jpg -resize 200x150 sample_image-200x150.jpg

但另一种方法是调整彼此的图像大小:
convert sample_image.jpg           -resize 1024x768  sample_image-1024x768.jpg
convert sample_image-1024x768.jpg -resize 800x600 sample_image-800x600.jpg
convert sample_image-800x600.jpg -resize 400x300 sample_image-400x300.jpg
convert sample_image-400x300.jpg -resize 200x150 sample_image-200x150.jpg

这样做有什么缺点吗,或者有更好的方法吗?这样看起来效率会高很多。

作为推论,是否有任何标志或“技巧”转换用于加快过程?

最佳答案

ImageMagick 有一些技巧可以帮助您在要处理大图像以及要从同一原始图像创建不同输出时优化速度:

  • 使用 ImageMagick 的 mpr:{name}功能,这使得它可以暂时将输入图像保存到一个命名的内存程序寄存器中,您可以稍后(在处理时)从中读取数据,这比从硬盘读取数据的速度要快得多。
  • 在一个过程中执行所有调整大小操作,写出您需要的不同输出大小。

  • 更好的消息是您可以将这两者合并为一个命令。

    因此,您不需要运行多个进程,并承担所有上下文切换开销——一次性完成。

    下面的示例还从原始图像中裁剪了两个单独的区域,并从中创建了重新调整大小的缩略图,只是为了显示 IM 可以在一个命令行中执行多少种不同的操作。当然,它还输出您要求的尺寸。 (当然,您需要一个非常大尺寸的输入图像才能使裁剪参数起作用)。
    convert                           \
    huge-original.jpg \
    -quality 80 \
    -colorspace rgb \
    +profile '*' \
    -filter Lanczos \
    -write mpr:copy-of-huge-original \
    +delete \
    mpr:copy-of-huge-original -crop '3000x2000+0+480' -resize '200x125!>' -write thumb1-extract.jpg +delete \
    mpr:copy-of-huge-original -crop '2000x1500+280+220' -resize '75x75!>' -write thumb2-extract.jpg +delete \
    mpr:copy-of-huge-original -resize '1024x768' -write sample-1024x768.jpg +delete \
    mpr:copy-of-huge-original -resize '800x600' -write sample-800x600.jpg +delete \
    mpr:copy-of-huge-original -resize '400x300' -write sample-400x300.jpg +delete \
    mpr:copy-of-huge-original -resize '200x150' -write sample-200x150.jpg +delete \
    mpr:copy-of-huge-original -resize '163x163!>' -write sample-163x163.jpg

    更新

    我现在才看到@JonathanOng 提出的问题:How to stream the output to <stdout> ?

    假设你希望标准输出的格式也是 JPEG,你可以试试这个:
    convert                           \
    huge-original.jpg \
    -quality 80 \
    -colorspace rgb \
    +profile '*' \
    -filter Lanczos \
    +write mpr:copy-of-huge-original \
    mpr:copy-of-huge-original -crop '3000x2000+0+480' -resize '200x125!>' +write thumb1-extract.jpg \
    mpr:copy-of-huge-original -crop '2000x1500+280+220' -resize '75x75!>' +write thumb2-extract.jpg \
    mpr:copy-of-huge-original -resize '1024x768' +write jpeg:- \
    mpr:copy-of-huge-original -resize '800x600' +write jpeg:- \
    mpr:copy-of-huge-original -resize '400x300' +write jpeg:- \
    mpr:copy-of-huge-original -resize '200x150' +write jpeg:- \
    mpr:copy-of-huge-original -resize '163x163!>' +write jpeg:-

    这样每个变体都会进入标准输出。那么你如何处理这个连续的图像流,取决于你......

    备注 , 而不是写 -write filename +delete您可以使用 +write filename .它相当于相同的效果。

    关于imagemagick - 使用 ImageMagick 高效生成缩略图并转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12206217/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com