Sie fragen im Wesentlichen, ob der Dekodierungsprozess für ein JPEG-Bild umgekehrt werden kann. Dies ist eine ganz andere Absicht als bei einem herkömmlichen JPEG-Encoder, und mir ist keine Software bekannt, die dies ermöglicht. Mathematisch ist dies möglich *, solange für das Bild nach der Kodierung keine Transformation oder andere Modifikation angewendet wurde, aber programmatisch, wie schwierig könnte es sein?
Das erste Problem ist der Farbraum - JPEG verwendet unterabgetastete Farben (die Farbe wird über eine Gruppe von Pixeln abgetastet) yCbCr, während eine Bitmap RGB ist. Unvermeidliche Verluste beim Umwandeln zwischen diesen Farbräumen (und auch bei jeder Gammaeinstellung) führen zu Rauschen. Das zweite zu lösende Problem besteht darin, dass JPEG die Bilddaten als Makroblöcke (Teilbilder mit N × N Größe) aufzeichnet, die aus dem Ausgabebild des Decoders abgeleitet werden müssen. Eine ausführlichere Erläuterung des JPEG-Formats und des Kodierungsprozesses finden Sie hier http://www.guillermito2.net/stegano/jsteg/
'dekodieren' eines JPEGs:
Um eine Annäherung an die ursprünglichen JPEG-Daten zu erstellen, müssen wir die Unterabtastung, Größe und Ausrichtung von Makroblöcken und DCT-Koeffizienten (Discrete Cosine Transform) ermitteln, die zu ihrer Kodierung verwendet wurden. Der Rest ist identisch mit einem normalen JPEG-Kodierungsprozess. Eine naive Implementierung, die mir in den Sinn kommt, ist "fundiertes Raten und Prüfen": Nehmen Sie an, dass einige gängige JPEG-Implementierungen zum Erstellen des Bildes verwendet wurden, und versuchen Sie, sie anzuwenden, bis eine gefunden wird, die "JPEG-ähnliche" Ergebnisse der DCT (normalerweise Nullen) aufweist hohe Frequenzen).
Danach die Koeffizienten auf minimalen Fehler im Vergleich zum Original (dh Bitmap des komprimierten Bildes) abstimmen. Dieser Prozess führt immer noch zu einem Kompromiss zwischen Fehler und Dateigröße, sollte jedoch aus praktischen Gründen nahe genug sein.
Quelle : Bisherige Überprüfung der DNx- und ProRes-Videocodecs, bei denen für jeden einzelnen Frame eine JPEG-artige Codierung angewendet wird (Software, die decodierte Frames umkehrt, wäre ein sehr interessantes und möglicherweise nützliches Nebenprojekt gewesen).
* Es gibt eine Reihe von Eingabedaten, die beim Durchlaufen des Original-JPEG-Decoders zu einer identischen Ausgabe führen. Es ist jedoch äußerst unwahrscheinlich, dass eine Rekonstruktion eine byteweise Kopie (Ignorieren von Metadaten) der Originaldatei ist, da während der Decodierung Informationen verloren gingen verarbeiten.