Bietet Image Magick eine Streaming-API?


1

Ich habe einen Node.js-Server (irrelevant), der die Bildbearbeitung mit ImageMagick ausführt. Grundsätzlich kann ich ein Image auf den Server POSTEN und es wird mit dem transformierten Image antworten.

Im Moment schreibe ich nur das POSTed-Image in eine Datei und starte ImageMagick als untergeordneten Prozess. Dabei wird das transformierte Image in eine neue Datei geschrieben und diese neue Datei an den POSTer gesendet. Ich möchte es vermeiden, auf die Festplatte zu schreiben, um die Dinge zu beschleunigen. Kann dieser ImageMagick-Prozess Streaming-Eingaben akzeptieren und mir einen Stream als Ausgabe geben?

Dies ist beispielsweise einer der kompliziertesten Befehle, die ich derzeit verwende:

/usr/local/opt/imagemagick/bin/convert \( '/Users/shawn/Work/vigour-img/originals/7ajy06' -resize '150x150^' -gravity 'Center' -crop '150x150+0+0' \) \( '/Users/shawn/Work/vigour-img/images/avatarMask.png' -resize '150x150' -gravity 'Center' \) -compose 'CopyOpacity' -composite '/Users/shawn/Work/vigour-img/out/1bl6jm9.png'

Das hängt davon ab /Users/shawn/Work/vigour-img/originals/7ajy06 und /Users/shawn/Work/vigour-img/images/avatarMask.png vorhanden auf Platte und schreibt das Ergebnis auf /Users/shawn/Work/vigour-img/out/1bl6jm9.png.

Wenn ich stattdessen die Eingabedateien streamen und das Ergebnis als Stream erhalten könnte, müsste ich nicht auf die Festplatte schreiben, was die Leistung erheblich verbessert (glaube ich).


Gute Frage, aber ... "... was die Leistung erheblich verbessert (glaube ich)." Das ist eine ziemlich große Annahme. Da ImageMagick die gesamte Verarbeitung im RAM durchführt, was passiert, wenn Unmengen von Anforderungen eingehen, ohne dass Speicherplatz für das Schreiben auf eine Festplatte frei wird? RAM wechselt dann auf Festplatte und dann ... Sechs von einem, ein halbes Dutzend von einem anderen. Aber es gibt eine stream Befehl im ImageMagick-Paket enthalten, das einige Aspekte dieses Prozesses unterstützen kann.
JakeGould

Ich weiß nicht, wie lange es dauert, in eine Datei zu schreiben, diese zu lesen und über http zu senden, als direkt in die http - Antwort zu schreiben ich benutze das stream Befehl, den Sie erwähnen). Das Schreiben in eine Datei oder in eine http - Antwort sollte so ziemlich dasselbe sein ... wie für die stream Befehl, es ist mir unklar, wie man es in meinem Fall verwendet. Ich werde mehr Zeit dafür aufwenden und Dinge ausprobieren müssen. Danke für den Tipp.
Shawn

Antworten:


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.