0

J'essaye de réduire par programme (avec perte) la taille de fichier des fichiers PNG et GIF. Dans le cadre de cela, je dois réduire le nombre de couleurs dans les images. Je ne veux pas réduire toutes les images à une valeur de couleur unique, donc ce que je fais est; obtenir le nombre de couleurs uniques dans l'image, alors; diviser ce nombre par 2 pour réduire le nombre de couleurs de moitié.Besoin d'aide pour comprendre l'option ImageMagick/Graphicsmagick -colors

Le problème est que cela ne fonctionne pas. Utiliser ImageMagic est beaucoup trop lent et ne réduit pas la taille du fichier à moins que l'image ait moins de quelques centaines de couleurs uniques. L'utilisation de GraphicsMagick génère toujours une valeur de couleurs unique inférieure à 255, quel que soit le nombre de couleurs de l'image d'origine. Un autre problème avec GraphicsMagick est s'il y a des pixels transparents dans l'image, il remplace les couleurs perdues avec transparent.

Toute aide serait la bienvenue, Merci.

Répondre

0

premier problème, GraphicsMagick peut être compilé en utilisant 8 bits, 16 bits ou 32 bits niveaux quantiques. Ma version est compilée en 8 bits (la valeur par défaut), ce qui signifie que le nombre maximum de couleurs pouvant être assignées à une image est 256 couleurs uniques (3 * 3 * 2, 1 des bits bleus est enlevé car l'oeil humain peut ne le vois pas correctement). De toute évidence, GraphicsMagick peut gérer les images avec plus de couleurs que cela, mais en réduisant les couleurs, il peut seulement réduire à 256 couleurs ou moins. Les plus grands quantums de pixels font que GraphicsMagick fonctionne plus lentement et nécessite plus de mémoire. Par exemple, l'utilisation de quantums de pixels de seize bits fait que GraphicsMagick s'exécute de 15% à 50% plus lentement (et prend deux fois plus de mémoire) que lorsqu'il est construit pour prendre en charge des quantums de pixels de huit bits.

Deuxième problème; la gestion de la transparence dans les images PNG, j'utilisais une version antérieure de GraphicsMagick (1.1 je pense), de toute façon, quand j'ai mis à jour 1.3 ce problème n'est plus présent ce qui me dit que c'était un bug dans GraphicsMagick 1.1 qui a causé ça.

1

Réduire le nombre de couleurs est seulement utile si

  1. l'image peut alors utiliser une palette au lieu de stocker la couleur de chaque pixel
  2. la taille d'un indice de la palette est plus petite que la taille d'un couleur
  3. le format d'image prend en charge la taille de la palette

Je pense que vous ne pouvez obtenir 1 bits, 4 bits, 8 bits, donc 2 couleurs, 16 couleurs ou 256 couleurs dans les formats. Je pense que si vous demandez plus, vous obtenez juste tronqué à 256. Si vous demandez moins, il n'utilise tout simplement pas la palette entière.

Avez-vous envisagé de convertir en JPEG et de jouer avec le réglage de qualité? Vous vous retrouvez avec un contrôle plus fin du grain de perte-ness. L'inconvénient est que les images ne sont pas des photos, mais on dirait qu'elles ont beaucoup de couleurs, donc elles pourraient l'être.

Peut-être choisir 1, 4, 8 bits si elle est proche de ce que vous voulez et jpeg si elle a beaucoup de couleurs.

+0

Salut, merci pour votre réponse, C'est ce que je pensais mais ImageMagick vous permet de spécifier une valeur de couleurs illimitée pour une raison quelconque. J'ai besoin que les images restent dans le même format, JPEG aussi ferait perdre leur transparence aux images. Savez-vous quelque chose au sujet du problème de transparence de GM que j'ai? merci encore pour le temps. – toc777

+0

Est-ce seulement au format GIF?En GIF, il y a une entrée de palette qui est désignée comme la couleur transparente - peut-être que leur correspondance de couleur est accidentellement mappée des couleurs perdues. Cela peut arriver car il y a effectivement une couleur assignée à la couleur transparente (ce n'est pas une couleur avec 0 alpha). Cela ressemble un peu à un bug. Si vous utilisez Windows, essayez notre kit de développement d'images gratuit pour .NET http://atalasoft.com/photofree. –

+0

Non, cela se produit uniquement avec les fichiers PNG. J'utilise Linux et je ne peux pas utiliser .NET pour ce projet. Merci de votre aide. – toc777

1

Je pense que l'installation ImageMagick vous êtes peut-être après la quantification:

http://www.imagemagick.org/Usage/quantize/

+0

Merci pour cela mais j'ai déjà lu tous les documents disponibles. Mon principal problème est maintenant d'arrêter GraphicsMagick de remplacer les pixels opaques par des pixels transparents. Cela ne se produit pas avec ImageMagick, la seule façon de l'arrêter dans GraphicsMagick est de définir l'espace de couleurs sur transparent; le problème est que cela augmente la taille du fichier. – toc777

+0

Est-ce que l'aplatissement de l'image pour supprimer la transparence après l'opération permet de résoudre ce problème? – Orbling

+0

Désolé Orbling, je ne comprends pas. Je veux préserver la transparence de l'image. – toc777

Questions connexes