我找到了上面的解决方案
<cfcontent variable="#toBinary(toBase64(img))#" type="image/png" reset="true" />
不太适合我。
设置 type="image/png" 只是设置响应的 mime 类型。我认为它不一定将图像编码为PNG。因此,与 <cfimage action = "writeToBrowser"...> 方法相比,生成透明 png(图像类型“argb”)给了我奇怪的颜色。
我想我需要以某种方式将图像数据显式编码为 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())>
希望对大家有所帮助!