Frage

Wie der Titel sagt, versuche ich, benutzerdefinierte Quantisierungstabellen zu verwenden, um ein Bild im JPEG-Format zu komprimieren.Mein Problem ist, dass die resultierende Datei nicht geöffnet werden kann, und der Fehler ist:

generasacodicetagpre.

So sieht mein Code aus wie:

generasacodicetagpre.

Meine Vermutung ist, dass es etwas mit den Metadaten zu tun hat, aber ich hatte kein Glück, eine Lösung zu finden.

danke, R.

update: Mit einem Hex-Viewer habe ich festgestellt, dass die Quantisierungstabelle (DQT - 0xff, 0xdb-Abschnitt) nicht in die Ausgabedatei geschrieben wird.Ich gehe davon aus, dass ich es zwingen muss, irgendwie geschrieben zu werden.

Update 2: Also, nachdem ich die Ausführung tatsächlich debugging, ist, dass, wenn die Tabellen in der Parameterobjekt eingestellt sind, dann nicht für weder die Quantisierung nicht die Huffman-Tabellen generiert.Wenn die Metadaten fehlt, werden die Tabellen nicht in der Datei geschrieben.Die Sache ist, dass ich keine Möglichkeit, den Inhalt der Metadaten anzupassen.

War es hilfreich?

Lösung

Sehr interessante Frage, und leider nicht trivial ... hier ist das, was ich gefunden habe:

Zunächst einmal, mit dem generationspflichtigen, der generakodicetagcode wird nicht. Von der Javadoc :

legt die Quantisierungs- und Huffman-Tabellen an, um beim Codieren von abgekürzten Bächen zu verwenden.

und weiter von JPEG-Metadatenformat-Spezifikation und Nutzungsnotizen :

Diese Reihenfolge implementiert die Entwurfsabgabe, dass Tabellen nur als Mittel zur Angabe von Tabellen einbezogen werden sollten, wenn keine andere Quelle vorhanden ist, und dies kann nur beim Schreiben in einen abgekürzten Stream ohne Tabellen mit bekannten Nicht-Standard-Tischen für Kompression.

i.e. Die Paramoption kann nur nur für das Schreiben von "abgekürzten Streams" (Zoll JPEGs ohne Tabellen verwendet werden, vorausgesetzt, die Tabellen werden beim Zurückstellen bereitgestellt). Schlussfolgerung: Der einzige Weg, auf den wir angeben können, dass Tische angeben können, die mit dem JPEG codiert werden sollen, besteht darin, ihn in den Metadaten zu übergeben.

Aus dem gleichen Dokument, das oben erwähnt ist, werden die Tabellen in den Metadaten ignoriert und ersetzt, es sei denn, der Kompressionsmodus ist generellacticetagcode, so dass wir das angeben müssen.

siehe das Image Metadata DTD zur Dokumentation zur Metadatenstruktur. Die wichtigen Teile sind die generationspflichten Teilecode- und Griceticetagcode-Knoten mit Unterknoten, und ihr "Benutzerobjekt" (nicht mit normalem Dom "UserData"). Wir müssen diese Knoten aktualisieren, mit den neuen Tabellen, die wir verwenden möchten.

Hier ist der Code, mit dem ich gekommen bin:

generasacodicetagpre.

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