8721 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai changé une config dans mon serveur pour que ImageMagick fonctionne correctement dorénavant.

Ce nouveau code :


$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('profil_icc/sRGB_IEC61966-2-1_black_scaled.icc');

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

$image->writeImage($chemin_image);


Permet donc de bien conserver les couleurs d'origines de mon Image JPEG pour la convertir en sRGB.

Voici donc mon image d'origine :

http://regex.info/exif.cgi?imgurl=https%3A%2F%2Fdonnemoifaim.fr%2Fimgs%2Falsacreations%2Fphoto_acceuil_3.jpg

Avant cela ne fonctionnais pas car les couleurs n'étaient pas conservées.

Là, les couleurs sont bien conservées, mais le contraste est différent : c'est beaucoup plus sombre !

http://regex.info/exif.cgi?dummy=on&imgurl=test.donnemoifaim.fr%2Ftemporaire%2Ftoto94-1481199044-ajout-de-plat-7.jpg

Je ne vois pas comment faire et où il pourrait y avoir une erreur.

C'est pourtant possible puisque le système d'upload de Facebook le fait correctement et utilise le même profil d'image (sRGB_IEC61966-2-1_black_scaled.icc), la réponse ne doit pas être très loin.

Merci en tout cas à vous tous.
Bon, vu qu'on est jamais mieux servis que par soi-même, je vous poste la solution (pour ceux qui galère également) :

Contrairement à la doc ce code est une erreur :


$image->transformImageColorspace(13);

// 13 correspond au profil sRGB 


L'image devient trop sombre, les couleurs sont bien gardés mais la conversion est infecte.

Mieux vaut intégrer sous forme de meta donnée (ICC) le profil cela est amplement suffisant !


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

	// Essayer de mettre en SRGB si ce n'est pas le cas
	$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 fichier que vous devez télécharger sur ce site :

http://www.color.org/srgbprofiles.xalter

Pour finir, ceux qui voudrait ne pas avoir à tout refaire au niveau de la création de l'image avec GD, la conversion fonctionne très bien. Néanmoins il faut faire la conversion sur l'image d'origine pour que cela fonction et sur l'image de fin pour avoir une conversion "propre"

Exemple code (formulaire POST) :



$cheminImageChoisie = $_FILES['monfichier']['tmp_name'] ; 

// Code verification 
// ....
ConvertirProfilEnSRGB($cheminImageChoisie) ;
$ImageChoisie = @imagecreatefromjpeg($cheminImageChoisie);

// ... Creation copy, redimensions GD, etc..
// ...

imagejpeg($monImageFinal , $destinationFinal , $qualite_final);
ConvertirProfilEnSRGB($destinationFinal) ;



Voila, j'espère que ça en aidera plus d'un ! Smiley smile