AGB  ·  Datenschutz  ·  Impressum  







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

JPG Resize bei großen Dateien

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

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

JPG Resize bei großen Dateien

  Alt 23. Jul 2013, 11: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.154 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: JPG Resize bei großen Dateien

  Alt 23. Jul 2013, 16: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, 05: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 05: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, 08: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 08:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: JPG Resize bei großen Dateien

  Alt 24. Jul 2013, 08: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, 09: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
Antwort Antwort

 

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 20:01 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