Использование ImageMagick Wand глубины не работает как командная строка - PullRequest
0 голосов
/ 10 сентября 2018

Итак, я использовал для запуска imagemagick напрямую в скрипте bash, например:

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

result.jpg

Так что я решил преобразовать свой скрипт в python, используя wand!

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 ]

0 голосов
/ 10 сентября 2018

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

0 голосов
/ 10 сентября 2018

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 будет просто иметь более похожие цвета.

...