AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PNG komprimieren

Ein Thema von Rolf Frei · begonnen am 23. Okt 2018 · letzter Beitrag vom 24. Okt 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#1

PNG komprimieren

  Alt 23. Okt 2018, 14:54
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#2

AW: PNG komprimieren

  Alt 23. Okt 2018, 15:08
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: PNG komprimieren

  Alt 23. Okt 2018, 15:10
Bei der Masse an Code die Du zeigst um zu sehen wie ein Bild in Dein Programm gelangt, so könnte es funktionieren MeinBild.PixelFormat := pf8Bit; Teste das mal vorm speichern.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: PNG komprimieren

  Alt 23. Okt 2018, 15:43
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

Geändert von Rolf Frei (23. Okt 2018 um 15:59 Uhr)
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: PNG komprimieren

  Alt 23. Okt 2018, 16:15
Käme auch eine Anbindung zu ImageMagick in Frage ?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: PNG komprimieren

  Alt 23. Okt 2018, 16:34
Warum dann überhaupt PNG? Web + Foto = JPG
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: PNG komprimieren

  Alt 23. Okt 2018, 16:50
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: PNG komprimieren

  Alt 23. Okt 2018, 17:09
Warum dann überhaupt PNG? Web + Foto = JPG
Portable Network Graphics
PNG ist verlustfrei im Gegensatz zu JPG.

[...]
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: PNG komprimieren

  Alt 23. Okt 2018, 17:22
Und jede (Alpha-)Transparenz des PNGs geht verloren.
Korrigiere mich, aber soweit ich weiß haben unterhalb 32bit nur "Grayscale" Bilder einen Alphachannel?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: PNG komprimieren

  Alt 23. Okt 2018, 17:24
Das kann sein
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 13: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