Ich versuche einen JPEG / JFIF-Encoder und -Decoder von Grund auf mit C zu schreiben. Ich habe versucht, eine JPEG-Beispieldatei zu schreiben, aber es scheint, dass ich sie nicht mit MS Paint, Firefox, öffnen kann. Aber ich kann es mit JPEGsnoop dekodieren ( Ссылка ) und Ссылка . Ich denke, die JPEG-Beispieldatei entspricht dem JPEG / JFIF-Standard, ich weiß nicht, warum Anwendungen wie MS Paint und Firefox es nicht öffnen können.
So sieht das Beispiel-JPEG aus:
%Vor%Die Beispiel-JPEG-Datei enthält drei Komponenten Y Cb Cr. Kein Subsampling für die CbCr-Komponente. Die zwei Quantisierungstabellen sind alle mit Einsen gefüllt. Die vier Huffman-Tabellen im DHT-Segment sind alle identisch, es sieht so aus
%Vor%Das bedeutet, dass alle Codes 8 Bits sind, also komprimiert die Huffman-Codierung die Daten nicht wirklich.
Die Huffman-kodierten Daten sehen so aus:
%Vor%Kann mir jemand sagen, was mit dieser JPEG-Beispieldatei nicht stimmt? Vielen Dank.
Hier ist ein Link zur JPEG-Beispieldatei (ha.jpg) Ссылка
Ich hatte vor Jahren ein ähnliches Problem mit etwas PNG-Code (obwohl ich es nicht von Grund auf neu geschrieben habe). Es stellte sich heraus, dass mein Code mehr Standards erfüllte als die Bibliotheken von Windows, einigen Browsern usw. Sie waren in typischen Fällen gut, erstickten jedoch an ungewöhnlichen und erfundenen Bildern, selbst wenn sie vollständig dem Standard entsprachen. Eine übliche Möglichkeit, sie auszulösen, bestand darin, eine ungerade Pixelbreite für das Bild zu verwenden. Fast die Hälfte meiner Testsuite war mit Windows nicht sichtbar. (Dies war viele Versionen vor, wie Windows 95. Die Windows-Codecs wurden erheblich verbessert.)
Am Ende habe ich die Open-Source-PNG-Bibliothek erstellt und sie als Referenzimplementierung verwendet. Solange die Bilder, die mein Code erzeugte, von der Referenzimplementierung geparst werden konnten und umgekehrt, nannte ich das gut. Ich überprüft auch, dass mein Code jedes Bild anzeigen könnte, das Windows anzeigen könnte. Jedes Mal, wenn ich einen Fehler gefunden habe, habe ich das Bild zu meiner Testsuite hinzugefügt, bevor ich es behoben habe. Das war gut genug für mein Projekt.
Sie könnten dasselbe tun. Ich glaube, es gibt eine Open-Source-JPEG-Bibliothek, die häufig als Referenzimplementierung verwendet wird.
Wenn Sie wirklich herausfinden wollen, warum Firefox (oder was auch immer) Ihr Bild nicht öffnen kann, könnten Sie versuchen, mit einem Bild zu beginnen, das in Firefox geöffnet wird. Erhöhen Sie inkrementell kleine Änderungen (z. B. mit einem Hex-Editor), um es dem fehlerhaften Bild ähnlicher zu machen. Dadurch können Sie eingrenzen, welcher Aspekt Ihres Bilds die Anwendung auslöst. Zugegebenermaßen sind einige dieser Schritte möglicherweise schwer zu versuchen.
Firefox (und viele andere Apps AFAIK) basiert auf der Open-Source-JPEG-Bibliothek der Independent JPEG-Gruppe .
Sie können die Quelle dafür herunterladen und dann genau sehen, warum und wann Ihre Datei nicht gefällt.
Das würde dir auch ersparen, das Rad neu zu erfinden: -)
Ich denke, Ihre Datei ist sehr unkonventionell codiert. Ich würde vorschlagen, dass Sie eine Referenzdatei finden und versuchen, diese Struktur nachzuahmen. Außerdem würde ich die Beispieltabellen aus dem Standard verwenden. Ihre Huffman-Daten sind voll von Nullen, die jeden DC-Wert auf Null setzen, gefolgt von und End-of-Block.
Wenn Sie in jpegsnoop suchen, ist Ihr Bild in zwei Farben, aber es sollte homogen sein. Ich schätze, Sie haben nicht genug Daten, um das Bild mit der von Ihnen angegebenen Auflösung zu codieren. Ich glaube, viele Decoder würden davon ausgehen, dass dies bedeutet, dass Ihre Datei beschädigt ist.
Tags und Links c image compression jpeg