7
votes

Pil Jpeg, comment conserver la couleur de pixel

J'ai des expériences avec jpeg, Le doc a déclaré "100 désactive complètement le JPEG Étape de quantification. "

Cependant, j'ai toujours une modification de pixels lors de l'épargne. Voici mon code: xxx

J'ai eu une sortie inattendue: 22 25 42 45 62 65 Que dois-je faire pour préserver la valeur de pixel? Veuillez noter que j'ai également essayé avec PHP en utilisant imagejpeg et me donne la valeur correcte Lorsque qualité = 100.

Je peux utiliser png pour préserver, mais je veux connaître la raison derrière cela et s'il y a une option pour éviter


0 commentaires

3 Réponses :


4
votes

JPEG portera toujours un risque de perte de perte, voir est sans perte JPEG lorsque la qualité est définie sur 100? .

Votre meilleur pari est d'utiliser un autre format, surtout si vos expériences sont pour la science :) Même si vous êtes obligé de commencer avec JPEG (qui semble improbable), vous devez immédiatement convertir en un format sans perte pour tout type d'analyse et Modification.

Si vous voulez vraiment essayer la perte sans perte JPEG avec Python, vous pouvez essayer jpegtran , "Le logiciel de transformation de l'image JPEG sans perte du groupe JPEG indépendant" , mais comme @ @mark Notes, cela ne vous sera pas très loin.

Au fait, la quantification est utilisée dans la pertinence ou la compression sans perte, de sorte que je suppose que

... 100 désactive complètement la phase de quantification JPEG. [1]

signifie simplement que ce n'est pas du tout comprimé.


1 commentaires

Les choses que vous pouvez faire avec jpegtran sont assez limitées.



4
votes

JPEG se compose de nombreuses étapes différentes, dont beaucoup présentent une certaine perte. En utilisant un exemple d'image contenant uniquement de rouge, vous avez probablement exécuté le pire délinquant - Downsampling ou Chroma Sous-échantillonnage . La moitié des informations de couleur sont jetées, car l'œil est plus sensible aux changements de luminosité que les changements de couleur.

Certains codeurs JPEG peuvent être configurés pour désactiver le sous-échantillonnage, y compris le PIL et l'oreiller en réglant Subsamplever = 0 . En tout cas, cela ne vous donnera pas un fichier totalement sans perte car il y a toujours d'autres étapes qui introduisent une perte.


6 commentaires

ok il y a une option pour le sous-échantillonnage dans Pil, j'ai défini sous-ensemble = 0 sur img.save () et cela me donne le bon 20-70. Réglage de la même valeur pour tout rouge, vert, bleu aussi fait parfois le tour.


@ W00D, pouvez-vous me donner un lien vers où cela est documenté? Je ne pouvais pas le trouver.


Je suppose que c'est sans papiers, je l'ai trouvé dans la source: bitbucket.org/effbot/pil-2009-raclette/src/...


@ W00D ici c'est des années plus tard et oreiller l'a documenté: oreiller.readthedocs.io/fr/3.4.x/handbook/...


SubsampleLing = 0 La définit sur le réglage de la qualité la plus élevée, préservant la qualité, mais peut étendre l'espace de stockage nécessaire aux images de qualité inférieure.


@Gringosuave True, mais ce n'est pas la question de la question.



1
votes

crois que j'ai compris comment conserver le sous-échantillonnage de la couleur actuelle et d'autres détails de la qualité: xxx

par https://www.exiv2.org/tags.html J'ai constaté que la balise YCBCRSUBSampling n'est pas conservée dans EXIFÂ dans les fichiers JPEG:

dans les données compressées JPEG Un marqueur JPEG est utilisé au lieu de cette balise.

Cela doit être pourquoi il y a une autre fonction dans un endroit apparemment à l'écart de la possibilité de l'attraper.


0 commentaires