Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPEG komprimieren - kleiner als 100kb - wie? (https://www.delphipraxis.net/49780-jpeg-komprimieren-kleiner-als-100kb-wie.html)

Yheeky 15. Jul 2005 22:29


JPEG komprimieren - kleiner als 100kb - wie?
 
Hi,

folgendes: In meinem Programm möchte ich ein Bild solange komprimieren lassen, bis das Bild kleiner als 100kb ist. Bei Bildern, die standardmäßig um 1Mb groß sind, funktioniert das ja problemlos. Wenn ich nun ein Bild nehme, was 10MB groß ist, kann < 100kb nicht mal bei Kompressionsstärke 1 erreicht werden. Nun würde ich gerne folgende Funktion so haben, dass mir angezeigt wird, dass das Bild nicht unter 100kb komprimiert werden kann. Wie geht das?

Delphi-Quellcode:
procedure [...]
var Kompression : Byte;
begin
Kompression := 100; // 100 - kaum komprimiert; 1 - sehr komprimiert

repeat
   JPGDatei.CompressionQuality := Kompression;
   JPGDatei.Compress;
   JPGDatei.SaveTofile(JPGDateiname);
   Dec(Kompression)
until GetFileSize(JPGDateiname) < 100; // wenn das Bild kleiner als 100kb ist, aus der Funktion gehen

end;

stefan2005 15. Jul 2005 23:56

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
hi,
ich glaube wenn du eine datei einfach zweimal oder öfters komprimieren lässt, dass es dann keine Auswirkungen mehr hat, oder ? sonst könnte man jede noch so große Datei einfach tausendmal komprimieren lassen und sie würde auf ne Diskette passen :wink:

sprich: wenn nach dem ersten mal Komprimieren die Datei nicht kleiner als 100 KB ist wird sie nach dem zweiten Mal auch nicht kleiner als 100 KB sein, meiner Meinung nach !

cu,
stefan2005

dahead 16. Jul 2005 00:01

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
das ist richtig, gibt auch logisch sonst keinen sinn.

du könntest das bild allerdings verkleinern, indem du die auflösung änderst oder bspw. die farbanzahl heruntersetzt.

supermuckl 16. Jul 2005 02:40

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
falsch. jpeg ist ein verlustbehaftetes format.
je mehr komprimierung, desto kleiner sollte die datei werden.

du solltest wohl immer von dem ausgangsbild-ab komprimieren und nicht jedesmal das komprimierte wieder komprimieren

also bmp -> jpeg

dizzy 16. Jul 2005 05:22

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
Und wenn ihr richtig gelesen hättet, dann hättet ihr gesehen, dass er immer von ein un der selben Source komprimiert, mit in der Schleife sinkendem Kompressionsfaktor. Da ist alles in Ordnung. ;)
Frage bei until auch den Kompressionsfaktor auf = 1 oder = 0 ab. Nach der Schleife prüfen ob der Faktor 0 oder größer ist, und schon weisst du ob die Schleife wegen der Dateigröße oder dem Faktor beendet wurde, und kannst entsprechend reagieren.

Gruss,
Fabain

\\edit: Ich würde das allerdings in der Schleife in einen Stream speichern! Das sollte erheblich schneller sein.

\\nochmaledit: @Supermuckl: Wenn man ein jpeg mit exakt dem selben Algo mit exakt den selben settings speichert, dann kommt auch exakt die (fast) selbe Dateigröße hinten raus. "Fast" nur, weil sich auf Grund von Rundungsfehlern Kleinigeiten ändern können.

brechi 16. Jul 2005 09:36

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
exakt das selbe bild
exakt die selben einstellungen
exakt der selbe algo

=> exakt das erselbe ergebnis

oder meinste rundungsfehler sind immer zufall?

dizzy 16. Jul 2005 21:07

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
Zitat:

Zitat von brechi
exakt das selbe bild
exakt die selben einstellungen
exakt der selbe algo

=> exakt das erselbe ergebnis

oder meinste rundungsfehler sind immer zufall?

Nein, ich denke an ein bereits ein mal als jpeg gespeichertes Bild, dass geöffnet und erneut als jpeg mit exakt selben Einstellungen gespeichert wird. Nicht von der selben Datenbasis wie die erste Kompression. Die Rundungsfehler treten dann bei der Dekompression auf, und ziehen sich in die 2. Kompression durch und verstärken oder kompensieren sie sich dort. Letzlich kann es dadurch zu ein paar Byte Unterschied kommen (muss es nicht, und es ist sicherlich auch nicht viel ;))

Yheeky 16. Jul 2005 22:34

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
Zitat:

Zitat von dizzy
Frage bei until auch den Kompressionsfaktor auf = 1 oder = 0 ab. Nach der Schleife prüfen ob der Faktor 0 oder größer ist, und schon weisst du ob die Schleife wegen der Dateigröße oder dem Faktor beendet wurde, und kannst entsprechend reagieren.

Wie geht das "auch" denn? Ich wollte ne and bzw. or Verknüpfung erstellen aber da meinte er "end erwartet".

Arnulf 16. Jul 2005 22:58

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
Also ich kapier das sowieso nicht.
wenn ein bild 10 mb hat, dann hat das einfach eine zu hohe Auflösung.
warum schraubst nicht die Auflösung runter und komprimierst nacher ganz normal.
Dann kommst eh leicht unter 100 kb.
640x480 oder sowas und du hast eine halbwegs annehmbare qualität mit 50 kb...

Arnulf

scp 17. Jul 2005 00:28

Re: JPEG komprimieren - kleiner als 100kb - wie?
 
Zitat:

Zitat von Yheeky
Wie geht das "auch" denn? Ich wollte ne and bzw. or Verknüpfung erstellen aber da meinte er "end erwartet".

Wie beim Rechnen, mit Klammern:

Delphi-Quellcode:
   Dec(Kompression);
until (GetFileSize(JPGDateiname) < 100) or (Kompression < 1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Seite 1 von 2  1 2      

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