J'essaye de charger une image PNG en utilisant SDL mais le programme ne fonctionne pas et cette erreur apparaît dans la console
avertissement libpng: iCCP: profil sRGB incorrect connu
Pourquoi cet avertissement apparaît-il? Que dois-je faire pour résoudre ce problème?
Réponses:
Libpng-1.6 est plus strict sur la vérification des profils ICC que les versions précédentes. Vous pouvez ignorer l'avertissement. Pour vous en débarrasser, supprimez le bloc iCCP de l'image PNG.
Certaines applications traitent les avertissements comme des erreurs; si vous utilisez une telle application, vous devez supprimer le bloc. Vous pouvez le faire avec l'un des nombreux éditeurs PNG tels que ImageMagick
Pour supprimer le bloc iCCP non valide de tous les fichiers PNG d'un dossier (répertoire), vous pouvez utiliser à
mogrify
partir d'ImageMagick:Cela nécessite que votre ImageMagick ait été construit avec libpng16. Vous pouvez facilement le vérifier en exécutant:
Si vous souhaitez savoir quels fichiers doivent être corrigés au lieu de tous les traiter à l'aveugle, vous pouvez exécuter
où les
-n
moyens ne réécrivent pas les fichiers et-q
suppriment la plupart de la sortie, à l'exception des avertissements. Désolé, il n'y a pas encore d'option dans pngcrush pour supprimer tout sauf les avertissements.Les versions binaires d'ImageMagick sont disponibles
Pour les projets Android (Android Studio), accédez au
res
dossier.Par exemple:
la source
mogrify **/*.png
semble modifier tous les fichiers de l'arborescence. Je préférerais ne mettre à jour que la seule image défectueuse.find . -type f -name '*.png' -execute mogrify \{\} \;
pour modifier récursivement les.png
fichiers dans le répertoire courant.-ow
pour écraser et corriger le fichier, et également réduit la taille d'environ 1 / 6ème! Je devais juste obtenir le code source du programme pour mon mac, le compiler, l'installer manuellement et l'exécuter. GitHub Kjuly / pngcrush peut avoir un binaire précompilé, mais pas sûr. Sourceforge semblait n'avoir que les exe Windows disponibles et le code source. La réponse de friederbluemle semble faire cela et plus encore.Utilisez
pngcrush
pour supprimer le profil sRGB incorrect du fichier png:-ow
écrasera le fichier d'entrée-rem allb
supprimera tous les morceaux auxiliaires sauf tRNS et gAMA-reduce
réduit le type de couleur ou la profondeur de bits sans perteDans la sortie de la console, vous devriez voir
Removed the sRGB chunk
, et peut-être plus de messages sur les suppressions de blocs. Vous vous retrouverez avec un fichier PNG plus petit et optimisé. Comme la commande écrasera le fichier d'origine, assurez-vous de créer une sauvegarde ou d'utiliser le contrôle de version.la source
find . -type f -iname '*.png' -exec pngcrush -ow -rem allb -reduce {} \;
(Testé sur GNU / Linux)Solution
Le profil incorrect peut être corrigé par:
Remarque: cette solution utilise la bibliothèque Qt .
Exemple
Voici un exemple minimal que j'ai écrit en C ++ afin de démontrer comment implémenter la solution proposée:
Le code source complet d'une application GUI basée sur cet exemple est disponible sur GitHub .
MISE À JOUR DU 05.12.2019: La réponse était et est toujours valide, mais il y avait un bogue dans l'application GUI que j'ai partagée sur GitHub, rendant l'image de sortie vide. Je viens de le réparer et je m'excuse pour la gêne occasionnée!
la source
Vous pouvez également simplement résoudre ce problème dans Photoshop ...
la source
Pour ajouter à l'excellente réponse de Glenn, voici ce que j'ai fait pour trouver les fichiers défectueux:
J'ai utilisé la recherche et les xargs car pngcrush ne pouvait pas gérer beaucoup d'arguments (qui ont été retournés par
**/*.png
). Le-print0
et-0
est requis pour gérer les noms de fichiers contenant des espaces.Ensuite , la recherche dans la sortie de ces lignes:
iCCP: Not recognizing known sRGB profile that has been edited
.Et pour chacun de ceux-ci, exécutez mogrify dessus pour les réparer.
Cela évite qu'un commit ne modifie chaque fichier png dans le référentiel alors que seuls quelques-uns ont été modifiés. De plus, il a l'avantage de montrer exactement quels fichiers étaient défectueux.
J'ai testé cela sur Windows avec une console Cygwin et un shell zsh. Merci encore à Glenn qui a mis la plupart de ce qui précède, j'ajoute simplement une réponse car c'est généralement plus facile à trouver que les commentaires :)
la source
find . -name "*.png" -exec sh -c 'echo Testing {} && pngcrush -n -q {}' \;
Chaque PNG erroné générerapngcrush: iCCP: known incorrect sRGB profile
Grâce à la réponse fantastique de Glenn , j'ai utilisé la fonctionnalité "mogrify * .png" d' ImageMagik . Cependant, j'avais des images enterrées dans des sous-dossiers, alors j'ai utilisé ce simple script Python pour appliquer cela à toutes les images de tous les sous-dossiers et j'ai pensé que cela pourrait aider les autres:
la source
mogrify **/*.png
.Il existe un moyen plus simple de résoudre ce problème avec Mac OS et Homebrew:
Installez homebrew s'il n'est pas encore installé
ou pour le faire avec tous les fichiers du répertoire courant:
Il créera une copie fixe pour chaque fichier png dans le répertoire courant et le placera dans le sous-répertoire tmp. Après cela, si tout va bien, il vous suffit de remplacer les fichiers d'origine.
Une autre astuce consiste à utiliser les applications Keynote et Preview pour créer les icônes. Je les dessine à l'aide de Keynote, dans la taille d'environ 120x120 pixels, sur une diapositive avec un fond blanc (l'option de rendre les polygones modifiables est géniale!). Avant d'exporter vers Aperçu, je dessine un rectangle autour de l'icône (sans aucun remplissage ni ombre, juste le contour, d'une taille d'environ 135x135) et je copie le tout dans le presse-papiers. Après cela, il vous suffit de l'ouvrir avec l'outil de prévisualisation en utilisant "Nouveau depuis le Presse-papiers", de sélectionner une zone de 128x128 pixels autour de l'icône, de copier, d'utiliser à nouveau "Nouveau depuis le Presse-papiers" et de l'exporter au format PNG. Vous n'aurez pas besoin d'exécuter l'outil pngfix.
la source
Après avoir essayé quelques suggestions sur cette page, j'ai fini par utiliser la solution pngcrush. Vous pouvez utiliser le script bash ci-dessous pour détecter et corriger de manière récursive les mauvais profils png. Passez-lui simplement le chemin complet du répertoire dans lequel vous souhaitez rechercher les fichiers png.
Le scénario:
la source
pngcrush 1.7.85, uses libpng 1.6.21 and zlib 1.2.8
mais mon pngcrush n'a-warn
ni-reduce
drapeaux, donc cette solution ne fonctionne pas.quelques informations générales à ce sujet:
(source: https://wiki.archlinux.org/index.php/Libpng_errors )
(source: https://forum.qt.io/topic/58638/solved-libpng-warning-iccp-known-incorrect-srgb-profile-drive-me-nuts/16 )
la source
En utilisant la visionneuse d'images IrfanView sous Windows, j'ai simplement réenregistré l'image PNG et cela a corrigé le problème.
la source
Extension de la solution friederbluemle, téléchargez le pngcrush puis utilisez le code comme celui-ci si vous l'exécutez sur plusieurs fichiers png
ici tous les fichiers png liés aux projets sont dans 1 dossier.
la source
J'ai exécuté ces deux commandes à la racine du projet et son correctif.
En gros, redirigez la sortie de la commande "find" vers un fichier texte à utiliser comme liste de fichiers à traiter. Ensuite, vous pouvez lire ce fichier texte dans "mogrify" en utilisant le drapeau "@":
Cela utiliserait "find" pour obtenir toutes les images * .png plus récentes que 1 jour et les imprimer dans un fichier nommé "list.txt". Puis «mogrify» lit cette liste, traite les images et écrase les originaux avec les versions redimensionnées. Il peut y avoir des différences mineures dans le comportement de "find" d'un système à un autre, vous devrez donc consulter la page de manuel pour connaître l'utilisation exacte.
la source
Voici une réponse ridiculement brutale:
J'ai modifié le script gradlew. Voici ma nouvelle commande exec à la fin du fichier dans le
la source