[gelöst] JPG Größe anpassen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
VB_Lazarus
Beiträge: 85
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10 32/64bit, L 2.0.4 32bit, FPC 3.0.4 32bit
CPU-Target: 32Bit

[gelöst] JPG Größe anpassen

Beitrag von VB_Lazarus »

Hallo,

ich habe folgendes Problem:

Ich habe eine Datenbank. In dieser Datenbank sind Informationen gespeichert.
Jede Information soll so eine Art kleines Bild besitzen.
Der Benutzer wählt erin Bild aus.
Das Bild (egal welche Größe) soll kopiert und auf eine bestimmte Größe reduziert werden.
Ich habe nichts (vielleicht die falsche Frage bei g**gle eingegeben) gefunden, wie ich ein Bild (jpg) on the fly in der Größe reduzieren kann.
Gibt es eine einfache Methode die Bildgröße (ohne Controls) entsprechend zu reduzieren?

Danke.
Zuletzt geändert von VB_Lazarus am So 31. Aug 2014, 12:04, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 8516
Registriert: Mo 11. Sep 2006, 19:01

Re: JPG Größe anpassen

Beitrag von theo »

Auf ein neues TBitmap oder TJPEGImage Stretchdrawen.
http://lazarus-ccr.sourceforge.net/docs ... hdraw.html

Z.B.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var i:TJPEGImage;
begin
  i:=TJPEGImage.Create;
  i.SetSize(100,100);
  i.Canvas.StretchDraw(Rect(0,0,100,100),Image1.Picture.Jpeg);
  i.SaveToFile('/home/theo/test38.jpg');
  i.free;
end;


Könnte man noch proportional machen.

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: JPG Größe anpassen

Beitrag von gocher »

also bei mir klappt das mit g**gle
g**gle:) free pascal dynamisch skalierte bilder
bei dieser Abrage führt der 1.Treffer http://www.gocher.me/dynamic-scaled-images zu meiner Methode (ohne visuelle Komponenten), einfach ist dieser Weg allerdings nicht, aber sehr schnell!
Ich nutze diese Variante um auf meiner Homepage die Thumbnails zu generieren, bei JPGs nutze ich dafür auch das Vorschaubild falls vorhanden,
ich speichere die Bilder allerdings nicht, denn das ist nur Platzverschwendung und die Zeit zum auslesen der internen Vorschau ist zu vernachlässigen, dabei fällt mir auf, dass ich die Unit FPWriteGIF (enthält allerdings keine Lösung für animierte GIFs) noch veröffentlichen sollte die existiert in Free Pascal noch nicht. (ist nun bereits passiert!!)

sMimeType = 'image/jpeg', 'image/png', 'image/gif', 'image/bmp' ( 'image/bmp' wird automatisch nach 'image/jpeg' konvertiert)
bCrop (nie verzerren, bei bCrop beschneiden auf LWidth, LHeight, sonst einpassen)
das skalierte Bild liegt dann im MemoryStream, kann man dann speichern, muss man aber nicht

Code: Alles auswählen

  
uses ..., ImgUtils;
 
var MemoryStream: TMemoryStream;
...
  MemoryStream := TMemoryStream.Create;
  scaleImageToStream(AFilename, sMimeType, MemoryStream, LWidth, LHeight, bCrop);
...
 



g**gle:) free pascal bilder skalieren --> ... etliche Treffer zu deiner Frage
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

VB_Lazarus
Beiträge: 85
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10 32/64bit, L 2.0.4 32bit, FPC 3.0.4 32bit
CPU-Target: 32Bit

Re: JPG Größe anpassen

Beitrag von VB_Lazarus »

Hallo,

sorry, das ich mich so spät melde.

Danke an theo und gocher, für die beiden Lösungen.

Ich glaube ich suche meistens verkehrt (Lazarus + Frage).

Ich habe vorerst die Lösung von theo verwendet.

Gruß

Antworten