使用PHP将adobeRGB图片转换为sRGB后,如何获得与原点相同的图像

时间:2016-12-08 11:40:01

标签: php image colors gd imagick

我必须使用PHP GD处理图像。问题是当我复制原始图片时,颜色不一样。

原始图片:

OriginalPicture

人们告诉我将我的jpg转换为sRGB profil而不是AdobeRPG。

所以我做到了:

    $image = new Imagick($chemin_image);

// On enleve tout les profils qu'il y avait à la base
$image->profileImage('*' , false);

// Essayer de mettre en SRGB si ce n'est pas le cas
$icc_srgb = file_get_contents('../../admin-cache/profil_icc/sRGB_IEC61966-2-1_black_scaled.icc');

$image->profileImage('icc' , $icc_srgb);
$image->transformImageColorspace(13);

$image->writeImage($chemin_image);

我知道不一样的尺寸和相同的质量,是正常的。

那项工作,颜色是相同的,但现在不是相同的对比:

ConvertedImage

我去了Facebook,看看他是如何在自己的上传系统中做的,我尝试了我的照片并且它的工作非常好,但我不知道他们是如何做的。

1 个答案:

答案 0 :(得分:0)

php的文档不完全正确,不要使用transformImageColorspace来做这些事情。

function ConvertirProfilEnSRGB($chemin_image){
    if(class_exists('Imagick')) {
            $final_image = new Imagick($chemin_image);

            // Add profil 
            $icc_srgb = file_get_contents('profil_icc/sRGB_v4_ICC_preference.icc');

            $final_image->profileImage('icc', $icc_srgb);

            // On va écrire l'image à la fin
            $final_image->writeImage($chemin_image);
        }
}

在此处找到sRGB_v4_ICC_preference.icc:

sRGB profiles

如果你想用GD创建图像(对于每个例子调整大小),为了在不更改所有代码的情况下转换sRGB,你必须使用原始图片和最终图片上方的代码进行转换:

$pathToFile = $_FILES['myfile']['tmp_name'];

// First convert of original image
ConvertirProfilEnSRGB($pathToFile) ;
// GD with true color for best colors 
$ImageChoisie = @imagecreatefromjpeg($pathToFile);

// Some code ...
// truecolor...

// Create final image 
imagejpeg($ImageChoisie, $pathToFinalFile, 80);
// Add sRGB to final image
ConvertirProfilEnSRGB($pathToFinalFile) ;

我希望这会对你有所帮助。