2016-12-08 29 views
0

我必須使用PHP GD的圖像。問題是當我複製原始圖片時,顏色不一樣。如何在將adobeRGB圖片轉換爲sRGB與PHP之後獲得與原始圖像相同的圖像

原始圖片:

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); 

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

這項工作中,顏色是一樣的,但現在不一樣contraste:

ConvertedImage

我去給Facebook,就看他怎麼做他自己的上傳系統,我試過我的照片和它的工作得很好,但我不知道他們是如何完成的。

+0

使用'PHP 7.0.13'我可以'imagecopyresized()'你的原始圖像並輸出它,而不改變顏色。那麼,你最初的問題是什麼(不是使用'imagick'後的問題)?你想調整大小/裁剪/旋轉圖像嗎?什麼版本的PHP正在使用? – timclutton

+0

問題是你可以做到這一點,但它不在sRGB profil中。我解決它並回答了我的問題。謝謝你的幫助。 –

回答

0

php的doc不是完全正確的,不要使用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) ; 

我希望這會對您有所幫助。

相關問題