Imagemagick魔杖使用深度不像命令行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Imagemagick魔杖使用深度不像命令行相关的知识,希望对你有一定的参考价值。

所以我曾经在这样的bash脚本中直接运行imagemagick:

/usr/local/bin/convert image.jpg -resize 1000x1000! -depth 2 result.jpg

result.jpg

所以我决定使用魔杖将我的脚本转换为python!

from wand.image import Image
...
with Image(file=f) as img:
    img.transform(resize='1000x1000!') 
    img.depth = 2
    img.save(filename='result_py.jpg') 
f.close()
...

result_py.jpg

我注意到如果我从bash脚本中删除“-depth 2”,结果图像将与python的结果完全一样,那么我在python程序中缺少什么?为什么python中的深度选项不起作用?

答案

JPG不支持深度2.它总是输出到深度8,量化将增加更多颜色。尝试使用PNG或GIF或带有-depth 2的TIFF命令。这有用吗?

convert -size 256x256 gradient: -depth 2 grad_d2.jpg

  Depth: 8-bit
  Colors: 10
  Histogram:
     10752: (  0,  0,  0) #000000 gray(0)
       256: (  1,  1,  1) #010101 gray(1)
       512: ( 84, 84, 84) #545454 gray(84)
     20992: ( 85, 85, 85) #555555 gray(85)
       256: ( 86, 86, 86) #565656 gray(86)
       256: (169,169,169) #A9A9A9 gray(169)
     21248: (170,170,170) #AAAAAA gray(170)
       256: (171,171,171) #ABABAB gray(171)
       256: (254,254,254) #FEFEFE gray(254)
     10752: (255,255,255) #FFFFFF gray(255)


convert -size 256x256 gradient: -depth 2 grad_d2.png

  Depth: 8/2-bit
  Colors: 4
  Histogram:
     11008: (  0,  0,  0) #000000 gray(0)
     21760: ( 85, 85, 85) #555555 gray(85)
     21760: (170,170,170) #AAAAAA gray(170)
     11008: (255,255,255) #FFFFFF gray(255)

也许Wand有一个bug或者你使用的版本太旧了?生成的图像看起来与JPG或PNG类似,但JPG的颜色更接近。

另一答案

使用Python的魔杖库,您需要使用wand.image.Image.quantize方法,并将颜色减少到4(黑/白+ 2种颜色)。

from wand.image import Image
...
with Image(file=f) as img:
    img.transform(resize='1000x1000!') 
    img.quantize(4,      # Number of colors
                 'gray', # Colorspace
                 0,      # Tree depth
                 False,  # Dither
                 False)  # Measure Error
    img.save(filename='result_py.jpg') 
f.close()
...

quantize down to 4

我相信quantize方法是在版本0.4.2中添加的。另请注意,魔杖目前支持ImageMagick-6,因此您的系统可能同时安装了6和7。

以上是关于Imagemagick魔杖使用深度不像命令行的主要内容,如果未能解决你的问题,请参考以下文章

图片处理命令行工具ImageMagick介绍

ImageMagick命令行使用方法

通过 ImageMagick 或 GhostScript 命令行旋转 .EPS 文件

ImageMagick 命令行:将 PDF 转换为高清图像

使用 ImageMagick 调整大小,然后从命令行裁剪图像

开发利器_ImageMagick.基于Linux命令行的图片缩放/编辑/格式转换?