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? |
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 |
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:
Teste das mal vorm speichern.
MeinBild.PixelFormat := pf8Bit;
|
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 |
AW: PNG komprimieren
Käme auch eine Anbindung zu ImageMagick in Frage ?
|
AW: PNG komprimieren
Warum dann überhaupt PNG? Web + Foto = JPG
|
AW: PNG komprimieren
Delphi-Quellcode:
Also das gespeicherte Bild liegt danach im 8bit/256Farben Modus vor, aber wie Du sagtest, Pallete ist da noch ein Problem.
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; |
AW: PNG komprimieren
Zitat:
PNG ist verlustfrei im Gegensatz zu JPG. Zitat:
|
AW: PNG komprimieren
Zitat:
|
AW: PNG komprimieren
Das kann sein
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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