Delphi-PRAXiS

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

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:

Redeemer 23. Okt 2018 20:09

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

Medium 24. Okt 2018 00:18

AW: PNG komprimieren
 
Zitat:

Zitat von Rolf Frei (Beitrag 1416426)
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.)

Rollo62 24. Okt 2018 06:13

AW: PNG komprimieren
 
PascalMagick müsste in alten und neuen Versionen funktionieren.
Oder per COM-Object einbinden, und die COM-Libraries vom Delphi Component-Wizard erzeugen lassen.

KodeZwerg 24. Okt 2018 07:04

AW: PNG komprimieren
 
Zitat:

Zitat von Redeemer (Beitrag 1416438)
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.

KodeZwerg 24. Okt 2018 07:49

AW: PNG komprimieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
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 :-]

TiGü 24. Okt 2018 08:20

AW: PNG komprimieren
 
Zitat:

Zitat von Rolf Frei (Beitrag 1416430)
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

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.

Rolf Frei 24. Okt 2018 11:07

AW: PNG komprimieren
 
Zitat:

Zitat von TiGü (Beitrag 1416470)
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 :-D

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. :thumb:

Rolf Frei 24. Okt 2018 11:17

AW: PNG komprimieren
 
Zitat:

Zitat von Medium (Beitrag 1416444)
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

TiGü 24. Okt 2018 11:30

AW: PNG komprimieren
 
Zitat:

Zitat von Rolf Frei (Beitrag 1416510)
Aber dann wäre ich doch genau da wo ich jetzt schon bin. Lies du mal meinen ersten Post durch :-D

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.

Rolf Frei 24. Okt 2018 11:56

AW: PNG komprimieren
 
Zitat:

Zitat von TiGü (Beitrag 1416519)
Zitat:

Zitat von Rolf Frei (Beitrag 1416510)
Aber dann wäre ich doch genau da wo ich jetzt schon bin. Lies du mal meinen ersten Post durch :-D

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.

Uwe Raabe 24. Okt 2018 12:16

AW: PNG komprimieren
 
Zitat:

Zitat von Rolf Frei (Beitrag 1416510)
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.

Offenbar gibt es von dem Tool auch eine embeddable library: https://github.com/ImageOptim/libimagequant

Damit kannst du das ja auch als DLL nutzen und wärst von der externen EXE weg. Eventuell lässt sich der dort verwendete C-Code ja auch leichter umsetzen - oder es findet sich jemand dafür.

TiGü 24. Okt 2018 12:18

AW: PNG komprimieren
 
Zitat:

Zitat von Rolf Frei (Beitrag 1416522)
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.

Man wächst mit seinen Aufgaben.
Außerdem sollte man als Softwareentwickler schon mehr als eine Programmiersprache zumindest lesen können.
C# ist aber einfach zu lesen und zu verstehen als bspw. reine C-Quelltexte, die hart alle Möglichkeiten der Zeigerschweinereien ausnutzen.

Eigentlich könntest du den Quelltext nehmen, stumpf die { } Klammern mit begin ersetzen, then zu den ifs hinzufügen, switch mit case of ersetzen und die inline Variablen im Delphi-Stil vor dem ersten Begin einer Methode definieren.
Dann ist schon ein Großteil des Quelltextes portiert und man kann sich um die Feinheiten kümmern, wo der Kompiler sagt: "Ne, so ist noch nicht rund!".

Rolf Frei 24. Okt 2018 12:34

AW: PNG komprimieren
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1416526)
Zitat:

Zitat von Rolf Frei (Beitrag 1416510)
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.

Offenbar gibt es von dem Tool auch eine embeddable library: https://github.com/ImageOptim/libimagequant

Damit kannst du das ja auch als DLL nutzen und wärst von der externen EXE weg. Eventuell lässt sich der dort verwendete C-Code ja auch leichter umsetzen - oder es findet sich jemand dafür.

Habe da aber leider keine DLL gefunden. Habe das auch schon angeschaut aber gleich wieder aufgegeben. Der Aufwand wird mir da zu gross. Werde vorerst mal weiter mit der exe arbeiten. Schade dass es hierzu (PNG-8 Konvertierung) keinen Delphi Code zu finden gibt.

Rolf Frei 24. Okt 2018 12:44

AW: PNG komprimieren
 
Zitat:

Zitat von TiGü (Beitrag 1416528)
Zitat:

Zitat von Rolf Frei (Beitrag 1416522)
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.

Man wächst mit seinen Aufgaben.
Außerdem sollte man als Softwareentwickler schon mehr als eine Programmiersprache zumindest lesen können.
C# ist aber einfach zu lesen und zu verstehen als bspw. reine C-Quelltexte, die hart alle Möglichkeiten der Zeigerschweinereien ausnutzen.

Eigentlich könntest du den Quelltext nehmen, stumpf die { } Klammern mit begin ersetzen, then zu den ifs hinzufügen, switch mit case of ersetzen und die inline Variablen im Delphi-Stil vor dem ersten Begin einer Methode definieren.
Dann ist schon ein Großteil des Quelltextes portiert und man kann sich um die Feinheiten kümmern, wo der Kompiler sagt: "Ne, so ist noch nicht rund!".

Ich kann den Code schon lesen, nur gibt es halt da viele Sachen, die mir nicht geläufig sind und bei denen ich dann viel Zeit verbrate um herauszufinden, wie man das in Delphi umsetzt und wie ich das dann noch mit TPNGImage in Einklang bringe. Der Aufwand ist es mir nicht wert und dann beleibe ich lieber vorerst mal bei der externen exe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 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