上記の解決策を見つけました
<cfcontent variable="#toBinary(toBase64(img))#" type="image/png" reset="true" />
私にとってはうまくいきません。
type="image/png" の設定は、応答の MIME タイプを設定するだけです。必ずしも画像をPNGとしてエンコードしているとは思いません。そのため、透明なpng(画像タイプ「argb」)を生成すると、<cfimage action = "writeToBrowser"...>
方法と比較して奇妙な色が得られました。
どういうわけか、画像データを PNG として明示的にエンコードし、バイナリ データを直接出力する必要があると考えました。
基礎となるJavaを掘り下げて、これを思いつきました。これは、これまでのところうまくいくようです。
この例では、黒い円で透明な png を描画します。
<!--- 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())>
それが誰かを助けることを願っています!