Wie mache ich ein Array zu einem png?

...komplette Frage anzeigen

4 Antworten

Und wo ist jetzt dein Problem? Der PNG-Standard ist doch offen und kann von jedem eingesehen und nachprogrammiert werden.

https://www.w3.org/TR/PNG/

Wenn ich das grob überschaue, dann heißt das, dass du die Magic Number am Anfang einsetzen musst, dann die beiden Kompressionsstufen (sprich: Filtering und Deflate) über deine Rohdaten jagen und die dann abspeichern musst. Bei Bedarf kannst du mit einem Hex-Editor mal in ein einfaches .png reingucken, wie das aussieht. Ob PNG dafür überhaupt so optimal ist, wäre noch die nächste Frage, bei Bildern mit nur 10^4 Pixeln (und dementsprechend maximal möglichen Farbwerten) kann man möglicherweise mit den JPEG-Verlusten leben. Aber auch der JPEG-Standard ist offen einsehbar.

Performance-technisch ist deine Idee, das mit node zu machen, wahrscheinlich auch eher nicht so optimal. Obwohl die V8 schon verdammt schnell ist, zieht sie gegen eine gut programmierte C-Library sehr wahrscheinlich den Kürzeren, zumal ein guter Programmierer nicht versucht, das Rad ständig neu zu erfinden und zu denken, er könne gegen ein Programm, auf das schon viele kluge Informatiker und Mathematiker raufgeguckt haben, anstinken. Dunning-Kruger in Reinform.

Egal, auf alle Fälle solltest du mit deinem Ansatz eine gute Caching-Strategie in der Hinterhand haben. Aus der Beschreibung würde ich mal vermuten, dass schon dein ganzer Ansatz verkehrt ist und du die Daten entweder anders aufbereiten oder anders laden/anzeigen musst.

AndreasWinkler 04.07.2017, 23:58

Danke ;) ich mach es jetzt mit einer C Library. Tatsächlich muss es PNG sein da es verlustfrei sein muss.

0

Mit den GD- und Image-Funktionen von PHP und imagesetpixel ist das vom Prinzip kein Ding:

http://php.net/manual/de/function.imagesetpixel.php

Allzu performant wird das nicht sein aber wenn du nur „gelegentlich“ Bilder erzeugen willst, geht das mit wenigen Zeilen Quellcode.

AndreasWinkler 04.07.2017, 19:10

Ja PHP würde ich eh nicht benutzen wollen. Es werden am Ende wahrscheinlich hunderte 100x100px Bilder pro Sekunde gerendert werden also spielt Performance eine Riesige Rolle.

0
Babelfish 04.07.2017, 19:16
@AndreasWinkler

Na ja, du hattest halt PHP mit bei deinen Themen angegeben :-/

Sind das immer unterschiedliche PNGs? Wenn nicht, kannst du die ja cachen. Ansonsten kommst du mit NodeJS auch nicht weit, weil das nicht performanter als PHP ist.

1
AndreasWinkler 04.07.2017, 19:04

Ich möchte eigentlich keine Librarys verwenden. Eher würde ich meine eigene Schreiben. Danke Trotzdem, wenn ich keinen besseren Weg finde gucke ich es mir an :)

0
RIDDICC 04.07.2017, 19:35
@AndreasWinkler

lol

rohe RGB Daten in ein PNG zu verwandeln, ist zwar eine schöne Programmier-Arbeit, aber auch sehr aufwändig und fehlerträchtig... :)

1

Was möchtest Du wissen?