8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un problème depuis plusieurs jours. Voici ma photo que je dois travailler en php avec GD ou ImageMagick :

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


En la créant sur GD je perdais les vrais couleurs, la teinte devenait plus sombre car il n'y avait aucun profil où de données récupérés.

On m'a donc conseillé qu'il fallait simplement convertir mon image en sRGB pour que les couleurs soient gardées.

Voici le code que j'utilise :


	$image = new Imagick($chemin_image);

	$icc_srgb = file_get_contents('../../admin-cache/outils/sRGB_IEC61966-2-1_black_scaled.icc');

	$image->setImageProfile('icc' , $icc_srgb);
	$image->setImageColorspace(Imagick::COLORSPACE_SRGB);

	$image->writeImage($chemin_image);


Or c'est bien ce que j'ai fais, autant sur l'image d'origine que celle recréée par GD, le profil devient bien sRGB mais voici le résultat à chaque fois :

http://regex.info/exif.cgi?dummy=on&imgurl=https%3A%2F%2Fdonnemoifaim.fr%2Fimgs%2Falsacreations%2Fdont-work.jpg

Les couleurs d'origine ne sont pas conservées !

Je me suis donc dit qu'au final il fallait peut-être garder une donnée à l'origine ou la convertir pour qu'elle fonctionne en sRGB.

Je me suis tourné vers Facebook, je me suis dis qu'eux avaient déjà dût résoudre le problème depuis longtemps avec leur système d'upload, voici le résultat avec la même photo upload chez eux :

http://regex.info/exif.cgi?dummy=on&imgurl=https%3A%2F%2Fscontent-cdg2-1.xx.fbcdn.net%2Fv%2Ft35.0-12%2F15302469_1170918652987061_306690036_o.jpg%3Foh%3D734c90a1bd4ce46a535a71cc9f93722a%26oe%3D58478710#ICC_Profile

Sans surprise, on a du sRGB avec les couleurs d'origine.

Donc je cherche désespérément la formule ou la donnée à reprendre/convertir de l'original pour l'intégrer dans la nouvelle et qui conservera les couleurs de base.

Pour l'instant j'ai remarqué que : Media Black Point est différent de mon upload

Merci en tout cas pour votre aide. Smiley smile
Modifié par kevinlourenco (05 Dec 2016 - 16:03)
Modérateur
C'est une conversion qu'il faut faire,

D'après la doc (php):
a écrit :
Imagick::setImageColorspace

Configure l'espace de couleurs de l'image. Cette méthode doit être utilisée lors de la création de nouvelles images. Pour changer l'espace de couleurs d'une image existante, vous devez utiliser la méthode Imagick::transformImageColorspace().


setImageColorspace attribue un profil sans effectuer de conversion
Je ne pense pas que ce soit le problème puisque l'un ou l'autre fait exactement la même chose. J'ai essayé :


$image->transformImageColorspace(Imagick::COLORSPACE_SRGB);

// ou 

$image->transformImageColorspace(Imagick::COLORSPACE_RGB);


Le COLORSPACE_SRGB ne fait rien du tout et conserve le profil AdobeRGB
Le COLORSPACE_RGB fait la perte de couleur mais ne marque pas le profil en sRGB (sur le site il est écrit qu'il n'y à pas de profil de couleur)

D'ailleurs en mettant seul ce code :


$icc_srgb = file_get_contents('../../admin-cache/profil_icc/sRGB_IEC61966-2-1_black_scaled.icc');
$image->setImageProfile('icc' , $icc_srgb);


Les couleurs sont aussi perdues mais à la différence le profil est bien marqué sRGB. Ce qui prouve bien que c'est ce bout de code qui permet de mettre en sRGB en tout cas d'un point de vue informatif.
Modifié par kevinlourenco (05 Dec 2016 - 19:00)