2010-03-23 6 views
7

Ich arbeite an einem Programm, das Vorschaubilder von JPEG-Bildern im laufenden Betrieb erstellt. Jetzt dachte ich: Da ein JPEG-Bild aus 8x8-Pixel-Blöcken (Wikipedia has a great explanation) erstellt wird, wäre es möglich, einen Teil der Decodierung zu überspringen?JPEG-Bild während der Dekodierung ändern

Nehmen wir an, meine Thumbnails sind mindestens 8 mal kleiner als das Originalbild. Wir könnten dann jeden 8 × 8 Block in der Eingabedatei auf 1 Pixel in der Decodierungsausgabe abbilden, indem wir nur den konstanten Term der diskreten Kosinustransformation einschließen. Die meisten Bilddaten können sofort verworfen werden und müssen nicht verarbeitet werden. Außerdem wird die Speicherbelegung um den Faktor 64 reduziert.

Ich möchte das nicht von Grund auf neu implementieren; das wird leicht eine Woche dauern. Gibt es irgendeinen Code, der das kann?

Wenn nicht, ist das, weil dieser Ansatz nicht lohnt, oder einfach weil niemand daran gedacht hat?

+0

'libjpeg' kann dies bereits, Sie können diese Funktion in ImageMagick verwenden, indem Sie die Bildgröße ** vor dem Laden einstellen. –

Antwort

4

Ich denke, dass djpeg's scale Feature so etwas tut.

Es kann einen 8x8 Block auf jede Größe zwischen 1 und 16 Pixel skalieren.

"Dies ist interessant, weil verschiedene räumliche Größe Ausgabe direkt von den JPEG (DCT) Daten ohne separate vollständige Decodierung und räumliche resample abgerufen werden kann."

+0

Genau das, was ich suchte, und es ist auch in einer angemessen lizenzierten Mainstream-Bibliothek. Vielen Dank! – Thomas

0

Das Projekt, an dem ich gerade arbeite, verwendet ImageGen, das alle Arten von Bildgrößenänderungen im laufenden Betrieb durchführt - dies kann sich auszahlen, wenn die Feature-Liste Ihren Vorstellungen entspricht. Ansonsten schätze ich, dass Sie eine verlustbehaftete Dateikomprimierung für Bilder implementieren möchten, die zuvor erfordert haben!

2

Nach this answer, EPEG von Enlightenment tat genau dies, indem Sie die DCT-Koeffizienten, um das Bild um einen Faktor von 8 zu verkleinern. Hier ist die current home of EPEG.

+1

Ich wünschte, ich könnte zwei Antworten akzeptieren, aber leider kann es nur einen geben. Trotzdem aufgewertet. – Thomas