Использование глубины в Imagemagick Wand не работает как командная строка
Поэтому я использовал для запуска imagemagick direct в bash-скрипте вот так:
/usr/local/bin/convert image.jpg -resize 1000x1000\! -depth 2 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()
...
Я заметил, что если я удалю "-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()
...
Я верю 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 будет просто иметь более похожие цвета.