Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   PNG komprimieren (https://www.delphipraxis.net/198312-png-komprimieren.html)

Redeemer 23. Okt 2018 17:25

AW: PNG komprimieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du musst halt zunächst mal einen Farbreduzierungsalgorithmus implementieren. Bekannte Verfahren sind Octree und Median-Schnitt. Das Median-Schnitt-Verfahren ist selbst dann verlustbehaftet, wenn das Ausgangsbild bereits weniger Farben als angegeben hat. Diese Verfahren werden zudem oft mit einem Dithering-Algorithmus (auch Fehlerdiffusion genannt) kombiniert, am bekanntesten sind Floyd-Steinberg und Stucki. Dithering erhöht die Dateigröße stark.

Zitat:

Zitat von KodeZwerg (Beitrag 1416422)
Zitat:

Zitat von Neutral General (Beitrag 1416420)
Und jede (Alpha-)Transparenz des PNGs geht verloren.

Korrigiere mich, aber soweit ich weiß haben unterhalb 32bit nur "Grayscale" Bilder einen Alphachannel?

Das ist falsch. Unterstützt bloß kaum ein Programm. Beispiel ist angehängt.

Zitat:

Zitat von KodeZwerg (Beitrag 1416406)
Bei der Masse an Code die Du zeigst um zu sehen wie ein Bild in Dein Programm gelangt, so könnte es funktionieren
Delphi-Quellcode:
MeinBild.PixelFormat := pf8Bit;
Teste das mal vorm speichern.

Das wird nicht gehen, da erst komplexe Algorithmen angewandt werden müssen (siehe oben).

Rolf Frei 23. Okt 2018 17:35

AW: PNG komprimieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Rollo62 (Beitrag 1416415)
Käme auch eine Anbindung zu ImageMagick in Frage ?

Kenne ich nicht. Muss da mal ergoogeln.

Zitat:

Zitat von Medium (Beitrag 1416418)
Warum dann überhaupt PNG? Web + Foto = JPG

JPEG unterstützt kein Alphachannel, also Transaprenz. Ausserdem hängt das damit zusammen, ob das Originalbild als PNG vorliegt. Ist es nur eine Bitmap oder sontstiges Bildformat, mache ich da ein JPEG draus. Ein PNG soll aber ein PNG bleiben und zwar mit allen Funktionen des Orignals, also eben auch vorhandem Alphachannel.

Zitat:

Zitat von KodeZwerg (Beitrag 1416422)
Korrigiere mich, aber soweit ich weiß haben unterhalb 32bit nur "Grayscale" Bilder einen Alphachannel?

Nein das geht bei PNG auch mit normalen Bildern. (siehe Links in meinen vorherigen Posts)

Anbei habe ich mal eine RGBA PNG Datei (319 KB) mit Alphachennel und eine mit pngquant.exe umgewandeltes 256 Color PNG (*-fs8.png 76 KB) angehängt. Bei beiden existiert der Alphachannel wie er soll.

KodeZwerg 23. Okt 2018 17:41

AW: PNG komprimieren
 
Deine beiden samples sind 32bit und haben weit über 256 Farben.

Redeemer 23. Okt 2018 17:49

AW: PNG komprimieren
 
Zitat:

Zitat von KodeZwerg (Beitrag 1416427)
Deine beiden samples sind 32bit und haben weit über 256 Farben.

Nein.

Rolf Frei 23. Okt 2018 17:50

AW: PNG komprimieren
 
Zitat:

Zitat von Redeemer (Beitrag 1416425)
Du musst halt zunächst mal einen Farbreduzierungsalgorithmus implementieren. Bekannte Verfahren sind Octree und Median-Schnitt. Das Median-Schnitt-Verfahren ist selbst dann verlustbehaftet, wenn das Ausgangsbild bereits weniger Farben als angegeben hat. Diese Verfahren werden zudem oft mit einem Dithering-Algorithmus (auch Fehlerdiffusion genannt) kombiniert, am bekanntesten sind Floyd-Steinberg und Stucki. Dithering erhöht die Dateigröße stark.

Ja aber genau hier liegt ja der Hund begraben. Ich habe keine Ahnung wie man das macht. Bei meinem 3. Link zum C# Algorythmus wäre ja was dabei, aber ich verstehe da nur Bahnhof und weiss überhaupt nicht wie ich das nun in Delphi umgesetzt bekomme.

http://www.hurryupandwait.io/blog/co...it-pngs-with-c

Habe eigentlich gehofft, dass jemand das Problem bereits mal gelöst hat. Dass da in der Delphi Welt noch niemand mit dem selben Problem konfrontiert war, kann ich mir garnicht so recht vorstellen. Oder es ist einfach noch nicht so recht bekannt, dass man mit PNG und entsprechender Optimierung auch sehr kleine PNG Dateien erzeugen kann.

PS. Photoshop unterstützt diese Format übrigens auch und man kann da auch 8 bit PNG speichern.

Rolf Frei 23. Okt 2018 17:51

AW: PNG komprimieren
 
Zitat:

Zitat von KodeZwerg (Beitrag 1416427)
Deine beiden samples sind 32bit und haben weit über 256 Farben.

Nein da liegst du falsch. Das ohne -fs8 ist das Orginal mit 32 bit. Das andere mit -fs8 ist nur 8 bit mit optimierter Palette.

KodeZwerg 23. Okt 2018 18:04

AW: PNG komprimieren
 
Liste der Anhänge anzeigen (Anzahl: 4)
Das erste Sample hat folgende Bildinformationen: Anhang 50133.
Das zweite Sample hat folgende Bildinformationen: Anhang 50134.
Mein Sample hat folgende Bildinformationen: Anhang 50135.
Und hier ist mein Sample im 8bit PNG Format Anhang 50136.

Redeemer 23. Okt 2018 18:14

AW: PNG komprimieren
 
Zitat:

Zitat von KodeZwerg (Beitrag 1416432)
Das zweite Sample hat folgende Bildinformationen: Anhang 50134.

Nein.

(Ich glaube, das Problem ist, dass KodeZwerg nicht weiß, dass man Bilder hier auf DP vergrößern kann.)

KodeZwerg 23. Okt 2018 18:23

AW: PNG komprimieren
 
Keine Ahnung was dieser Kommentar soll, ihr werdet bestimmt Recht haben, seine Samples sind auch 8bit und sprengen nicht die 256 Farben Mauer, alles wird gut und viel Glück.

Uwe Raabe 23. Okt 2018 20:06

AW: PNG komprimieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von KodeZwerg (Beitrag 1416435)
seine Samples sind auch 8bit und sprengen nicht die 256 Farben Mauer, alles wird gut und viel Glück.

Ich denke, das ist auch tatsächlich so:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Seite 2 von 4     12 34      

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