Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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)

Rolf Frei 23. Okt 2018 13:54

PNG komprimieren
 
Ich nutze folgendes externes Tool (https://pngquant.org/) um aus Fullcolor PNG's stark komprimierte 256 Farb PNG's zu erstellen. Die Dateigrösse wird dabei massiv verkleinert (~70%) ohne grossen Qualitätsverlust.

Ich würde das nun gerne selber mit der Delphi TPNGImage Komponente umsetzen, damit ich das externe Programm eliminieren könnte. Leider habe ich keine Ahnung wie ich da vorgehen müsste um ans gleiche Ziel zu kommen.

Zur Zeit nutze ich diesen Befelszeile: pngquant.exe --ext .png --force 256 meinbild.png

Soweit ich das sehe, unterstützt die Delphi TPNGImage Komponnente sowas nicht oder irre ich mich da? Hat jemand einen Tipp wie man das nativ in Delphi umsetzen könnte ohne dieses externe Tool nutzen zu müssen?

Sherlock 23. Okt 2018 14:08

AW: PNG komprimieren
 
Die Komponente unterstützt das nicht. Auch über die Windows API wirds schwer. Mein Favorit TWICImage liefert dazu keine dokumentierten Möglichkeiten, über andere Wege kann ich schon gar nichts mehr sagen.

Sherlock

KodeZwerg 23. Okt 2018 14:10

AW: PNG komprimieren
 
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.

Rolf Frei 23. Okt 2018 14:43

AW: PNG komprimieren
 
Das Bild gelangt auf ganz normale Art in mein Programm. :) Durch Laden eines bestehenden PNG's oder Konvertieren einer Bitmap. Das klappt ja alles wunderbar nur sind die Dateien dann halt fürs Web recht gross, da PNG für normale Fotos nicht ideal ist. Also speichere ich das PNG ab und lasse es mit dem pngquant.exe in eine 256 Farb PNG umwandlen. Dieses lade ich dann wieder und verwende das dann im Web. Die Frage ist hier wie man ein RGBA PNG in ein 8 Bit PNG mit optimierter Palette umwandelt. (siehe Link im ersten Post)

Es geht hier nicht um die Umwandlung einer Bitmap, daher gibt es da auch kein PixelFormat. TPngImage.PixelFormat gibt es nicht.

Weitere Infos findet man auch hier:
https://css-ig.net/articles/lossy-png-optimization

Habe hier auch noch was gefunden, verstehe da aber fast nur Bahnhof wie man das denn nun in Delphi umschreiben könnte:
http://www.hurryupandwait.io/blog/co...it-pngs-with-c

Rollo62 23. Okt 2018 15:15

AW: PNG komprimieren
 
Käme auch eine Anbindung zu ImageMagick in Frage ?

Medium 23. Okt 2018 15:34

AW: PNG komprimieren
 
Warum dann überhaupt PNG? Web + Foto = JPG

KodeZwerg 23. Okt 2018 15:50

AW: PNG komprimieren
 
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create();
  if SavePictureDialog1.Execute then
  begin
    bmp.Assign(Image2.Picture.Graphic);
    bmp.PixelFormat := pf8bit;
    Image2.Picture.Graphic.Assign(bmp);
    Image2.Picture.SaveToFile(SavePictureDialog1.FileName);
  end;
  bmp.Free;
end;
Also das gespeicherte Bild liegt danach im 8bit/256Farben Modus vor, aber wie Du sagtest, Pallete ist da noch ein Problem.

Neutral General 23. Okt 2018 16:09

AW: PNG komprimieren
 
Zitat:

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

Portable Network Graphics :P
PNG ist verlustfrei im Gegensatz zu JPG.

Zitat:

Zitat von KodeZwerg (Beitrag 1416419)
[...]
Also das gespeicherte Bild liegt danach im 8bit/256Farben Modus vor, aber wie Du sagtest, Pallete ist da noch ein Problem.

Und jede (Alpha-)Transparenz des PNGs geht verloren.

KodeZwerg 23. Okt 2018 16:22

AW: PNG komprimieren
 
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?

Neutral General 23. Okt 2018 16:24

AW: PNG komprimieren
 
Das kann sein


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Seite 1 von 4  1 23     Letzte »    

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