ImageNew toBase64 编码问题与 ColdFusion 中的质量损失

Pro*_*eus 5 coldfusion coldfusion-9

一段时间以来,我一直在使用 toBase64() 问题。我希望有人能告诉我为什么 CF toBase64() 似乎丢失了一些东西,即在我的例子中它降低了图像的质量。

我有一个解决方案(请参阅下面的最后一个代码示例),但我讨厌不明白为什么并且很想解决这是 CF。

如果有人愿意运行下面的代码,您会发现在 toBase64 转换后图像质量很差。没什么大不了的,但编码后看起来不太好。如果你从来没有注意到,那就试试吧,你会明白我的意思。

有谁知道为什么,或者如何在 CF 中解决这个问题?

<!--- EXAMPLE 1 --->

<!--- GET IMAGE - --->
<cfset image = ImageNew("test.png")>
<!--- BEFORE GOOD--->
<cfimage action="writeToBrowser" source="#image#" >
 <cfset image = toBinary(toBase64(image)) />
 <!--- AFTER --->
<cfimage action="writeToBrowser" source="#image#" >
Run Code Online (Sandbox Code Playgroud)
<!--- Example 2 --->
<cfset image = ImageNew("test.png")>
<cfset FileWrite(expandPath('./converted.image'),toBinary(toBase64(image))) />
<!--- without any cfimage processing, the outputted file is a JPEG --->
Run Code Online (Sandbox Code Playgroud)


我的解决方案是使用一个 java 插件,一切似乎都很好,但出于某些原因,我不会进入这里,而不是我可以做的事情。

image = createObject("java","it.sauronsoftware.base64.Base64").encode(image);
 toBinary(image );
Run Code Online (Sandbox Code Playgroud)

上面代码的示例图像输出可以在这里找到:http : //i56.tinypic.com/29fwiq.png 首先是在 toBase64 之前,然后是之后,您可以看到在第二个输出上的 toBase64 函数之后图像质量有所下降.

更新:正如 Peter 所指出的,问题似乎在于 ImageObject 中的自动输出/转换代码为 toBase64 函数提供二进制输出进行编码。

更新我已将此作为 CF 9.0.1 中的错误提交,请投票支持错误 3177303 https://bugbase.adobe.com/index.cfm?event=bug&id=3177303

Hen*_*nry 3

使用toBase64(imageGetBlob(myImg))

请参阅:http ://blog.dkferguson.com/index.cfm/2010/4/27/All-your-base64-are-not-equal

  • 这适用于我的测试 - 似乎“ImageGetBlob”正确提取了 PNG 数据,因此“toBase64”然后转换了正确的数据。 (2认同)