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 3 von 4     123 4      
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#21

AW: PNG komprimieren

  Alt 23. Okt 2018, 21:09
KodeZwerg, wenn du auf ein Bild in den Anhängen klickst, dann erscheint es in Originalgröße. Das Bild in Originalgröße hat die vom OP genannten Daten.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Medium

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 01:18
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.
Okay, das kann ich akzeptieren.

Zitat:
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.
Uhm, ich muss ehrlich gestehen, dass ich bei Bildern der Größe die du da zeigst, definitiv mit 200kb+ pro Bild rechnen würde. Mindestens. Wie viele davon willst du denn darstellen auf einer Seite? Heutzutage sind Seiten mit 1-5MB (oder noch mehr) doch keine Seltenheit mehr, und wer deutlich mehr auf "überlangen" Seiten zeigen will, lädt dynamisch beim Scrollen nach oder verzweigt mittels Thumbnails und Links.
Ich würde mir bei 320k bei dieser Bildgröße echt keine Sorgen mehr machen, nichtmals bei mobile apps. Das ist Zeit, die man besser in andere wichtigere Details investieren kann finde ich. (Insbesondere weil Bilder, die nicht unbedingt so Farbton-uniform sind wie das gezeigte, auch bei 256 Farben schnell unschön werden können.)
"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
Rollo62

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 07:13
PascalMagick müsste in alten und neuen Versionen funktionieren.
Oder per COM-Object einbinden, und die COM-Libraries vom Delphi Component-Wizard erzeugen lassen.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 08:04
KodeZwerg, wenn du auf ein Bild in den Anhängen klickst, dann erscheint es in Originalgröße. Das Bild in Originalgröße hat die vom OP genannten Daten.
Ich gestehe mir selbst meinen Fehler ein! Ja ich hatte auf dem Bild nur rechtsklick und "Speichern unter..." gewählt, ich bin davon ausgegangen das der das verlinkte speichert, nochmal neu probiert mit "Verlinktes speicher" und voila, daten kurz gecheckt, Deine Ausage sowie auch die von Uwe passen und ich lag daneben wegen dem Fehl-Download.
Verzeih meinen Rüpelhaften schlusssatz.

(ich bin immer noch davon überzeugt das per Delphi ein Umweg über Bitmap nötig ist um die Farbtiefe anzupassen, ich werde noch weiter experimentieren...)

Wenn ich dem Png Befehle sei 8bit, da bekomme ich beim speichern AV weil die Png Komponente intern alles unter 32bit ablehnt um Alphakanäle zu setzen. Zumindest in meinem Delphi 2010.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 08:49
Was bereits klappt:

Png Datei laden
Png Datei samt Alpha in ein Bitmap schreiben
Bmp wieder in ein Png mit Alpha schreiben
Datei speichern

Erste Versuche ein Force 8bit einzubauen sind an dem Alphakanal gescheitert.
Siehe Anhang :-]
Miniaturansicht angehängter Grafiken
ep50_adhoc_paris-01-2-_1.png  
Angehängte Dateien
Dateityp: 7z Project1.7z (386,8 KB, 2x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: PNG komprimieren

  Alt 24. Okt 2018, 09:20
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
Hast du (oder irgendwer der sich hier Beteiligten) denn überhaupt den GESAMTEN Blogpost gelesen?
Lade dir doch einfach die Visual Studio Community runter, hole dir den nQuant Quelltext, kompiliere und builde das Kommandozeilentool und rufe es in deinen Programm (oder sonst wie) auf.

https://code.msdn.microsoft.com/Conv...bit%20PNGs.zip

Wenn ganz viel Zeit da ist, kannst du die 632 Zeilen der WuQuantizer.cs (also da wo die ganze Magie passiert) auch nach Delphi übersetzen.
Delphi bringt auch eine GDI+ Kapselung mit. Damit kannst du die verwendeten Objekte von System.Drawing und System.Drawing.Imaging substituieren.
  Mit Zitat antworten Zitat
Rolf Frei

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 12:07
Hast du (oder irgendwer der sich hier Beteiligten) denn überhaupt den GESAMTEN Blogpost gelesen?
Lade dir doch einfach die Visual Studio Community runter, hole dir den nQuant Quelltext, kompiliere und builde das Kommandozeilentool und rufe es in deinen Programm (oder sonst wie) auf.

https://code.msdn.microsoft.com/Conv...bit%20PNGs.zip

Wenn ganz viel Zeit da ist, kannst du die 632 Zeilen der WuQuantizer.cs (also da wo die ganze Magie passiert) auch nach Delphi übersetzen.
Delphi bringt auch eine GDI+ Kapselung mit. Damit kannst du die verwendeten Objekte von System.Drawing und System.Drawing.Imaging substituieren.
Aber dann wäre ich doch genau da wo ich jetzt schon bin. Lies du mal meinen ersten Post durch

pngquant.exe (https://pngquant.org/) macht ja genau das was ich will nur würde ich eben gerne dieses externe Tool eliminieren und alles in Delphi machen. pngquant ist hervorragend und produziert super Qualität. Wenn das mit Delphi nicht einfach umsetzbar ist, werde ich halt gezwungen sein, das Tool weiterhin zu nutzen.

@KodeZwerg
Das ist doch schon mal ein guter Anfang. Bin gespannt ob du das noch besser hinkriegst.

Geändert von Rolf Frei (24. Okt 2018 um 12:49 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 12:17
Uhm, ich muss ehrlich gestehen, dass ich bei Bildern der Größe die du da zeigst, definitiv mit 200kb+ pro Bild rechnen würde. Mindestens. Wie viele davon willst du denn darstellen auf einer Seite? Heutzutage sind Seiten mit 1-5MB (oder noch mehr) doch keine Seltenheit mehr, und wer deutlich mehr auf "überlangen" Seiten zeigen will, lädt dynamisch beim Scrollen nach oder verzweigt mittels Thumbnails und Links.
Ich würde mir bei 320k bei dieser Bildgröße echt keine Sorgen mehr machen, nichtmals bei mobile apps. Das ist Zeit, die man besser in andere wichtigere Details investieren kann finde ich. (Insbesondere weil Bilder, die nicht unbedingt so Farbton-uniform sind wie das gezeigte, auch bei 256 Farben schnell unschön werden können.)
Das angehängte Bild war nur eine Besispiel mit einer relativ kleinen Datei. Es gibt hier eben PNG's, die klar im MB Bereich liegen.

Ich wusste das mit der Komprimierung selber bis vor ca. einem halben Jahr auch noch nicht und wurde von einem Kunden darauf hingewiesen. Damals habe ich dann die Nutzung von pngquant.exe in mein Programm eingebaut und konvertiere die PNG's nun damit, wenn der Kunde das so wünscht. Dieser Schritt hätte ich halt sehr gerne auch in Delphi implementiert, damit ich keine externe Tools aufrufen muss.

pngquant.exe ist übrigens Opensource und die Sourcen dazu sind auf Github zu finden:
https://github.com/kornelski/pngquant

Geändert von Rolf Frei (24. Okt 2018 um 12:22 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#29

AW: PNG komprimieren

  Alt 24. Okt 2018, 12:30
Aber dann wäre ich doch genau da wo ich jetzt schon bin. Lies du mal meinen ersten Post durch
Ah, ja! Mir war so, als ob du eine externe Webanwendung ersetzen wolltest.

Warum willst du denn das externe Tool ersetzen? Wer bezahlt dir denn diese Zeit?
Es ist doch schon fertig (mehrfach!) als kleine Kommandozeilen-Exe verfügbar.
Du hast von vielen Seiten Beispiele für einen solchen Algorithmus.
Wobei sollen wir dir helfen? Hunderte Zeilen C, C++ oder C#-Quelltext zu lesen und nach Delphi zu portieren?
Was hast du schon an Vorarbeit geleistet?`

Der von mir verlinkte C#-Quelltext sollte am Einfachsten nach Delphi zu portieren sein.
  Mit Zitat antworten Zitat
Rolf Frei

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

AW: PNG komprimieren

  Alt 24. Okt 2018, 12:56
Aber dann wäre ich doch genau da wo ich jetzt schon bin. Lies du mal meinen ersten Post durch
Ah, ja! Mir war so, als ob du eine externe Webanwendung ersetzen wolltest.

Warum willst du denn das externe Tool ersetzen? Wer bezahlt dir denn diese Zeit?
Es ist doch schon fertig (mehrfach!) als kleine Kommandozeilen-Exe verfügbar.
Du hast von vielen Seiten Beispiele für einen solchen Algorithmus.
Wobei sollen wir dir helfen? Hunderte Zeilen C, C++ oder C#-Quelltext zu lesen und nach Delphi zu portieren?
Was hast du schon an Vorarbeit geleistet?`

Der von mir verlinkte C#-Quelltext sollte am Einfachsten nach Delphi zu portieren sein.
Eigentlich hatte ich einfach gehofft, dass jemand das Problem selber schon gelöst hat oder eine Delphi Library kennt, die das kann. Mit der Protierung des C# Codes habe ich Probleme, da mir der Sprache C# nicht so geläufig ist. Werde es aber mal genauer anschauen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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