AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPG Resize bei großen Dateien

JPG Resize bei großen Dateien

Ein Thema von OlliWW · begonnen am 23. Jul 2013 · letzter Beitrag vom 25. Jul 2013
Antwort Antwort
Seite 1 von 2  1 2   
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#1

JPG Resize bei großen Dateien

  Alt 23. Jul 2013, 12:00
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:
  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;
Probiere ich diesen Code, stürzt es bei StrechDraw ab. Gibt es eine Möglichkeit, dies zu verbessern?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: JPG Resize bei großen Dateien

  Alt 23. Jul 2013, 17:03
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:
  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;
Probiere ich diesen Code, stürzt es bei StrechDraw ab. Gibt es eine Möglichkeit, dies zu verbessern?
Sicher, dass es an der Größe liegt und nicht am jpg File?

Delphi-Quellcode:
        imgJPG.Assign(imgBMP);
        imgJPG.Compress; // <-- fehlt das nicht?
        imgJPG.SaveToFile(sPath);
Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Capstone
Capstone

Registriert seit: 15. Jul 2013
Ort: NRW
23 Beiträge
 
Delphi 3 Professional
 
#3

AW: JPG Resize bei großen Dateien

  Alt 24. Jul 2013, 06:32
also hier mit Delphi 3 funktioniert der o.g. Code.

Code:
imgJPG.Compress; // <-- fehlt das nicht?
jetzt wo Du's sagst ... vermiß ich das auch ....
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


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)
http://abload.de/img/claudia_giorgetti_1_ke0l3e.jpg
MySQL-ERROR(): 1146
- - - Entschuldigung,
Diese Signatur ist in Deinem Land nicht vollständig sichtbar. :/
PGP Key ID: 0xB54AACD6

Geändert von Capstone (24. Jul 2013 um 06:58 Uhr)
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#4

AW: JPG Resize bei großen Dateien

  Alt 24. Jul 2013, 09:13
Hallo,

Das compress fehlt in der Tat. Aber wie gesagt, es stürzt beim StrechDraw ab.

Anbei ein Beispielbild, das abstürzt.

Geändert von OlliWW (25. Jul 2013 um 09:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: JPG Resize bei großen Dateien

  Alt 24. Jul 2013, 09:36
Ich habe gerade mal mein StretchGraphic darauf losgelassen, funktioniert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#6

AW: JPG Resize bei großen Dateien

  Alt 24. Jul 2013, 10:50
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:
imgVorschau.Picture.LoadFromFile(lstData.Items[Row].rec_PATH); Anhand des Eurekalog-Debuggers, seh ich dass danach noch ein paar Sachen in der Unit "jpeg" geschehen.
  Mit Zitat antworten Zitat
Benutzerbild von Capstone
Capstone

Registriert seit: 15. Jul 2013
Ort: NRW
23 Beiträge
 
Delphi 3 Professional
 
#7

AW: JPG Resize bei großen Dateien

  Alt 24. Jul 2013, 23:06
ö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 ... )

aber daran liegt's nicht ....

sondern ...
Code:
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
und dann ist mir noch aufgefallen: JPEG, CMYK, quality: 98, subsampling OFF

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)
MySQL-ERROR(): 1146
- - - Entschuldigung,
Diese Signatur ist in Deinem Land nicht vollständig sichtbar. :/
PGP Key ID: 0xB54AACD6

Geändert von Capstone (24. Jul 2013 um 23:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#8

AW: JPG Resize bei großen Dateien

  Alt 25. Jul 2013, 05:50
Für CMYK gab es doch ein Update der JPEG-Komponente. Also einfach mal Google fragen...
Ronald
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#9

AW: JPG Resize bei großen Dateien

  Alt 25. Jul 2013, 09:06
Für CMYK gab es doch ein Update der JPEG-Komponente. Also einfach mal Google fragen...
Great! Works perfect.

Vielen Dank an alle die geholfen haben. Ich habe nun die erweiterte JPEG Unit genommen, damit funktioniert es einwandfrei.
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#10

AW: JPG Resize bei großen Dateien

  Alt 25. Jul 2013, 17:08
...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.
Ronald
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 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