Imagick: невозможно назначить или преобразовать цветовой профиль

Мне так тяжело пытаться преобразовать изображения из профиля Adobe RGB в профиль sRGB, что теперь я начинаю думать, что, возможно, я вообще не могу назначать или преобразовывать цветовые профили на своем хосте.

ImageMagick 6.8.9-6 Q16 x86_64 15 августа 2014 г.
class_exists("Imagick") = true

Здесь я пытаюсь назначить профиль образу, созданному с помощью IM, даже это не работает. Что здесь не так?

try {

    $image = new Imagick();
    $image->newImage(100, 100, new ImagickPixel('red'));
    $image->setImageFormat('jpg');
    $image->setImageCompression(Imagick::COMPRESSION_JPEG);
    $image->setImageCompressionQuality(60);

    // TRY 1
    // $image->setImageColorspace(Imagick::COLORSPACE_SRGB);

    // TRY 2
    $profile_path = "sRGB_IEC61966-2-1_black_scaled.icc";
    $profile = file_get_contents($profile_path);
    $image->profileImage("icc", $profile);
    $image->setImageColorspace(Imagick::COLORSPACE_SRGB);

} catch(Exception $e) {
    echo 'Exception caught: ',  $e->getMessage(), "\n";
} 

header("Content-Type: image/jpg");
echo $image->getImageBlob();

РЕДАКТИРОВАТЬ Вот что я пробовал с существующим изображением с цветовым пространством Adobe RGB:

try { 
    $profile_path = "sRGB_IEC61966-2-1_black_scaled.icc";

    $image = new Imagick();
    $image->readImage("original-small.jpg");

    // TRY 1 > keeps the same Adobe RGB profile
    // $image->transformImageColorspace(Imagick::COLORSPACE_SRGB);

    // TRY 2 > strips all EXIF data + profile but does NOT assign new profile
    // $image->stripImage();
    // $image->transformImageColorspace(Imagick::COLORSPACE_SRGB);

    // TRY 3 > keeps the same Adobe RGB profile
    // $profile = file_get_contents($profile_path);
    // $image->profileImage("icc", $profile);
    // $image->transformImageColorspace(Imagick::COLORSPACE_SRGB);

    // TRY 4 > strips all EXIF data + profile but does NOT assign new profile
    // $image->stripImage();
    // $profile = file_get_contents($profile_path);
    // $image->profileImage("icc", $profile);
    // $image->transformImageColorspace(Imagick::COLORSPACE_SRGB);

} catch(Exception $e) {
    echo 'Exception caught: ',  $e->getMessage(), "\n";
}

header("Content-Type: image/jpg");
echo $image->getImageBlob();

person FFish    schedule 24.04.2015    source источник


Ответы (1)


Я неправильно понял, что вы спрашивали. Приведенный ниже код изменяет изображение с цветового профиля в стиле Adobe на «обычный» веб-профиль.

$image = new Imagick("fullSize_MK3L7748.jpg");

// This isn't required - but it could be used
// $image->transformImageColorspace(\Imagick::COLORSPACE_SRGB);

$profile = file_get_contents("sRGB_IEC61966-2-1_black_scaled.icc");
$image->profileImage("icc", $profile);
$image->writeImage("test_blackScaled.jpg");

Проверка изображений с помощью идентификации теперь дает:

# identify -verbose fullSize_MK3L7748.jpg | grep icc
    icc:name: Adobe RGB (1998)
    Profile-icc: 560 bytes

и

# identify -verbose test_blackScaled.jpg | grep icc
    icc:name: IEC 61966-2-1 Default RGB Colour Space - sRGB
    Profile-icc: 3048 bytes

И изображения должны выглядеть почти одинаково — точные результаты могут различаться в зависимости от браузера.

Исходное изображение в формате aRGB Исходное изображение в формате aRGB

Выходное изображение Выходное изображение

person Danack    schedule 24.04.2015
comment
Нет, я уже пробовал это с существующим изображением с цветовым пространством Adobe RGB, никакого эффекта, он сохраняет тот же профиль. $image = new Imagick(); $image->readImage("original-small.jpg"); $image->transformimagecolorspace(Imagick::COLORSPACE_SRGB); - person FFish; 25.04.2015
comment
Гыее, я не верю! Добавление косой черты впереди сделало свое дело! $image->transformImageColorspace(\Imagick::COLORSPACE_SRGB); Я почти бросил это.. Большое спасибо!! Любая идея, почему мне нужна косая черта? - person FFish; 03.05.2015
comment
НЕТ, подожди... нет, я пробовал с изображением в sRGB. С изображением Adobe RGB преобразование не требуется. Думаю, я сдаюсь.. :-| Также никакой помощи от моего хоста. - person FFish; 03.05.2015
comment
Можете ли вы попробовать с верхним изображением, которое я разместил - это изображение Adobe RGB, и, очевидно, результат должен быть таким же, как у меня. - person Danack; 03.05.2015
comment
Привет Danack, спасибо за помощь. Я не могу попробовать с вашим изображением, потому что профиля больше нет, может быть, из-за StackOverflow? Я разместил страницу в Интернете здесь: goo.gl/zcjktQ Кажется, я не совсем понимаю цветовое пространство против профиля против цветовой модели По-видимому, профилированные изображения Adobe RGB по-прежнему имеют цветовое пространство sRGB?? - person FFish; 05.05.2015