Comment arrêter GD2 de laver les couleurs sur le redimensionnement d'images?
J'ai développé une communauté de partage de photos site à l'aide de CodeIgniter 1.7. Les Photos qui sont téléchargés par les membres sont automatiquement redimensionnées dans un certain nombre de formats, pour lequel j'utilise la CodeIgniter de Manipulation de l'Image de la classe. Cette classe est intégrée dans le cadre et surtout un wrapper autour de plusieurs bibliothèques de manipulation d'images, comme GD, GD2, ImageMagick, et NETPBM. Sur ma machine, je ne peux que faire usage de GD2, donc c'est où cette question sera d'environ.
À mon problème. Voici un exemple d'une photo redimensionnée sur mon site. Notez que l'original était très grand, plus de 3000px de large:
http://www.jungledragon.com/image/195/female_impala_close-up.html
Maintenant, regardez cette même image, également redimensionné, juste un peu plus grand sur Flickr:
http://www.flickr.com/photos/fledder/3763538865/in/set-72157621744113979
Voir la différence? Je vais essayer de combler cette énorme lacune. La première chose que j'ai faite a été d'appliquer un filtre de netteté aux images. Vous pouvez voir le résultat ici:
Bien que pas encore parfait, il a au moins approches le niveau de netteté de l'image Flickr. Le problème reste que les couleurs sont lavés, comme si leur saturation est diminué. Ce qui se passe avant le filtre d'accentuation déjà, donc il doit être dans GD2.
Cette question est d'une importance vitale pour moi, mais je ne sais pas où chercher. J'ai trouvé certains .NET threads parlant de chroma sous-échantillonnage, mais je ne sais pas quoi faire avec cette information dans ma configuration. Je suis à la recherche de toute solution qui fonctionne dans les limites de mon installation.
Mise à jour:, par les Présentes, le fichier d'origine, exactement comme je l'ai transféré à la fois sur mon site et sur Flickr:
http://www.jungledragon.com/img/DSC07275.jpg
Mise à jour 2: je suis choqué. Dans le bon sens. Il m'a fallu beaucoup de peine à installer ImageMagick, mais après le passage (ce qui était une question de réglage 'imagemagick' comme la bibliothèque à utiliser dans le Code de l'Allumeur de manipulation de l'image de la classe, le résultat de l'image de test est le suivant:
ImageMagick le redimensionnement est de le faire exactement comme prévu. Les couleurs sont préservées, et la netteté est là. Oui, j'ai désactivé mon personnalisée d'affûtage routine depuis il n'est plus nécessaire à cause de ImageMagick. En plus de cela, le processus est beaucoup plus rapide et moins gourmands en mémoire aussi. Et voici une autre grande partie: je ne peux pas l'expliquer, mais je n'ai absolument rien à dire ImageMagick pour utiliser un profil colorimétrique spécifique, ce qui a été suggéré par l'utilisateur @Alix. Dans mon test, jusqu'à présent, il semble que la couleur de l'information est respecté avec ou sans profil incorporé. La sortie est tout simplement une version plus petite de l'entrée. Est ImageMagick vraiment intelligente, ou suis-je en train de rêver?
- Cela ressemble à un problème de profil. Faire les photos viennent avec un profil ICC? Serait-il possible de voir une réelle fichier d'origine (pas le Flickr de la version)? Est-il possible de l'essayer avec ImageMagick, si seulement temporairement pour voir si il y a une différence?
- Le Flickr de l'image, en effet, est livré avec un haut-profil:
IEC 61966-2.1 Default RGB colour space - sRGB
pas entièrement sûr de ce qui doit être fait, mais c'est là où vous devez être à la recherche. - J'ai mis à jour la question d'inclure un lien vers le fichier d'origine. Merci pour le pointeur, j'espère que cela permettra de réduire ma recherche. Je ne peux pas passer à ImageMagick dans ma configuration actuelle, mais si il s'avère que c'est la seule solution possible, je vais chercher des arrangements dans ce domaine. Pour l'instant, j'espère que ce problème peut être résolu en GD2.
- Votre image d'origine est un
Adobe RGB (1998)
profil ICC ci-joint. Hmm. Avez-vous de Photoshop? Pouvez-vous essayer de convertir l'image àsRGB
, et le télécharger à nouveau? Je crains que je ne pense pas que GD va être en mesure de traiter avec le profil, il ne sait rien sur eux, de sorte que vous aurez à nourrir cuillère le droit des données. ImageMagick connaît le concept de profils, au moins à un niveau de base, d'où ma question. - J'ai juste essayé les deux, la suppression du profil en Photoshop ainsi que la commutation d'un profil avec un de complètement différent de la tonalité des couleurs. Sur l'écran ils ont l'air un lot différent. Jusqu'à ce que je les télécharger. Il ne semble pas à la matière, tous sont atténués comme la capture d'écran dans la question.
- afin de changer d'espace de couleurs sRGB pour ne pas l'aider? Avez-vous essayez de l'enregistrer entièrement sans profil (à l'aide de la case à cocher dans le dialogue "Enregistrer sous") je n'ai pas Photoshop à portée de main, ou je vais l'essayer moi-même.
- L'image sur votre site regarde de plus près de l'original que sur Flickr.
- pas pour moi! Le Flickr et de l'image d'origine, l'air presque identique sur mon système, l'image GD diffère notamment
- Pekka, les utilisateurs de regarder les photos dans les navigateurs, pas de Photoshop, donc il pourrait être intéressant pour vous de voir, comment regarde dans mon navigateur (Opéra): img841.imageshack.us/img841/6217/compareb.png
- c'est une observation intéressante. Je dirais que tout ce que vous utilisez pour regarder l'original ne respecte pas le profil de couleur. Il sera en effet le résultat de la édulcoré les couleurs que vous voyez. Pourtant, il est étrange que vous voyez la pleine saturation de l'image sur Flickr. Qu'avez-vous utilisé pour afficher l'original?
Vous devez vous connecter pour publier un commentaire.
J'ai pu encore tester avec Imagick:
La moitié gauche de l'image a été traitée avec Imagick et la
sRGB_IEC61966-2-1_no_black_scaling.icc
profil de couleur, la moitié droite n'a pas de profil colorimétrique associé et montre exactement la même si elles sont traitées avec Imagick ou GD; voici le code que j'ai utilisé:Voici une comparaison de plusieurs sRGB profils disponibles sur le color.org site web:
Il me semble que le troisième profil de produit la plus vive résultats, d'autres que je n'ai aucune idée de comment on allait faire un choix définitif.
MODIFIER: Apparemment, Imagick est livré avec un groupés profil sRGB, de sorte que vous n'avez pas besoin de télécharger l'un de la Couleur de l'Image site web du Consortium, le code suivant doit gérer tous les scénarios:
scaleImage()
ouresizeImage()
au lieu dethumbnailImage()
, il permettra de préserver la couleur du profil sans avoir à manuellement l'injecter. C'est le cas avec imagemagick sur la ligne de commande, je suppose qu'il s'applique également à la Imagick classe.Votre image d'origine est un
Adobe RGB (1998)
profil ICC ci-joint. Je pense que GD, ne sachant pas sur les profils, est l'interprétation des données d'image de manière incorrecte. Voici un liées PHP bug pour confirmer cela.Vous auriez besoin pour préparer l'image avec le bon profil, le plus probable sRGB.
Si vous avez une application qui peut le faire, essayez de le convertir en sRGB et re-télécharger.
Si vous avez besoin d'une solution côté serveur pour le problème, je pense que vous aurez besoin d'une librairie de traitement d'image qui peut faire face à des profils. Pour être honnête, je ne sais pas comment ImageMagick traite de ces choses, mais au moins il est familier avec le concept de base de profils de couleurs.
Connexes: Comparaison du sRGB et Adobe RGB
J'ai un petit peu d'info pour contribuer à ce fil. Je suis photographe et pas un développeur web, donc mes connaissances techniques n'est pas grande, cependant, j'ai eu affaire à ce problème donc j'espère que ce post aidera quelqu'un d'autre en bas de la ligne.
- Je utiliser une photo en ligne outil de vente qui ré-échantillonne toutes mes images à l'aide de GD. J'ai eu des problèmes avec les images de prospective funky, même lorsqu'il est transféré avec une bonne sRGB la conversion et de la gestion des profils ICC attachés, lors de l'affichage sur mon wide-gamut du moniteur.
Ce que j'ai trouvé le problème est que le GD bandes de toutes les métadonnées et les profils ICC à partir des fichiers d'origine. Ensuite, les navigateurs, ne voyant aucun profil, ne sont pas les afficher correctement. C'est léger, sur un gamut du moniteur, mais très évident sur une large gamme de couleurs.
Si vous rencontrez des problèmes avec cela, vous pouvez tester ma théorie en utilisant Firefox et la modification d'un paramètre dans about:config. Modifier la valeur de "gfx.color_management.en mode" par défaut "2" à "1". Ce réglage de la force de Firefox pour assumer aucune image sans profil ICC sRGB et de l'afficher en tant que tel. Les Images doivent alors apparaître comme vous vous attendez et identique à Photoshop/Lightroom/etc. Pourquoi tous les navigateurs ne pas utiliser ce bon sens que leur valeur par défaut est au delà de moi.
Malheureusement, mon panier est seulement le programme d'installation de PHP GD donc je ne peut pas obtenir de bons résultats en ce moment. J'aimerais vraiment voir GD mise à jour de congé profils ICC jointe ou d'avoir la possibilité de l'ajout d'un simple profil sRGB sur l'exportation.
Plus d'infos ici:
http://www.gballard.net/psd/go_live_page_profile/embeddedJPEGprofiles.html#
J'ai trouvé ce script:
https://github.com/slavicv/jpeg-icc/blob/master/class.jpeg_icc.php
Ce script copie le profil de couleur de votre image d'origine dans votre nouvelle image.
Ainsi, après le redimensionnement, vous pouvez ajouter le profil de couleur de votre image d'origine.
Ce script n'a pas besoin de Imagick de faire le tour.