AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPG kleiner machen mit Qualitaet einstellen
Thema durchsuchen
Ansicht
Themen-Optionen

JPG kleiner machen mit Qualitaet einstellen

Offene Frage von "Magier"
Ein Thema von Magier · begonnen am 8. Feb 2009 · letzter Beitrag vom 8. Feb 2009
Antwort Antwort
Magier

Registriert seit: 2. Okt 2004
Ort: Bergisch Gladbach
39 Beiträge
 
Delphi 7 Personal
 
#1

JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 04:00
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:
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;
es gibt leider kein jpeg.quality oder so etwas, wie geht das?

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:
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;
Oder hat zufaellig noch jemand eine entsprechende Funktion zuhause rumfliegen und verstauben?

Gute Nacht
vom Magier
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 07:32
CompressionQuality
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 07:45
Anschließend aber Delphi-Referenz durchsuchenCompress nicht vergessen.

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: Das Suchergebnis.

Grüße, Matze
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 08:16
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 15:29
http://www.delphipraxis.net/internal...=978676#978676 (allerdings ohne Kompression).
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#6

Re: JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 15:45
ich hatte mir mal dieses kleine Teil gebastelt, welches von allen JPEGs in seinem Verzeichnis 'ne kleinere Version erstellt.
Angehängte Dateien
Dateityp: 7z resizejpegs_519.7z (93,5 KB, 23x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#7

Re: JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 23:45
Was deine
procedure new_size(x, y, max_x, max_y: integer); betrifft:
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:
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);
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".
procedure new_size(var x, y, max_x, max_y: integer);
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  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 04:54 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