#python #image #image-processing #python-imaging-library #jpeg
#python #изображение #обработка изображений #python-imaging-library #jpeg
Вопрос:
При преобразовании изображения CMYK в RGB мои цвета инвертируются. Я хочу сохранить те же (визуально) цвета и удалить данные exif.
Мне нужно сделать это, чтобы иметь возможность отображать преобразованное изображение на любом изображении или в программе просмотра PDF.
Результат (код ниже)
Оригинальный CMYK
Изображение слишком тяжелое для загрузки -> https://www.dropbox.com/s/q9z2jejhasjqdoy/original.jpeg?dl=0
Преобразованный RGB
Преобразованный RGB после раскомментирования invert_pixels(image)
Преобразовано с помощью TinyJPG (это преобразование работает правильно в PDF и других средствах просмотра изображений. Я хочу по существу воссоздать этот профиль изображения)
Стек
- Python 3.5.9
- PIL 5.1.0
Тестовый код:
image_filename = "original.jpeg"
image_file = open(image_filename, "rb")
image = Image.open(image_file)
orientate_image_using_exif(image)
image_data = list(image.getdata())
image_without_exif = image.convert("RGB")
image_without_exif.putdata(image_data)
# invert_pixels(image)
image_without_exif.save(
u"RGB_{}".format(image_filename),
progressive=True,
icc_profile=image.info.get('icc_profile'),
subsampling=0,
)
Комментарии
- Я конвертирую в RGB только потому, что метаданные изображения TinyJPG показывают, что это RGB
- Учитывая, насколько ближе меня приблизила инверсия пикселей, я предполагаю, что мне нужно найти правильную формулу для каждого преобразования пикселей с сохранением правильного цвета
orientate_image_using_exif
не влияет на конечные цвета
Вопрос
- Может кто-нибудь помочь мне заставить это работать правильно? Желаемый результат похож на изображение TinyJPG. Он выполняет сжатие без потерь. Я не хочу / забочусь об этом. Меня интересует только удаление данных exif (работает) и сохранение правильных цветов (не работает)
Комментарии:
1. Зачем вы вообще конвертируете свое изображение в RGB? JPEG может напрямую хранить изображения CMYK / YCCK.
2. Я пытаюсь добиться именно того, что показано на последнем изображении. То же, что и в последнем изображении, изменение исходного изображения на RGB, похоже, заставляет его работать в программе просмотра PDF. Исходное изображение CMYK при открытии с помощью программы просмотра PDF инвертирует цвета
3. Возможно, вам также следует удалить icc_profile при преобразовании изображения в RGB.
4. Кстати, изображение, которым вы поделились, не содержит данных Exif (сегмент маркера APP1).
5. Да, кажется, это не так. Это означает, что проблема заключается в том, как цветовое пространство представлено в разных считывателях. Идеальным решением было бы сохранить те же цвета визуально, что и сжатое крошечное изображение в формате jpg
Ответ №1:
Не уверен, что я понимаю, что вы здесь делаете. Я получаю правильно окрашенное, разделенное изображение с помощью этого кода:
from PIL import Image
im = Image.open('original.jpg')
RGB = im.convert('RGB')
RGB.save('result.jpg')
Я вижу «Профиль ICC» в оригинале exiftool
примерно так:
exiftool original.jpg
ExifTool Version Number : 12.00
File Name : original.jpg
Directory : .
File Size : 5.1 MB
File Modification Date/Time : 2020:11:27 12:08:27 00:00
File Access Date/Time : 2020:11:27 12:09:49 00:00
File Inode Change Date/Time : 2020:11:27 12:08:43 00:00
File Permissions : rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
DCT Encode Version : 100
APP14 Flags 0 : (none)
APP14 Flags 1 : (none)
Color Transform : Unknown (RGB or CMYK)
Profile CMM Type : Adobe Systems Inc.
Profile Version : 2.1.0
Profile Class : Output Device Profile
Color Space Data : CMYK
Profile Connection Space : Lab
Profile Date Time : 2000:07:26 05:41:53
Profile File Signature : acsp
Primary Platform : Apple Computer Inc.
CMM Flags : Not Embedded, Independent
Device Manufacturer : Adobe Systems Inc.
Device Model :
Device Attributes : Reflective, Glossy, Positive, Color
Rendering Intent : Perceptual
Connection Space Illuminant : 0.9642 1 0.82491
Profile Creator : Adobe Systems Inc.
Profile ID : 0
Profile Description : U.S. Web Coated (SWOP) v2
Profile Copyright : Copyright 2000 Adobe Systems, Inc.
Media White Point : 0.7084 0.73595 0.57104
A To B0 : (Binary data 41478 bytes, use -b option to extract)
A To B2 : (Binary data 41478 bytes, use -b option to extract)
A To B1 : (Binary data 41478 bytes, use -b option to extract)
B To A0 : (Binary data 145588 bytes, use -b option to extract)
B To A1 : (Binary data 145588 bytes, use -b option to extract)
B To A2 : (Binary data 145588 bytes, use -b option to extract)
Gamut : (Binary data 37009 bytes, use -b option to extract)
Image Width : 4167
Image Height : 4167
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 4
Image Size : 4167x4167
Megapixels : 17.4
И я вижу, что он попал в выходной файл следующим образом:
exiftool result.jpg
ExifTool Version Number : 12.00
File Name : result.jpg
Directory : .
File Size : 718 kB
File Modification Date/Time : 2020:11:27 12:15:48 00:00
File Access Date/Time : 2020:11:27 12:16:14 00:00
File Inode Change Date/Time : 2020:11:27 12:15:54 00:00
File Permissions : rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Image Width : 4167
Image Height : 4167
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 4167x4167
Megapixels : 17.4
Ключевые слова: Обработка изображений, Python, PIL, Pillow, EXIF, strip EXIF, профиль, ICC-профиль, профиль полосы.
Комментарии:
1. Большое спасибо, что нашли время и помогли. Хорошо, кажется, основную проблему было проще исправить, чем я думал. Простое преобразование открытого изображения в RGB позволяет программе просмотра PDF также корректно отображать его.
2. Однако цвета все равно будут разными, если вы сравните результат вашего кода: dropbox.com/s/6fh3yunscl25mz4/result_stack.jpeg?dl=0 и крошечное изображение JPG. Вы знаете, как это исправить?
3. Проблема в том, что профиль влияет на цвета, и как только вы его удалите, они исчезнут, вам нужно что-то, что применит профиль для изменения цветов, а затем сохранит измененные цвета без профиля. Не уверен, что предложить.