![]() |
JPG kleiner machen mit Qualitaet einstellen
Guten Abend und erstmal viele Gruesse aus Ecuador ;) ,
ich bin gerade dabei ein Programm zu schreiben das Fotos auf nen FTP hochlaed. Soweit kein Prob, allerdings sollen von den Foto Thumbs erstellt werden mit. Und ich moechte hinzufuegen dass man die JPG Qualitaet einstellen kann beim verkleinern? Wie ist das moeglich? Hier die funktion mit der ich die JPG verkleinere:
Delphi-Quellcode:
es gibt leider kein jpeg.quality oder so etwas, wie geht das?
procedure Resizepicture(old_filename, new_filename: string; width, height: integer);
var bmp:TBitmap; jpeg:TJpegImage; x, y:integer; begin Jpeg:=TJpegImage.Create; try jpeg.LoadFromFile(old_filename); bmp:=TBitmap.Create; try x := jpeg.Width; y := jpeg.Height; new_size(x, y, width, height); bmp.width:=x; bmp.Height:=y; bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg); jpeg.assign(bmp); finally bmp.free; end; jpeg.SavetoFile(new_filename); finally jpeg.free; end; end; und meine zweite Frage ist mathematischer natur: Ich muss ja die neue Groesse berechnen und ich bekomme es irgendwie nicht hin die so auszurechnen um das Thumb in genau der gleichen Groessenordnung zu bekommen wie das herkunftsbild? Hier meine funktion new_size:
Delphi-Quellcode:
Oder hat zufaellig noch jemand eine entsprechende Funktion zuhause rumfliegen und verstauben? ;)
procedure new_size(x, y, max_x, max_y: integer);
var xtel, ytel: real; change: integer; havetochange: boolean; begin if x < y then begin change := x; x := y; y := change; havetochange:= true; end; if max_x < max_y then begin change := x; x := y; y := change; havetochange := not havetochange; end; if ((x < max_x) AND (y < max_y)) then exit; xtel := x / max_x; ytel := y / max_y; if xtel < ytel then begin //hier muesste ja die neue zuweisung hin, da komm ich aber nicht dahinter end else begin //hier muesste ja die neue zuweisung hin, da komm ich aber nicht dahinter end; if havetochange then begin change := x; x := y; y := change; end; end; Gute Nacht vom Magier |
Re: JPG kleiner machen mit Qualitaet einstellen
CompressionQuality
|
Re: JPG kleiner machen mit Qualitaet einstellen
Anschließend aber
![]() Zur zweiten Frage: Hast du die Suchfunktion bemüht? Gib als Suchbegriff "Thumbnail" ein und lasse nur im Multimedia-Forum suchen. Da ist sicher etwas für dich dabei: ![]() Grüße, Matze |
Re: JPG kleiner machen mit Qualitaet einstellen
Wenn ich's richtig verstanden hab:
Delphi-Quellcode:
xtel := x / max_x;
ytel := y / max_y; if xtel < ytel then begin // Dividieren = Kleiner ... Evtl noch prüfen, ob Bild größer wird, denn dann Multiplizieren x := x / xtel; y := y / xtel; end else begin // Dividieren = Kleiner ... Evtl noch prüfen, ob Bild größer wird, denn dann Multiplizieren x := x / ytel; y := y / ytel; end; |
Re: JPG kleiner machen mit Qualitaet einstellen
![]() |
Re: JPG kleiner machen mit Qualitaet einstellen
Liste der Anhänge anzeigen (Anzahl: 1)
ich hatte mir mal dieses kleine Teil gebastelt, welches von allen JPEGs in seinem Verzeichnis 'ne kleinere Version erstellt.
|
Re: JPG kleiner machen mit Qualitaet einstellen
Was deine
Delphi-Quellcode:
betrifft:
procedure new_size(x, y, max_x, max_y: integer);
Viele Wege führen nach Rom... (Obwohl mir deine Funktion da etwas zu chaotisch vom Aufbau her ist) Ich würde es so lösen:
Delphi-Quellcode:
Aufpassen: ich denke oben in der Variablenübernahme muss ein VAR hin, sonst werden x und y zwar ausgerechnet, aber nicht mehr in die Hauptprozedur zurückgegeben, oder?! Stichwort "Referenzübergabe".
Faktor1:=x/max_x;
Faktor2:=y/max_y; //Ergibt für jede Dimension den nötigen Verkleinerungsfaktor Faktor:=Max(Faktor1,Faktor2); x:=round(x/Faktor); y:=round(y/Faktor);
Delphi-Quellcode:
procedure new_size(var x, y, max_x, max_y: integer);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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