Использование глубины в Imagemagick Wand не работает как командная строка

Поэтому я использовал для запуска imagemagick direct в bash-скрипте вот так:

/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

Я заметил, что если я удалю "-depth 2" из скрипта bash, результирующее изображение будет точно таким же, как и результат из python, так что же мне не хватает в программе python? Почему опция глубины в python не работает?

2 ответа

С библиотекой палочек 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()
...

квантовать до 4

Я верю quantize метод был добавлен в версию 0.4.2. Также обратите внимание, что в данный момент wand поддерживает ImageMagick-6, поэтому возможно, что в вашей системе установлены 6 и 7.

JPG не поддерживает глубину 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 есть ошибка или вы используете слишком старую версию? Полученные изображения должны выглядеть одинаково с JPG или PNG, но JPG будет просто иметь более похожие цвета.

Другие вопросы по тегам