AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPEG komprimieren - kleiner als 100kb - wie?
Thema durchsuchen
Ansicht
Themen-Optionen

JPEG komprimieren - kleiner als 100kb - wie?

Ein Thema von Yheeky · begonnen am 15. Jul 2005 · letzter Beitrag vom 17. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

JPEG komprimieren - kleiner als 100kb - wie?

  Alt 15. Jul 2005, 23:29
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;
  Mit Zitat antworten Zitat
stefan2005

Registriert seit: 30. Sep 2003
Ort: Puchheim
250 Beiträge
 
Delphi 6 Personal
 
#2

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

  Alt 16. Jul 2005, 00:56
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

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
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#3

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

  Alt 16. Jul 2005, 01:01
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.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

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

  Alt 16. Jul 2005, 03:40
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 16. Jul 2005, 06:22
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#6

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

  Alt 16. Jul 2005, 10:36
exakt das selbe bild
exakt die selben einstellungen
exakt der selbe algo

=> exakt das erselbe ergebnis

oder meinste rundungsfehler sind immer zufall?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

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

  Alt 16. Jul 2005, 22:07
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 )
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#8

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

  Alt 16. Jul 2005, 23:34
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".
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#9

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

  Alt 16. Jul 2005, 23:58
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
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#10

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

  Alt 17. Jul 2005, 01:28
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);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:30 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