2016-12-08 16 views
0

PHP GDで画像を操作する必要があります。問題は、元の画像をコピーするときに、色が同じではないということです。adobeRGB画像をPHPでsRGBに変換した後、元画像と同じ画像を得る方法

オリジナル画像:

OriginalPicture

人々はのsRGBプロフィール代わりAdobeRPGに私のJPGに変換するために私に言いました。

だから私はそれをやった:

$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のプロファイルではありません。私はそれを解決し、私の質問に答えました。助けていただきありがとうございます。 –

答えて

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

あなたは変更せずにsRGBの中ですべてのコードを変換するために、(exempleあたりのサイズ変更のため)GDで画像を作成する場合は、

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

私はこれがあなたを助けてくれることを願っています。

関連する問題