Bild komprimieren ohne Qualitätsverlust

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bild komprimieren ohne Qualitätsverlust

    Hallo zusammen,

    ich stehe aktuell vor der folgenden Herausforderung. Ich soll eine Bilddatei komprimieren 8Dateigröße) ohne dass dabei Verluste in der Bildqualität zu verzeichnen sind.

    Ist das überhaupt möglich und wenn ja, wo kann ich da ansetzen? Über die UIImagePresentation Methode kann ich ja nur über das Verringern der Qualitätsstufe eine Verkleinerung hervorrufen...

    Danke.
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Das ist möglich, aber in der Regel nur bei Grafiken aber nicht bei Fotos sinnvoll. Fotos verwenden in der Regel zu viele unterschiedliche Farben und besitzen keine echt einfarbigen Flächen, weswegen da eine verlustfreie Kompression nahezu unmöglich ist. Soweit ich weiß unterstützen PNG und TIFF verlustfreie Kompressionen.
    „Meine Komplikation hatte eine Komplikation.“
  • es hängt auch davon ab wieviel rechenzeit du investieren willst.
    bei png kannst du viele parameter verändern - je mehr du davon durchprüfst desto näher kommst du der optimalen kompression.
    das benötigt aber jede menge CPU-zeit und somit auch jede menge strom.
    falls es um die representation eines views geht in das du nur gezeichnet hast, dann kannst du das auch als vektorformat speichern - das sollte dann in der regele kleiner sein (außer du hast eben massenweise vektoren drin).
  • macmoonshine schrieb:

    Thallius schrieb:

    Es gibt doch 100% jpeg.
    Entweder komprimiert das nicht oder ist auch nicht verlustfrei. ;)
    Doch natürlich gibt es verlustfreies JPEG. Wie effektiv da ist hängt halt vom Bild ab. Aber das hast du ja eh schon erwähnt.

    Aber wir wissen ja auch gar nicht was für Bilder der TO komprimieren will, von daher ist es müßig sich darüber gedanken zu machen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • NA dann viel Spaß. Das kannste knicken das verlustfrei zu kompremieren. Wahrscheinlich so ein bescheuerter Hobbyfotograf der am liebsten noch die RAW Daten der Kamera gespeichert haben will.

    Wozu soll das auf einem mobilen Device denn gut sein?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • macmoonshine schrieb:

    Wie ich oben geschrieben habe, ist das nahezu unmöglich, da sich in Fotos exakt gleiche Farbwerte kaum wiederholen. Auch wenn es verlustfreie JPEG-Verfahren geben sollte, werden die bei Fotos kaum eine Chance haben.
    Och, das ist doch einfach quatsch. Durch Dekorrelation von Farb- und Luminanzinformation und anschliessender DCT bekommt man etwas, das sich sehr wohl Erfolgreich Entropycoden lässt, schau halt an wie JPEG eigentlich funktioniert und dann siehst Du, dass es nicht viel mit "wiederholenden Farbwerten" zu tun hat -- sondern wiederholende Frequenzen. Und da man Macroblöcke (8x8) verwendet, ist der Gleichanteil benachbarter Blöcke wir sehr grosser Wahrscheinlichkeit identisch (IIRC encoded man diesen dann 'verlustfrei' sogar nur mit um die 3 bit).

    BTW, was glaubt ihr, was PNG für eine Kompression verwendet? Oder TIFF mit LZW? Oder PIZ Compression bei EXRs. Oder...
    C++
  • Was ist denn mit "ohne dass dabei Verluste in der Bildqualität zu verzeichnen sind" gemeint? Geht es wirklich um bitgenaue Reproduzierbarkeit oder darum, dass keine störenden Artefakte erkennbar sind?

    Es gibt etliche Kompressionsverfahren, von verlustfrei bis verlustbehaftet, von allgemein bis spezialisiert, von einfach-schnell-ineffizient bis kompliziert-langsam-effizient, von Standard bis esoterisch. Da kann man bestimmt etwas Passendes finden, allerdings kann prinzipbedingt kein Komprimierungsalgorithmus beliebige Bilder gleichzeitig beliebig weit und beliebig originalgetreu zusammenkochen. Deshalb: Was ist das Ziel?

    Für reine Darstellungszwecke ist verlustfreie Bildkompression selten sinnvoll, weil sich mit einem unerkennbaren Verlust typischerweise erheblich höhere Kompressionsraten erzielen lassen. JPEG ist zwar mittlerweile in die Jahre gekommen und ein kleinster gemeinsamer Nenner, aber dafür immer noch ziemlich gut.
    Multigrad - 360°-Produktfotografie für den Mac
  • zerm schrieb:

    macmoonshine schrieb:

    Wie ich oben geschrieben habe, ist das nahezu unmöglich, da sich in Fotos exakt gleiche Farbwerte kaum wiederholen. Auch wenn es verlustfreie JPEG-Verfahren geben sollte, werden die bei Fotos kaum eine Chance haben.
    Och, das ist doch einfach quatsch. Durch Dekorrelation von Farb- und Luminanzinformation und anschliessender DCT bekommt man etwas, das sich sehr wohl Erfolgreich Entropycoden lässt, schau halt an wie JPEG eigentlich funktioniert und dann siehst Du, dass es nicht viel mit "wiederholenden Farbwerten" zu tun hat -- sondern wiederholende Frequenzen. Und da man Macroblöcke (8x8) verwendet, ist der Gleichanteil benachbarter Blöcke wir sehr grosser Wahrscheinlichkeit identisch (IIRC encoded man diesen dann 'verlustfrei' sogar nur mit um die 3 bit).
    BTW, was glaubt ihr, was PNG für eine Kompression verwendet? Oder TIFF mit LZW? Oder PIZ Compression bei EXRs. Oder...

    Sobald du anfägst die Daten auf diese Art zu transformieren, hast du aber schon die ersten Verfälschungen durch die Fließkomma-Ungenauigkeit. Damit hast Du schon kein 1:1 Bild mehr nach dem Auspacken.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Sobald du anfägst die Daten auf diese Art zu transformieren, hast du aber schon die ersten Verfälschungen durch die Fließkomma-Ungenauigkeit.
    Naja, beispielsweise LZW verwendet nur Ganzzahl-Arithmetik und keinerlei math. Transformationen. Das Verfahren ist absolut verlustfrei.

    Letztendlich ist die Verlustfreiheit ein hehres Ziel, wie das Optimum bei vielen Optimierungsproblemen. Theoretisch ganz toll, in der Praxis gibt's aber ganz viele Tote und Verletzte, und man wäre mit der zweitbesten Lösung besser gefahren. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Thallius schrieb:

    Sobald du anfägst die Daten auf diese Art zu transformieren, hast du aber schon die ersten Verfälschungen durch die Fließkomma-Ungenauigkeit.
    Naja, beispielsweise LZW verwendet nur Ganzzahl-Arithmetik und keinerlei Transformationen. Das Verfahren ist absolut verlustfrei.
    Letztendlich ist die Verlustfreiheit ein hehres Ziel, wie das Optimum bei vielen Optimierungsproblemen. Theoretisch ganz toll, in der Praxis gibt's aber ganz viele Tote und Verletzte, und man wäre mit der zweitbesten Lösung besser gefahren. ;)
    Ich habe ja auch nicht von LZW gesprochen
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    macmoonshine schrieb:

    Thallius schrieb:

    Sobald du anfägst die Daten auf diese Art zu transformieren, hast du aber schon die ersten Verfälschungen durch die Fließkomma-Ungenauigkeit.
    Naja, beispielsweise LZW verwendet nur Ganzzahl-Arithmetik und keinerlei Transformationen. Das Verfahren ist absolut verlustfrei.Letztendlich ist die Verlustfreiheit ein hehres Ziel, wie das Optimum bei vielen Optimierungsproblemen. Theoretisch ganz toll, in der Praxis gibt's aber ganz viele Tote und Verletzte, und man wäre mit der zweitbesten Lösung besser gefahren. ;)
    Ich habe ja auch nicht von LZW gesprochen
    verwenden aber viele (tiff, gif, png).
  • gritsch schrieb:

    Thallius schrieb:

    macmoonshine schrieb:

    Thallius schrieb:

    Sobald du anfägst die Daten auf diese Art zu transformieren, hast du aber schon die ersten Verfälschungen durch die Fließkomma-Ungenauigkeit.
    Naja, beispielsweise LZW verwendet nur Ganzzahl-Arithmetik und keinerlei Transformationen. Das Verfahren ist absolut verlustfrei.Letztendlich ist die Verlustfreiheit ein hehres Ziel, wie das Optimum bei vielen Optimierungsproblemen. Theoretisch ganz toll, in der Praxis gibt's aber ganz viele Tote und Verletzte, und man wäre mit der zweitbesten Lösung besser gefahren. ;)
    Ich habe ja auch nicht von LZW gesprochen
    verwenden aber viele (tiff, gif, png).
    Zerm sprach aber von einer Frequenzanalyse und das wird schwierig nur mit Integer...
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • mattik schrieb:

    Was ist denn mit "ohne dass dabei Verluste in der Bildqualität zu verzeichnen sind" gemeint? Geht es wirklich um bitgenaue Reproduzierbarkeit oder darum, dass keine störenden Artefakte erkennbar sind?

    Es gibt etliche Kompressionsverfahren, von verlustfrei bis verlustbehaftet, von allgemein bis spezialisiert, von einfach-schnell-ineffizient bis kompliziert-langsam-effizient, von Standard bis esoterisch. Da kann man bestimmt etwas Passendes finden, allerdings kann prinzipbedingt kein Komprimierungsalgorithmus beliebige Bilder gleichzeitig beliebig weit und beliebig originalgetreu zusammenkochen. Deshalb: Was ist das Ziel?

    Für reine Darstellungszwecke ist verlustfreie Bildkompression selten sinnvoll, weil sich mit einem unerkennbaren Verlust typischerweise erheblich höhere Kompressionsraten erzielen lassen. JPEG ist zwar mittlerweile in die Jahre gekommen und ein kleinster gemeinsamer Nenner, aber dafür immer noch ziemlich gut.
    Genau. Zwischen Verlustbehafteten und Verlustfreien Kompressionsverfahren gib es noch die "Beinahe Verlustfreien" Verfahren, welche meist In der Medizin und Wissenschaft bei der Archivierung und zur Analyse verwendet werden. - Lies mal die o.g. Artikel.
    * Kann Spuren von Erdnüssen enthalten.
  • Thallius schrieb:

    Sobald du anfägst die Daten auf diese Art zu transformieren, hast du aber schon die ersten Verfälschungen durch die Fließkomma-Ungenauigkeit. Damit hast Du schon kein 1:1 Bild mehr nach dem Auspacken.
    Es gibt perfekt invertierbare (integer) DCTs, genau zu diesem Zweck.

    Noch ein aktuelleres Beispiel, HEVC (h.265) kann auch lossless, und reproduziert auch garantiert Bit-exakt bei recht sehr guter Kompression.
    C++