Frage

Frage:

  • ein Bild im PNG-Format gegeben, was ist der einfachste Weg, um programmatisch die Anzahl der Farben verwendet zu erhalten im Bild?

Einschränkungen:

  • Die Lösung wird in ein Shell-Skript werden integreted unter Linux läuft, so dass jede Lösung, die in einer solchen Umgebung passt tun wird.
  • Bitte beachten Sie, dass die „Farbkapazität der Bilddatei“ entspricht nicht unbedingt auf „Farben verwendet“. Beispiel: In einer Bilddatei mit einer theoretischen Farbkapazität von 256 Farben sagt nur 7 Farben in der Praxis sein könnten. Ich mag die Anzahl der Farben erhalten, tatsächlich verwendet .
War es hilfreich?

Lösung

Warum Ihr eigenes Programm schreiben?

Wenn Sie tun dies mit einem Shell-Skript, können Sie die netpbm Dienstprogramme verwenden:

count = `pngtoppm png_file | ppmhist -noheader | wc -l`

Andere Tipps

Die Image.getcolors Methode in Python Imaging Library scheint genau das zu tun, was Sie wollen.

Spaß. Es scheint keine garantierte Methode, dies zu tun zu sein; im schlimmsten Fall müssen Sie das Bild scannen und jedes Pixel, im bestmöglichen Fall interpretieren die PNG wird eine Palette verwenden und man kann nur dort überprüfen.

Auch in der Palette Fall, obwohl, ich ist nicht garantiert, dass jeder Eintrag verwendet wird -. So dass Sie (bestenfalls) immer eine obere Grenze

http://www.libpng.org/pub /png/spec/1.1/PNG-Contents.html

.. und die Chunk-Infos hier:

http://www.libpng.org/pub /png/spec/1.1/PNG-Chunks.html

Alnitak Lösung ist schön :) Ich sollte wirklich erhalten netpbm kennen und ImageMagick usw. besser etwas Zeit.

Just FYI, als eine einfache und sehr allgemeine Lösung: Schleife durch jedes Pixel in dem Bild, Erhalten der R-, G-, B-Farbwert als eine einzelne ganze Zahl ist. Geben Sie für diese ganze Zahl in einer Liste. Wenn es nicht vorhanden ist, fügen Sie es. Wenn alle Pixel abgeschlossen, die Anzahl der Farben in der Liste drucken.

Wenn Sie Vorkommen zählen möchten, verwenden Sie einen hashmap / Wörterbuch anstelle einer einfachen Liste der Schlüssel des Wert erhöhen (ein Zähler), wenn bereits im Wörterbuch gefunden. Wenn nicht gefunden, fügen Sie es mit einem Startzählerwert von 1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top