imagemagick konvertieren Sie png 16-bit-raw
Ich versuche, zu konvertieren, ein 16-bit-Graustufen-PNG in einer raw-Datei. Die Bildgröße ist 640*480.
Zuerst identifizieren:
$ identify image.png
image.png PNG 640x480 640x480+0+0 16-bit PseudoClass 65536c 299KB 0.000u 0:00.000
Erwarte ich, dass die Ergebnis-Datei 640*480*2 bytes in der Größe.
Versuch 1:
$ convert image.png -depth 16 image.raw
Ergibt dies eine Dateigröße von 330805 bytes. Seine ersten 16 bytes, die wie folgt Aussehen:
0x00000000: 89504E47 0D0A1A0A 0000000D 49484452 .PNG........IHDR
Versuch 2:
$ convert image.png -depth 16 image.rgb
Ergibt dies eine Dateigröße von 1843200 Byte, das ist 640*480*2*3.
Ich bin mit imagemagick-version 6.7.7-10 auf Ubuntu 14.04.
Irgendwelche Ideen?
- Also, was ist falsch mit der zweiten option, das sieht korrekt zu mir.
- Ich will ein single-channel, 16-bit. Der zweite Versuch, Ausgänge 3 Kanäle (RGB) 16 bit.
- Bitte geben Sie uns ein Beispiel Bild, damit es einfacher ist, sich zu reproduzieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aktualisierte Antwort
Fiel es mir da antwortet, dass es eine einfachere Methode das zu tun, was Sie wollen, der Vorteil von ImageMagick ist wenig benutzt
stream
tool zum streamen von raw-Pixeldaten um.In der Tat können Sie diesen Befehl verwenden
dem Lesen wird der Rote Kanal (
-map r
), die die gleiche wie die Grün-und Blau-Kanäle, wenn Ihr Bild Graustufen, und schreiben Sie es als vorzeichenlose 16-bit-shorts (-storage-type short
), um die Ausgabe-Dateiimage.raw
.Dies ist sauberer als meine ursprüngliche Antwort - aber geben sollte identische Ergebnisse.
Ursprüngliche Antwort
Wenn Sie schreiben, ein RGB-raw-Datei, erhalten Sie 3 Kanäle R, G und B. schreiben Sie ein PGM (Portable Greymap) so...
PGM-format ist ausführlich hier, aber es genügt zu sagen, dass es header mit einem
P
gefolgt von einer Ziffer beschreiben die tatsächlichen Subtyp, dann eine Breite und Höhe und dann eineMAX VALUE
beschreibt, dass die Auswahl der pixel-Intensitäten. In Ihrem Fall, dieMAX VALUE
ist 65535 eher als 255, da Ihre Daten sind 16-bit.Können Sie die Streifen der header wie dieser:
Wenn Sie konvertieren viele Dateien in verschiedenen Größen und mögen die hard-codiert
614400
, und sind mitbash
erhalten Sie ImageMagick zu sagen, die Größe (Höhe * Breite * 2 Byte/pixel) und verwenden, wie diese:gray
könnte Sie das gewünschte format:Dieser Befehl speichert jedes pixel in 2 Byte und sonst nichts in der Datei.
Hier biete ich eine minimale synthetische Beispiel: https://superuser.com/questions/294270/how-to-view-raw-binary-data-as-an-image-with-given-width-and-height/978432#978432
.raw
ist nicht wirklich ein "pixel-only" - format: es enthält einige Metadaten: https://en.wikipedia.org/wiki/Raw_image_format#File_contents