he encontrado la solución anterior
<cfcontent variable="#toBinary(toBase64(img))#" type="image/png" reset="true" />
al trabajo no es para mí.
Tipo de configuración = "image/png" simplemente configura el tipo de mime de la respuesta. No creo que necesariamente esté codificando la imagen como PNG. Como tal, la generación de un png transparente (tipo de imagen "argb") me daba colores extraños, en comparación con el método <cfimage action = "writeToBrowser"...>
.
Pensé que de alguna manera tenía que codificar explícitamente los datos de imagen como PNG y enviar los datos binarios directamente.
Con un poco de excavación en el java subyacente, se me ocurrió esto, que hasta ahora parece funcionar para mí.
Este ejemplo dibuja un png transparente con un círculo negro.
<!--- create the image and draw it --->
<cfset img = ImageNew("", 23, 23, "argb")>
<cfset ImageSetDrawingColor(img, "black")>
<cfset ImageDrawOval(img, 0, 0, 21, 21, true)>
<!--- get the response object --->
<cfset response = getPageContext().getFusionContext().getResponse()>
<!--- set the response mime type --->
<cfset response.setHeader('Content-Type', 'image/png')>
<!--- get the underlying image data --->
<cfset bImage = ImageGetBufferedImage(img)>
<!--- get the magical object to do the png encoding --->
<cfset ImageIO = createObject("java", "javax.imageio.ImageIO")>
<!--- encode the image data as png and write it directly to the response stream --->
<cfset ImageIO.write(bImage, "png", response.getResponse().getOutputStream())>
Espero que ayude a alguien!
FYI: no hay necesidad de establecer explícitamente el atributo de reinicio a 'verdadera ', porque' true' es el valor predeterminado. –