2009-08-25 14 views
4

Ich schreibe eine Miniaturansicht in C++.Wie lese ich Miniaturbilder aus JPEG-Bildern?

Ich verwende zuerst EXIF-Informationen, um die Miniaturansicht eines Bildes wiederherzustellen, aber die Miniaturansicht im EXIF ​​ist schlecht, mit schwarzen Bändern. Also möchte ich das eingebettete Thumbnail des JPEGs bekommen, wie kann ich das machen?

Eine andere Frage: ist die eingebettete Miniatur von jpeg gleich EXIF ​​thumbnail?

+0

Sie machen nicht viel Sinn. Das einzige Thumbnail in einer JFIF-Datei ist das EXIF-Thumbnail. JFIF ermöglicht nur das Speichern eines einzelnen Bildes in einer Datei und das Miniaturbild ist im EXIF-Header "versteckt". Was meinst du mit "eingebetteten" Thumbnails? Wie unten erwähnt, können Sie eine schnelle Miniaturansicht aus den DC-Werten jeder MCU erstellen, die 1/64 der Größe des Originalbilds beträgt. Nicht sicher, was du mit "korruptem" Thumbnail-Bild meinst. Bei einigen Kameras werden schwarze Balken hinzugefügt, da das Bild nicht das gleiche Seitenverhältnis wie das Standard-Thumbnai-Bild 160x120 aufweist. – BitBank

+0

vielen Dank BitBank! Ich sehe, zuerst war ich verwirrt über die schwarzen Balken, weißt du, wie man die schwarzen Balken entfernt? – user25749

+1

Die schwarzen Balken sind Teil des Bildes. Um sie zu entfernen, müssen Sie das Bild basierend auf der ursprünglichen Bildgröße beschneiden. z.B. Wenn das Originalbild 1600x1200 ist, werden keine schwarzen Balken angezeigt, da das Miniaturbild 160x120 das gleiche Verhältnis hat. Wenn das Bild 3888x2592 ist, ist das Thumbnail 160x106. – BitBank

Antwort

0

Der schnellste und empfohlene Weg sind Bibliotheken.

Zum Beispiel kann www.exiv2.org Ihnen die Bibliothek für die eingebettete Thumbnail- und EXIF-Extraktion bereitstellen. Es gibt viele Alternativen, aber ich denke, das ist eine gute Lösung.

6

Wenn das EXIF-Thumbnail schlecht ist, können Sie Ihre eigenen aus dem JPEG selbst erzeugen, ohne das JPEG vollständig dekodieren zu müssen.

Suchen Sie nach dem Quellcode für EPEG. Es ist Teil des Aufklärungsprojekts auf SourceForge und war vor einem Jahr Teil des alten EFL. Sie können es immer noch aus alten SVN-Commits oder aus einem Quell-Tarball, der herumschweben könnte, ausgraben.

Grundsätzlich, was EPEG tut, sammelt es die DCT-Koeffizienten aus dem Bild und führt eine Neuskalierung an ihnen durch. Der DCT-Koeffizient wird normalerweise als Basiskoeffizient für einen 8 × 8 Pixelblock verwendet. Sie können es als eins Pixel behandeln. Als Ergebnis haben Sie ein (rechenfreies) Thumbnail, das genau 1/8 der Größe des Originalbildes entspricht. Skalieren Sie es wie bei allen Bilddaten auf die gewünschten Abmessungen.

+0

Vielen Dank, Gibt es EPEG Windows-Lib? Wie kann ich es unter Windows kompilieren? – user25749

+0

Es wurde für das Aufklärungsprojekt geschrieben, daher ist der Quellcode ursprünglich sehr * nix-zentrisch, aber er wurde immer noch in einem sehr OS-agnostischen Stil geschrieben.Es sollte gut unter Windows kompilieren, direkt aus dem SVN-Checkout. Es gibt keine vorkompilierte Windows-Bibliothek meines Wissens. Ich glaube, dass es für Windows bereits Makefiles gibt. – greyfade

+0

Es gibt einen Link zu einigen Schnappschüssen in den Kommentaren in meiner Antwort: http://StackOverflow.com/Questions/1316170/having-an-image-file-buffer-in-memory-what-is-the-fastest- way-to-create-its-thum – greyfade

-2

www.exiv2.org in meinen Augen ist eine schlechte Lösung. Es gibt einfach zu viele Deps zu anderen Projekten. Expat und zlib zum Beispiel. Wenn Sie eine leichtgewichtige Lösung entwickeln möchten, die Sie selbst unterstützen können, würde ich Ihnen empfehlen, Ihren eigenen EXIF-Decoder zu schreiben.

+1

libexif http://libexif.sourceforge.net/ ist eine sehr anständige Lösung. – koan

2

In den meisten Fällen, in denen Leute über JPEG-Dateien mit Thumbnails sprechen, meinen sie, dass die Datei JPEG-EXIF ist und die EXIF-Daten ein Thumbnail-Bild enthalten.

Es ist jedoch wahr, dass JFIF 1.02 eine Miniaturansicht unterstützt. Das Thumbnail kann im JFIF APP0-Marker oder einem offiziellen JFXX APP0-Erweiterungsmarker gespeichert werden. Das Thumbnail kann unkomprimiert RGB, JPEG oder palettiert sein. Details siehe http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format#JFIF_segment_format.

Verwandte Themen