Python Imagemagick魔杖深度的使用与命令行不同

Python Imagemagick魔杖深度的使用与命令行不同,python,linux,imagemagick,wand,color-depth,Python,Linux,Imagemagick,Wand,Color Depth,因此,我曾经在bash脚本中运行imagemagick direct,如下所示: /usr/local/bin/convert image.jpg -resize 1000x1000\! -depth 2 result.jpg 所以我决定用wand将我的脚本转换成python from wand.image import Image ... with Image(file=f) as img: img.transform(resize='1000x1000!') img.d

因此,我曾经在bash脚本中运行imagemagick direct,如下所示:

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

所以我决定用wand将我的脚本转换成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()
...


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

JPG不支持depth 2。它总是输出到深度8,量化将添加更多颜色。请使用PNG或GIF或TIFF以及-depth 2尝试您的命令。这样行吗

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库,您需要使用
wand.image.image.quantize
方法,并将颜色减少到4(黑/白+2色)

从wand.image导入图像
...
图像(文件=f)作为img:
img.transform(resize='1000x1000!')
图像量化(4,#颜色数
“灰色”,颜色空间
0,#树深度
假,犹豫不决
假)#测量误差
保存(filename='result\u py.jpg')
f、 关闭()
...


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

我尝试使用您的第一个图像作为输入,并使用
convert
wand.image
生成完全相同的图像-但是,如果您运行
identification-verbose result.jpg
,它显示
深度:8位
…发布原始图像。你的ImageMagick版本是什么?什么版本的魔杖?如果不是最新版本,请尝试升级。@更多信息,您可以使用第二个映像作为原始映像进行测试。原始图像(image.jpg)是第二个图像的25x25大小one@fmw42origina(image.jpg),python-m wand.version 0.3.8版本:ImageMagick 7.0.7-22 Q16 x86_64 2018-02-08Wand位于0.4.4。您可以尝试升级。ImageMagick的版本是7.0.8.11 Q16,但您的版本似乎足够新,并且工作正常。当我将你的图像处理为jpg和png时,它们看起来很相似。但是JPG有103种颜色,256种颜色,深度为8。PNG有2种颜色和4种颜色的颜色映射。好的,我更新到了0.4.4,并添加了img.format='PNG'现在它像一个字符一样工作了它现在也适用于jpg吗?它看起来应该很相似,只是jpg压缩的颜色更接近。这在我看来就像魔杖里的一个bug。但我不是魔杖专家。我建议你把这个问题发布给Wand开发者。