我将尝试将用户上传的任何图像转换为带有白色背景的jpg格式。然而,我注意到当用户上传包含透明度的PNG图像时,ColdFusion会破坏整个图像。它看起来几乎像是数字损坏。
因此,用户首先提供图像所在的URL,并使用
所以现在
最后一步是将它作为 jpg 文件写入服务器:
问题在于带透明度的PNG图像会完全被破坏。一个本应该有白色背景并且是一个清晰的JPG图像最终会变得很模糊,而且有黑色背景。这里有一个例子:
原始图像:
转换成JPG后:
如何解决这个问题?
因此,用户首先提供图像所在的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#" />
所以现在
UserImg
是用户想要上传的图像。接下来我们要设置抗锯齿,并且我也希望背景是白色,因为这个图像可能有一个透明的背景:<cfset ImageSetAntialiasing(UserImg, "on")>
<cfset ImageSetBackgroundColor(UserImg, "white")>
最后一步是将它作为 jpg 文件写入服务器:
<cfimage source="#UserImg#" action="write" destination="pathtoimages/userimage.jpg" overwrite="yes" format="jpg" />
问题在于带透明度的PNG图像会完全被破坏。一个本应该有白色背景并且是一个清晰的JPG图像最终会变得很模糊,而且有黑色背景。这里有一个例子:
原始图像:
![original png image](https://istack.dev59.com/Hpo29.webp)
![converted to jpg image](https://istack.dev59.com/P1SZ3.webp)