Wie schreibt man einen Bild-browser als binären Datenstrom in coldfusion?
Ich habe einen Dienst auf einem server, Coldfusion 9 erstellt image-Banner auf der fliege für uns. Eine separate Maschine speichern Sie diese Dateien mit so etwas wie:
wget http://myserver.com/services/local/bannerCreator/250x250-v3.cfm?prodID=3&percentSaving=19
Das problem ist, dass ich nicht denken kann, wie man coldfusion zu schreiben, die binäre Daten ohne die Verwendung einer temporären Datei. In der minute wird das Bild nur angezeigt, als ein image-tag, wie diesem:
<cfimage action = "writeToBrowser" source="#banner#" width="#banner.width#" height="#banner.height#" />
Irgendwelche Ideen? Oder sollte ich einfach eine temporäre Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nicht testen, weil Sie nicht die Angabe von Beispiel-code, wie Ihre Bilder entstehen, aber Sie haben versucht, etwas entlang dieser Linie?
Update: So ich ging voran und schuf mein eigenes Bild; ich nehme an, Sie tun etwas ähnliches. Dies funktioniert perfekt für mich:
Dies funktioniert ohne das schreiben auf die Datei, und ohne Verwendung eines virtual file system ("ramdisk")
true
, weiltrue
ist der Standardwert.Wenn Sie die Binär-bytes von einer Datei/Bild, können Sie ersetzen Sie den output-buffer mit Inhalt etwa so:
Ziemlich viel, was
<cfcontent>
tut, wenn Sie verwendenreset="true"
Der Vorteil dieser Methode gegenüber der
<cfcontent>
ist, dass wir schreiben es in unseren cfscript-Basis FCKW-frei.Fand ich die Lösung oben
nicht so Recht funktionieren bei mir.
Einstellung type="image/png" ist nur die Einstellung der mime-Typ der Antwort. Ich glaube nicht, dass es unbedingt Kodierung das Bild als PNG. Als solche erzeugen Sie ein transparentes png (Bild geben "argb") gab mir die ungerade Farben, die im Vergleich zu den
<cfimage action = "writeToBrowser"...>
Methode.Dachte ich, irgendwie musste ich explizit codieren der Bilddaten im PNG-und Ausgabe der Binär-Daten direkt.
Einige Graben um in der zugrunde liegenden java, ich kam mit dieser, die so weit scheint zu funktionieren für mich.
Diesem Beispiel wird ein transparentes png mit einem schwarzen Kreis.
Ich hoffe, das hilft jemand!
cfcontent
stellt nur dieContent-Type
- header (und Optional gibt den Inhalt einer Datei oder Variablen). Ist nicht soll, um den Inhalt zu ändern. Welchen code gab Sie "ungerade Farben im Vergleich zuwriteToBrowser
"?Nehmen Sie die Höhe und Breite Attribute und fügen Sie den format-Attribut:
wget zu Ehren sollte die Umleitung auf die physische Datei CF erstellt im CFFileServlet Ordner, aber wenn es nicht es ist ein flag, das man setzen kann, um es
--max-redirect=10
.Und wie Sie Sie vorschlagen, eine temporäre Datei würde auch funktionieren. Schreiben Sie einfach die Datei und verwenden Sie cfheader und cfcontent zu schreiben. So stellen Sie sicher, stellen Sie temp-file-name mehr einzigartig.
Ich das gleiche tun, und Sie brauchen, um zu kombinieren mit cfscript-tags und. Es gibt image-Funktionen, die erforderlich sind. Es gibt eine Menge von Bild-Funktionen zur Verfügung, sobald Sie ein Bild im Speicher als variable. Sie können das Bild in den Speicher, mit CFFILE oder CFHTTP oder eine Reihe von anderen Möglichkeiten.
In meinem Fall, lese ich eine Bilddatei in den Speicher mit CFIMAGE tag, dann manipulieren Sie mit CFSCRIPT-image-Funktionen durch das hinzufügen von text auf den Boden, dann die Ausgabe des resultierenden Bildes als .png (oder .jpg, wenn Sie bevorzugen) an den browser. Die einzige Datei auf dem server gespeichert, das original-Bild-Datei. In Ihrem Fall Lesen, anstatt in einem Bild würde man es mit einem cfhttp-tag, wie Sie bereits tun. Hier ist mein code:
Sehen Sie es in Aktion auf der http://hawkesburyradio.com.au/index.cfm?pid=111538
(Ich bin mit CF9 mit Windows Server )