Я генерирую изображения, используя Python 3.6.6 и Подушка == 5.3.0 .Все изображения имеют формат JPEG и цветовой режим RGB.
Когда я создаю изображение с цветами, оно получится с Type: TrueColor
(и с глубиной канала: красный: 8-битный зеленый: 8-битный синий: 8-битный)
Когда я использую только черный и белый, получится Type: Grayscale
(и с глубиной канала: серый: 8-битный)
Поскольку япопробуйте использовать службу печати, которая принимает только мои цветные изображения, я хочу попытаться сделать черно-белые изображения TrueColor
изображением, даже если в них нет других цветов (RGB).
Могу ли я просто сделать это?
Или изображение TrueColor
означает, что значения RGB не могут быть все 0?
Я не понимаю, как я могу это сделать в подушке.Мой предпочтительный способ - применить это при создании изображения в моем коде Python.
Альтернативой может быть преобразование изображения с помощью инструмента (я нахожусь на Ubuntu 18.04 и использую ImageMagick и ffmpeg).Я попробовал следующее, но ничего не помогло.Выходной файл имеет те же метаданные, что и исходный.
convert -type TrueColor original_file.jpeg converted_file.jpeg
convert -type TrueColor -depth 8 original_file.jpeg converted_file.jpeg
РЕДАКТИРОВАТЬ и Пример
Вот код Python для создания двух изображений в одном и том же режиме (RGB).
from PIL import Image, ImageDraw
white = (255, 255, 255)
black = (0, 0, 0)
red = (230, 25, 75)
def draw_line(file_name, line_color):
"""
Draw a 400x400 image with a white background and one
diagonal line of the given 'line_color'
"""
image = Image.new(mode='RGB', size=(400, 400), color=white)
draw = ImageDraw.Draw(image)
draw.line(xy=((100, 100), (300, 300)), fill=line_color, width=5)
image.save(fp=file_name, format='JPEG')
draw_line(file_name='black_line.jpeg', line_color=black
draw_line(file_name='red_line.jpeg', line_color=red)
Изображение с черной линией будет иметь Type: Grayscale
, а изображение с красной линией Type: TrueColor
.Обратите внимание, что ColorSpace - это sRGB в обоих случаях, а глубина - 8 бит.
identify black_line.jpeg
black_line.jpeg JPEG 400x400 400x400+0+0 8-bit sRGB 5.12KB 0.000u 0:00.000
identify -verbose black_line.jpeg
Type: Grayscale
Colorspace: sRGB
Depth: 8-bit
Channel depth:
gray: 8-bit
identify red_line.jpeg
red_line.jpeg JPEG 400x400 400x400+0+0 8-bit sRGB 5.26KB 0.000u 0:00.000
identify -verbose red_line.jpeg
Type: TrueColor
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Итак, мой вопрос: могу ли я создавать изображения с помощью подушки, чтобы независимо от того, какие цвета я использую, они всегда появлялиськак же type: TrueColor
с 3 каналами?Так что даже в случае, когда я рисую черную линию на белом фоне.
(ПРИМЕЧАНИЕ: когда я рисую красную линию с шириной по умолчанию 1, она будет иметь Type: Palette
вместо TrueColor
)
Попытка преобразования в TrueColor
convert black_line.jpeg -type truecolor black_line_tc.jpeg
identify -verbose black_line_tc.jpeg |grep Type
Type: Grayscale
Таким образом, он не будет преобразовывать тип в TrueColor.Я провел различие между идентифицируемыми выходами, но нет никаких существенных различий в отношении channel_depth / colorspace / type и т. Д., Поэтому я не буду публиковать вывод.
identify -verbose black_line.jpeg > identity_black.txt
identify -verbose black_line_tc.jpeg > identity_black_tc.txt
diff identity_black.txt identity_black_tc.txt