vol*_*one 4 coldfusion image coldfusion-11
我正在尝试将用户上传的任何图像转换为具有白色背景的jpg格式.但是,我注意到当用户上传包含透明度的PNG图像时,ColdFusion会破坏整个图像.它几乎看起来像数字腐败正在发生.
因此,用户首先提供图像所在位置的URL,并cfhttp用于读取它:
<cfhttp url="http://pathtoimage/image.png" method="get" useragent="#CGI.http_user_agent#" getasbinary="yes" result="PageResult">
<cfimage name="UserImg" source="#PageResult.FileContent#" />
Run Code Online (Sandbox Code Playgroud)
所以现在UserImg是用户想要上传的图像.接下来我们按照惯例设置抗锯齿,我也希望背景为白色,因为图像可以具有透明背景:
<cfset ImageSetAntialiasing(UserImg, "on")>
<cfset ImageSetBackgroundColor(UserImg, "white")>
Run Code Online (Sandbox Code Playgroud)
最后一步是将其作为jpg文件写入服务器:
<cfimage source="#UserImg#" action="write" destination="pathtoimages/userimage.jpg" overwrite="yes" format="jpg" />
Run Code Online (Sandbox Code Playgroud)
问题是具有透明度的PNG图像完全毁了.什么应该有一个白色的背景,并成为一个明确的jpg图像最终所有块状与黑色背景.这是一个例子:
我该如何解决这个问题?
ImageSetBackgroundColor在该代码中无效.根据文档:
设置ColdFusion图像的背景颜色.背景颜色用于清除区域.设置背景颜色仅影响后续的ImageClearRect调用.
由于标准jpeg不支持透明度,因此当图像保存为jpeg时,部分透明区域基本上会转换为黑色.
相反,尝试将透明PNG粘贴到具有白色背景的新图像上.然后对新图像进行转换.
<!--- use "rgb" to make background opaque --->
<cfset UserImgCopy = ImageNew("", UserImg.Width, UserImg.Height, "rgb", "white")>
<cfset ImagePaste(UserImgCopy, UserImg, 0, 0)>
<cfset ImageWrite(UserImgCopy, "c:\path\userimage.jpg", true)>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |