Преобразование цветового пространства JPEG (Adobe RGB в sRGB) в Linux

Я создаю миниатюры и изображения среднего размера из больших фотографий. Эти фотографии меньшего размера предназначены для отображения в онлайн-галерее. Многие фотографы отправляют изображения в формате JPEG, используя Adobe RGB. Меня спросили, могут ли миниатюры и изображения среднего размера использовать sRGB, поскольку изображения выглядят так, как они выглядят " flat» в некоторых браузерах.

В настоящее время я использую ImageMagick для создания меньших версий. У него есть опция -colorspace, но, похоже, это не то, что я хочу.

Есть ли другой способ сделать это? Кроме того, как вы думаете, это стоит?


person Dave    schedule 03.05.2009    source источник


Ответы (4)


Вы можете использовать опцию ImageMagic -profile:

convert image.jpg -profile <adobe.icc> -profile <sRGB.icc> new_image.jpg

Подробнее см. здесь: http://www.imagemagick.org/Usage/formats/#color_profile.

person HaBaLeS    schedule 03.05.2009
comment
Эта команда прикрепляет файл профиля icc (в данном случае sRGB), но проблема с инструментами просмотра изображений заключается в том, что они не обновляют информацию. В основном к одному изображению прикреплено более одного профиля. Некоторые из них представляют собой простые xml-файлы, в которых записывается все, что пользователь делает в фотошопе, записывается его цветовой профиль и тому подобное. Если вы прикрепляете бинарный файл sRGB.icc, он фактически добавляет профиль, но imagemagick или даже фотошоп (может быть, есть меню для обновления информации) не обновляет другие файлы профиля (в основном xml), поэтому просмотрщик изображений все равно показывает предыдущий профиль. - person Pramod; 06.03.2012
comment
Для достижения наилучшего вывода я объявляю оба: входной и выходной профили convert image.jpg -profile <adobe.icc> -profile <sRGB.icc> new_image.jpg, когда я конвертирую изображения JPG с моего Canon T3i, снятые с цветовым пространством Adobe RGB. - person Rafael Xavier; 09.09.2013
comment
@RafaelXavier, откуда вы берете sRGB.icc и adobe.icc? Если я извлеку профиль из оригинальной фотографии, это будет adobe.icc. Откуда взялся sRGB.icc? - person Sahil; 24.11.2016
comment
@Sahil Хороший вопрос, я уже не помню, откуда я его взял. Хотя их было легко найти в google sRGB color.org/srgbprofiles.xalter#v4pref и Adobe adobe.com/support/downloads/detail.jsp? ftpID=3680 - person Rafael Xavier; 24.11.2016
comment
Просто чтобы быть ясным, основной ответ здесь неверен. Вам действительно следует следовать ответу Рафаэля Ксавье, опубликованному выше 9 сентября 2013 г.: stackoverflow.com/questions/817727/ - person bhouston; 19.06.2018
comment
Для меня мне нужно было сделать только convert image.jpg -profile <sRGB.icc> new_image.jpg, так как существующий профиль встроен в файл. Если я сначала включу профиль Adobe RGB, ImageMagick будет конвертировать дважды (если я правильно прочитал документы). - person Henrik; 30.03.2020

Пробовали ли вы использовать Little CMS? Эта команда преобразует изображение со специальным цветовым профилем (например, Adobe RGB 1998) в изображение без цветового профиля, но с такими же эффективными цветами:

jpgicc -q100 input.jpg output.jpg

Здесь я устанавливаю качество JPEG на 100.

person Kris Wallsmith    schedule 29.05.2012

В следующей ветке на форуме ImageMagick это обсуждается более подробно: http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=16464

Теперь я использую этот скрипт bash для преобразования любого изображения (включая CMYK) в sRGB: http://alma.ch/scripts/any2srgb

Для изображений без встроенных профилей требуются профили icc. Их можно легко найти в сети. Например, на сайте Adobe: http://www.adobe.com/cfusion/search/index.cfm?term=icc+profile&siteSection=support%3Adownloads

Вот краткое изложение (непроверенное) того, что делает полный скрипт (без изменения размера и других опций). Для этого требуются профили и ImageMagick. В системах на основе Debian: apt-get install icc-profiles imagemagick.

#!/bin/bash

srgb=sRGB.icm
cmyk=ISOwebcoated.icc

# extract possible color profile
profile="${f/%.*/.icc}"
convert "$f" "icc:$profile" 2>/dev/null

if cmp -s "$profile" "$srgb" ; then
    # embedded profile is already srgb. Nothing to do
    exit
fi

if [ -s "$profile" ]; then
    # we have an embedded profile, so ImageMagick will use that anyway
    convert "$f" -profile "$srgb" +profile '*' "$outfile"
else
    # no embedded profile in source
    if identify -format "%r" "$f" | grep -q CMYK; then
        # CMYK file without embedded profile
        convert "$f" -profile "$cmyk" -profile "$srgb" "$outfile"
    fi
fi
person mivk    schedule 02.02.2012
comment
Пожалуйста, добавьте всю необходимую информацию (особенно сценарий, который вы используете) в ответ. В противном случае ваш ответ станет бесполезным, если связанная страница изменится. - person Nico Haase; 16.01.2020
comment
@NicoHaase: добавлено краткое описание основных операций, поскольку сценарий длинный, в нем также есть изменение размера и другие параметры. - person mivk; 16.01.2020

Реэкспорт изображения с использованием Krita, кажется, работает достаточно хорошо для меня:

 krita my_img.jpg --export --export-filename my_img_in_srgb.jpg

Krita — это Photoshop/Paint с открытым исходным кодом, с (крайне ограниченным) интерфейсом командной строки. Установите его с помощью

sudo apt install krita
person Boris    schedule 10.10.2020