2015-04-24 2 views
2

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

ImageMagick 6.8.9-6 Q16 x86_64 2014-08-15
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(); 

EDIT Вот что я пытался с существующим изображением с цветовым пространством 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(); 

ответ

0

я неправильно понял, что вы просили. Приведенный ниже код изменяет изображение из-за того, что он является цветным профилем стиля 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 Source aRGB image

выходного изображения Output image

+0

Нет, я попытался это уже с существующим изображением с Adobe RGB цветового пространства, никакого эффекта, он сохраняет тот же профиль. '$ image = new Imagick(); $ Image-> readImage ("оригинал-small.jpg"); $ image-> transformimagecolorspace (Imagick :: COLORSPACE_SRGB); ' – FFish

+0

Geeee, я не верю! Добавление трейлинг-коса перед фронтом сделало трюк! '$ image-> transformImageColorspace (\ Imagick :: COLORSPACE_SRGB);' Я почти дал это .. спасибо огромное! Любая идея, почему мне нужна косая черта? – FFish

+0

НЕТ, Держись .. Нет, я попробовал с изображением с sRGB. Без изображения Adobe RGB нет конверсии. Думаю, я отказываюсь от этого ..: - | Также никакой помощи от моего хозяина. – FFish

Смежные вопросы