2010-11-17 32 views
1

J'utilise ImageMagick pour réduire par programme la taille d'une image PNG en réduisant les couleurs de l'image. Je reçois les images-couleurs uniques et diviser par 2. Puis-je attribuer cette valeur à l'option -colors comme suit:La réduction des couleurs dans une image PNG augmente la taille du fichier

variable =-couleurs uniques/2

convertir image.png -Couleurs variables -depth 8

Je pensais que cela réduirait considérablement la taille de l'image mais augmenterait la taille des images sur le disque. Quelqu'un peut-il nous éclairer à ce sujet.

Merci.

EDIT: Il s'avère que le problème était dû au tramage. Le tramage aide vos images en couleurs réduites à ressembler davantage aux originaux mais ajoute à la taille de l'image. Pour supprimer le dithering dans ImageMagick, ajoutez + dither à votre commande. Exemple

convertir CandyBar.png + tramage de 300 -depth 8 smallerCandyBar.png

+0

Il serait utile si vous pouviez donner des liens vers deux exemples de fichiers png pour que nous puissions les examiner. Cela dit, ma première supposition serait que ce dernier fichier est généré sans aucune compression. N'oubliez pas que le format PNG prend en charge plusieurs niveaux de compression. –

+0

J'utilise la fonction identifier pour voir quelle compression est faite, les deux images utilisent la même compression (Zip). Les niveaux de compression sont un problème pour moi car même avec une qualité à 90 (la compression maximale pour les PNG d'ImagicMagick), cela crée un fichier beaucoup plus volumineux. Pour cette raison, je n'utilise pas l'option de qualité. – toc777

Répondre

3

Imagemagick utilise probablement un algorithme de tramage pour que l'image apparaisse comme si elle avait la quantité originale de couleurs. Cela augmente le "caractère aléatoire" des données d'image (les pixels individuels sont recolorés à certains endroits pour se fondre dans d'autres couleurs) et ces données d'image ne sont plus aussi bien empaquetées. Recherchez plus loin comment la commande convert effectue le tramage. Vous pouvez également voir cet effet en ajoutant une deuxième image en tant que couche dans Gimp/programme équivalent et la transparence d'accord.

+1

merde, merde, merde, merde, votre complètement à droite. Je n'avais aucune idée que le tramage ajoutait autant d'octets à une image; Tout s'explique maintenant. J'ai perdu tellement de temps à essayer de comprendre cela. Merci beaucoup. – toc777

0

La "nouvelle" compression de PNG n'est pas aussi bon que celui de l'original.

+1

Désolé mais je ne comprends pas entièrement. Comment un algorithme de compression d'image peut-il être si bon qu'il produit une image de plus petite taille même lorsque 70% des couleurs sont supprimées pour le compresseur ImagicMagick. – toc777

0

Vous devez utiliser pngquant pour cela.

Vous n'avez pas besoin de deviner le nombre de couleurs, il a --quality réglage actuel:

pngquant --verbose --quality=70 image.png 

ci-dessus choisira automatiquement le nombre de couleurs nécessaires pour correspondre à la qualité donnée à la même échelle que la qualité JPEG (100 = parfait, 70 = OK, 20 = affreux).

pngquant a un algorithme de quantification sensiblement meilleur, et meilleure est la quantification, le meilleur rapport qualité/taille de fichier.

Et pngquant ne tramage pas les zones qui semblent bonnes sans tramage, et cela évite d'ajouter du bruit inutile/aléatoire au fichier.