ColdFusion 2018给高分辨率图片加文字/水印后分辨率丢失如何解决
问题根因
你输出的图片分辨率下降是代码主动缩放导致的:你调用了ImageResize和ImageScaleToFit两个方法,将原高分辨率图强制缩放到了800*600尺寸,这是分辨率丢失的直接原因。
修正方案
- 移除所有主动缩放代码:删除
ImageResize(variables.dupImage,800,600);和ImageScaleToFit(variables.dupImage,800,600);两行,即可保留原图的原始分辨率。 - 自动适配文字参数:你原本使用的坐标、字体大小都是适配800*600尺寸的,可通过代码自动按原图比例换算,不需要手动计算数值。
- 后续叠加素材操作:如果后续要叠加电子签名、自定义图片素材,直接使用
ImagePaste方法即可,全程不调用缩放相关函数,就不会改变原图分辨率。 - 输出时配置质量参数:不管是输出到浏览器还是写入本地文件,都可以指定
quality=1参数,避免压缩导致的画质损失。
修正后代码示例
<cfoutput> <cfscript> variables.string = "test string"; // 直接读取原图,不做任何缩放操作 variables.dupImage = ImageNew("test.jpg"); ImageSetDrawingColor(variables.dupImage,"black"); variables.attributeCollect = {}; variables.attributeCollect["font"] = "arial"; // 字体大小按原图比例自动换算,保证显示比例符合预期 variables.attributeCollect["size"] = 17 * (ImageGetWidth(variables.dupImage)/800); variables.attributeCollect["style"] = "bold"; // 坐标按原图尺寸等比例自动换算 variables.posX = 115 * (ImageGetWidth(variables.dupImage)/800); variables.posY = 220 * (ImageGetHeight(variables.dupImage)/600); variables.dupImage.drawText(variables.string, variables.posX, variables.posY,variables.attributeCollect); </cfscript> </cfoutput> <!-- 输出到浏览器时指定最高质量 --> <cfimage source="#variables.dupImage#" action="writeToBrowser" quality="1">
内容的提问来源于stack exchange,提问作者Ginger
相关产品推荐
相关产品推荐

