![]() |
JPG Resize bei großen Dateien
Hallo Zusammen,
Ich habe eine kleine Routine zum Verkleinern von JPG-Bildern. Bei vielen Bildern funktioniert es auch wunderbar, bei einigen nicht. Was die Bilder gemeinsam haben, bei denen es nicht funktioniert, ist, dass sie sehr groß sind (> 2 MB). Hier mal der Code:
Delphi-Quellcode:
Probiere ich diesen Code, stürzt es bei StrechDraw ab. Gibt es eine Möglichkeit, dies zu verbessern?
procedure prcResizeJPG(sPath: String; iWidth: Integer; iHeight: Integer);
var imgBMP: TBitmap; imgJPG: TJpegImage; begin imgJPG := TJpegImage.Create; try imgJPG.LoadFromFile(sPath); imgBMP := TBitmap.Create; try imgBMP.Width := iWidth; imgBMP.Height:= iHeight; imgBMP.Canvas.StretchDraw(imgBMP.Canvas.Cliprect, imgJPG); Self.Canvas.Draw(100, 10, imgBMP); imgJPG.Assign(imgBMP); imgJPG.SaveToFile(sPath); finally imgBMP.free; end; finally imgJPG.free; end; end; |
AW: JPG Resize bei großen Dateien
Zitat:
Delphi-Quellcode:
Mavarik
imgJPG.Assign(imgBMP);
imgJPG.Compress; // <-- fehlt das nicht? imgJPG.SaveToFile(sPath); |
AW: JPG Resize bei großen Dateien
also hier mit Delphi 3 funktioniert der o.g. Code.
Code:
jetzt wo Du's sagst ... vermiß ich das auch ....
imgJPG.Compress; // <-- fehlt das nicht?
funzt aber bei mir trotzdem ohne. wobei ich mich irgendwie erinnere, daß da noch weitere Einstellungen zu fehlen: Irgendwie, welcher Sampling modus Progress;, Qualität: Quality:= 90;, etc. keine Ahnung, vielleicht haben die ja was (d3->x4) bei Embargochaero "verbessert" , was Borland damals nicht konnte :D lad mal ein Bild rauf, was nicht funktioniert. Hab das hier sogar mit nem 5,88 MB 10 MPx Bild gemacht. Und sogar mit ungeraden Abmessungen PcrResize(Edit1.text,300,161); das funktioniert. hier mal ein nicht-privates: 3 MB Bild 3648 x 2736 Pixel (9.98 MPixels) (4:3) -http://abload.de/img/claudia_giorgetti_1mwaav.jpg Kleiner: 201 x 201 Pixel (1.00) ![]() |
AW: JPG Resize bei großen Dateien
Hallo,
Das compress fehlt in der Tat. Aber wie gesagt, es stürzt beim StrechDraw ab. Anbei ein Beispielbild, das abstürzt. |
AW: JPG Resize bei großen Dateien
Ich habe gerade mal mein
![]() |
AW: JPG Resize bei großen Dateien
Naja die Methode wäre natürlich ein Workarround, erklärt aber nicht warum meine Funktion nicht manchen Bildern nicht funktioniert.
Ich habe auf der Form ebenfalls noch ein Vorschau-TImage liegen, das bei Bedarf das Bild anzeigen kann, auch das stürzt ab, in meinem Code ist es:
Delphi-Quellcode:
Anhand des Eurekalog-Debuggers, seh ich dass danach noch ein paar Sachen in der Unit "jpeg" geschehen.
imgVorschau.Picture.LoadFromFile(lstData.Items[Row].rec_PATH);
|
AW: JPG Resize bei großen Dateien
öh, Tatsache -
bei mir hat es mit dem von Dir hochgeladenen Bild auch nicht funktioniert. Dann aber habe ich mir das Bild genau angeschaut. An der Megapixelzahl kann es nicht liegen; an der Dateigröße kann es auch nicht liegen - äh, aber HALT - etwas fett is die scho, gell ? auf 98% komprimiert. und dann hab ich mir die mal genau angeschaut. Aber nicht mit Windows Imageviewer, sondern im Detail. und siehe da ... gespeichert mit Photoshop 7.0 und das schon ... 2003 - (wat ne alte Kamelle ... :oops: ) aber daran liegt's nicht .... sondern ...
Code:
und dann ist mir noch aufgefallen: JPEG, CMYK, quality: 98, subsampling OFF
Filename - 82039999-Bild.jpg
Orientation - Top left XResolution - 304 YResolution - 304 ResolutionUnit - Inch Software - Adobe Photoshop 7.0 DateTime - 2003:05:13 08:58:57 ExifOffset - 156 ColorSpace - Uncalibrated/Unknown (-1) ExifImageWidth - 1944 ExifImageHeight - 1944 Thumbnail: - Compression - 6 (JPG) XResolution - 72 YResolution - 72 ResolutionUnit - Inch JpegIFOffset - 294 JpegIFByteCount - 6227 mitunter könnte es daran liegen, daß es Farbinformationen im CMYK Format und nicht RGB format hat. Vermutlich wird dies von der JPEG-Decompression-Unit nicht beachtet, da es kein Standard im eigentlichen Sinne ist. kannste nur mit try imageload .. except abfangen. evtl. solche CMYK-JPEGS besser vorher mit nem andern Programm [xnview, etc.] konvertieren oder nochmal abspeichern. Ist zwar Qualitätsverlust, aber funzt dann wenigstens. Diese im CMYK gespeicherten JPEG Dateien werden eigentlich nur im Druckbereich benötigt. Falls Dein Programm kommerziell orientiert ist, solltest Du vielleicht besser eine Bilder-import-Komponente kaufen, falls es eine gibt. Damit Deine Kunden keine böse Überraschung erleben. Aber: Wieso funktioniert das bei mir auch anscheinend ohne .Compress? (-> bei den andern Bildern) |
AW: JPG Resize bei großen Dateien
Für CMYK gab es doch ein Update der JPEG-Komponente. Also einfach mal Google fragen...
|
AW: JPG Resize bei großen Dateien
Zitat:
Vielen Dank an alle die geholfen haben. Ich habe nun die erweiterte JPEG Unit genommen, damit funktioniert es einwandfrei. |
AW: JPG Resize bei großen Dateien
...zu erwähnen wäre vielleicht noch, dass bei den neueren Delphi-Versionen das CMYK-Modell (JPEG) unterstützt wird. Mit Delphi 2007 gab es hier noch Probleme, bei XE2 läuft's.
Vielleicht wäre es für andere nützlich, wenn Du deinen Lösungsweg hier posten würdest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz