Я нашел решение выше
<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())>
Я надеюсь, что это поможет кому-то!
person
Ross Taylor
schedule
29.05.2012