La réduction de la taille d'un fichier de très grandes images, sans changer les dimensions de l'image
Envisager une application de manipulation de téléchargement de potentiellement très gros fichiers PNG.
Tous les fichiers téléchargés doivent être stockées sur le disque pour une récupération ultérieure. Cependant, les fichiers PNG peuvent être jusqu'à 30 MO en taille, mais le disque de stockage limitations donne un maximum par taille de fichier de 1 MO.
Le problème est de prendre une entrée PNG de taille de fichier allant jusqu'à 30 MO et produire une sortie PNG de taille de fichier inférieure à 1 MO.
Cette opération sera évidemment avec perte et réduction de la qualité de l'image, les couleurs, etc n'est pas un problème. Cependant, une chose qui ne doit pas être changé, c'est la dimension à l'image. Par conséquent, un fichier d'entrée de dimension 800 x 600 doit produire un fichier de sortie de dimension 800 x 600.
Les conditions ci-dessus décrites ci-dessus sont strictes et ne peuvent pas être modifiés.
en Utilisant ImageMagick (ou un autre outil open source) comment feriez-vous pour réduire la taille du fichier d'entrée, le format PNG-des fichiers de taille ~30 MO pour un maximum de 1 MO par fichier, sans changer les dimensions de l'image?
Vous devez vous connecter pour publier un commentaire.
PNG n'est pas figé format de l'image, de sorte que vous aurait probablement besoin de convertir l'image dans un autre format-- probablement JPEG. JPEG a un settable de la "qualité" facteur-- vous pouvez simplement réduire le facteur de qualité jusqu'à ce que vous avez une image qui est assez petit. Tout cela peut être fait sans changer la résolution de l'image.
Évidemment, en fonction de l'image, la perte de qualité visuelle peut être considérable. JPEG fait de mieux pour la "vraie vie" des images, tels que des images à partir de caméras. Il ne fait pas aussi bien pour les logos, captures d'écran, ou d'autres images avec "sharp" transitions de la lumière à l'obscurité. (PNG, de l'autre côté, à l'opposé du comportement, il serait préférable pour les logos, etc.)
Cependant, à 800x600, il sera probablement très facile d'obtenir un JPEG, sous de 1 MO. (Je serais très surpris de voir un fichier de 30 mo à ceux de petite dimensions.) En fait, même non compressé, l'image ne serait autour de 1.4 MO:
Par conséquent, vous n'avez besoin que de 1,4:1 taux de compression pour obtenir l'image en bas à 1MO. Selon le type d'image, la compression PNG peut très bien fournir ce niveau de compression. Si non, JPEG presque certainement pourrait-- la compression JPEG des ratios de l'ordre de 10:1 ne sont pas rares. Encore une fois, la qualité /taille de la sortie dépendra du type de l'image.
Enfin, alors que je n'ai pas utilisé ImageMagick dans peu de temps, je suis presque certain qu'il ya des options pour re-compresser une image à l'aide d'un facteur de qualité. Lire les docs, et de commencer à expérimenter!
EDIT: Regarde comme il se doit, en effet, être assez facile avec ImageMagick. À partir de la docs:
Juste continuer à jouer avec la valeur de la qualité jusqu'à ce que vous obtenez un résultat approprié.
Votre exemple est problématique, car un 30MB image à une résolution de 800x600 est de stocker des 500 bits par pixel. Clairement sauvagement irréaliste. Merci de nous donner des nombres réels.
Pendant ce temps, le "bon marché et gai" approche, je voudrais essayer serait comme suit: l'échelle de l'image par un facteur de 6, puis à l'échelle vers le haut par un facteur de 6, puis exécutez à travers PNG compression. Si vous avez de la chance, vous pourrez réduire la taille de l'image par un facteur de 36. Si vous obtenez malchanceux de l'épargne sera plus comme 6.
Si ce n'est pas suffisant, vous pouvez jeter un
ppmquant
dans le milieu (sur la petite image) afin de réduire le nombre de couleurs. (Les exemples sont netpbm/pbmplus, que j'ai toujours trouvé plus facile à comprendre que ImageMagick.)De savoir si une telle solution est raisonnable, nous devons connaître le nombre réel de votre problème.
Aussi, si vous êtes vraiment à jeter l'information de façon permanente, vous êtes presque certainement mieux à l'aide de la compression JPEG, qui est conçu pour perdre des informations raisonnablement gracieusement. Est-il une raison JPEG n'est pas approprié pour votre application?
Depuis la taille d'un fichier image est directement liée à la taille de l'image et le nombre de couleurs, vous semblez avoir un seul choix: réduire le nombre de couleurs.
Et ~30 MO vers le bas à 1 mo est un très grande réduction.
Il serait difficile d'atteindre ce ratio avec une conversion monochrome.
Ça dépend beaucoup de ce que vous voulez à la fin, j'ai souvent envie de réduire le nombre de couleurs, tandis que la conservation de la taille. Dans de nombreux de nombreux cas, la réduction de couleurs n'a pas d'importance. Voici un exemple de la réduction de la couleurs à 254.
pngquant --quality=0-80 in.png
risque de donner un fichier de plus petite taille.Vous pouvez essayer le
pngquant
utilitaire. Il est très simple à installer et à utiliser. Et il peut compresser vos PNGs beaucoup sans perte de qualité visible.Une fois que vous installer à essayer quelque chose comme cela:
Pour mon image de démo (généré par imagemagick) la première commande réduit 350KB à 110KB, et le second, le réduit à 65KB.
Je sais que vous voulez conserver la taille des pixels, mais vous pouvez réduire la taille de pixel et de régler le DPI stockées avec l'image de sorte que la taille de l'écran est-elle préservée? Cela dépend de ce client, vous serez à l'aide de la visualisation des images, mais la plupart doivent observer. Si vous utilisez les images sur le web, alors vous pouvez simplement définir la taille de pixel de l'
<img>
tag.Cela dépend de la catégorie de l'image, est-il une durée de vie réelle de l'image ou de l'image de synthèse,
pour la vie réelle des images png fera très peu, il pourrait même ne pas compresser à tous, utilisez jpg pour les images, l'image a un nombre limité de couleurs différentes (il peut en avoir un en 24 bits à l'image de la profondeur, mais le nombre d'images uniques sera faible), le format png permet de compresser tout à fait bien.
png est essentiellement une mise en œuvre de zip pour les images, donc si beaucoup de pixels sont les mêmes, vous pouvez avoir une bonne compression, si vous avez besoin d'une compression sans perte ne fais pas de redimensionnement.
utilisation
optipng
il réduire la taille sans perte dehttp://optipng.sourceforge.net/
Si vous souhaitez modifier la taille de l'image dans ubuntu, vous pouvez essayer de "gimp".
J'ai essayé quelques images des applications de retouche dans ubuntu et cela semblait être le meilleur d'entre eux.
COMMENT L'INSTALLER?
-Ouvrir un terminal
-tapez: sudo apt-get install gimp-plugin-registry
-donner le mot de passe admin. vous avez besoin de la connexion à internet pour cela.
-Une fois installé, ouvrez l'image avec GIMP éditeur d'image. Puis goto: Fichier > Exporter en tant que > Cliquez sur le bouton 'Exporter'
-Vous aurez une petite fenêtre, où la case à cocher "Afficher l'aperçu dans la fenêtre d'image". Une fois que vous cochez cette option, vous obtiendrez de voir la taille du fichier ainsi que le niveau de Qualité.
-Ajuster le niveau de qualité pour augmenter/diminuer la taille du fichier.
-Une fois que le réglage est fait, cliquez sur "Exporter", enfin le bouton pour enregistrer le fichier.
gimp
utilise les mêmes bibliothèques pour queImageMagick
Essayer ImageOptim https://imageoptim.com/mac il est gratuit et open source
Clic droit sur l'image. Sélectionnez ouvrir avec paint. Cliquez sur redimensionner. Cliquez sur le pixel et le changement de l'horizontale à 250 ou 200.
C'est la seule chose. C'est le moyen le plus rapide pour ceux qui sont à l'aide de Windows XP ou Windows 7.