Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Alle Bilder eines jpeg? (https://www.delphipraxis.net/147349-alle-bilder-eines-jpeg.html)

Mattze 6. Feb 2010 09:35


Alle Bilder eines jpeg?
 
Hallo,

wie ich in einigen "Reparaturtool" für jpg-Bilder gesehen habe, gibt es in einer jpg-Datei das Bild mehrfach, in verschiedenen Auflösungen.
Wie kann man denn nun die einzelnen Bilder extrahieren?

(Diese Tools bieten - zeigen - alle Bilder an und man kann auswählen, welches am wenigsten kaputt ist und das dann rausziehen. Bei mir war es oft so, dass das richtige, große kaputt war, während die kleineren - als Thumbnails? - noch vollständig waren.)

Hat jemand eine Idee?

Gruß
Matthias

Codewalker 6. Feb 2010 10:12

Re: Alle Bilder eines jpeg?
 
Ich glaube in den EXIF-Infos zu JPEGS gibt es Möglichkeiten Thumbnails zu speichern. Ich habe damals eine Unit names dEXIF benutzt, aber auch hier im Forum wirst du einige Threads dazu finden.

himitsu 6. Feb 2010 10:41

Re: Alle Bilder eines jpeg?
 
Es hängt auch vom Format ab.

da gibt es welche, die z.B. am Anfang der Datei nur grobe/unscharfe Bilddaten haben und dann nach und nach die Deteils nachladen.

Aber dort ist es so, wenn der Dateianfang futsch ist, dann ist es der Rest auch, da alles voneinander abhängt.

Codewalker 6. Feb 2010 10:52

Re: Alle Bilder eines jpeg?
 
Ich hab mal in meinem Archiv gekramt. Ich habe damals folgende Units benutzt (die ich leider nicht mehr finde)
Delphi-Quellcode:
 jpegtool, dEXIF, dIPTC
Dazu hab ich mir folgende Prozedur geschrieben, die andere Prozeduren aus diesen Units aufruft:
Delphi-Quellcode:
function GetAspectedJpegThumb(FileName: String; ThumbWidth, ThumbHeight: Integer; Size: TPoint; FillColor: TColor = clWhite): TPicture;
Var
 Bmp: TBitmap;
 Pic: TPicture;
 Offset: Integer;
begin
 Bmp:=TBitmap.Create;
 Pic:=TPicture.Create;

 Bmp.Width:=ThumbWidth;
 Bmp.Height:=ThumbHeight;
 Bmp.PixelFormat:=pf32bit;

 { Auch wenn kein Thumbnail vorhanden ist muss ein Bild ausgegeben werden }
 Bmp.Canvas.Brush.Color:=FillColor;
 Bmp.Canvas.FillRect(Rect(0,0,Bmp.Width,Bmp.Height));
 Pic.Assign(Bmp);

 If HasJpegThumb(FileName) = False then raise EInvalidGraphic.Create('No Thumbnail found!');

 ExtractJpegThumb(FileName,Pic);
 Offset:=Round((Bmp.Height-MulDiv(Bmp.Width,Size.Y,Size.X)) / 2);
 Bmp.Canvas.StretchDraw(Rect(0,Offset,Bmp.Width,Bmp.Height-Offset),Pic.Bitmap);
 Pic.Assign(Bmp);
 Result:=Pic;
end;
Damit hab ich einen Thumbnail bekommen, den meine DigiCam (Canon Powershot A75) in das JPEG in den EXIF-Bereich automatisch reingepackt hat

Mattze 6. Feb 2010 13:35

Re: Alle Bilder eines jpeg?
 
Hallo,

vielen Dank für den Codeschnipsel.
Alles zu den Thumbs, was da drin steht, scheint aus der dExif zu stammen und die habe ich, zum Glück. Zurzeit scheint die ja nicht mehr zu kriegen zu sein.

Gruß
Matthias

Matze 6. Feb 2010 13:41

Re: Alle Bilder eines jpeg?
 
Falls sowas tatsächlich mal auftreten sollte, lohnt es sich, einen Blick in die Google CodeSearch zu werfen. Da findet man manchmal auch ältere, kostenlose Units, die es in neueren Versionen nicht mehr kostenlos gibt.
Natürlich ist nicht sichergestellt, dass man die aktuelle Version bekommt.
Aber das nur als allgemeiner Tipp.

Edit: Hm, da findet man auch mehr als einem lieb ist. Bsp. sämtliche Units, die Luckie hostet.
Da wird also automatisiert auf Webseiten und sogar in Archiven (Zip, ...) gesucht. Verrückt. Aber das schweift vom Thema ab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz