今天在为网站做一个小小的添加水印功能,使用的是AspJpeg组件,发现了一个令人苦恼的问题,无论水印图片是透明GIF还是透明PNG,所生成的图片水印后面总是有一层白色的背景。
百度了半天终于找到了答案,原因不是水印图片的问题,而是用错了组件方法:
常规方法:
'...代码省略
ogvbox.drawimage ogvbox.width-sy_width, ogvbox.height-sy_height, logobox, 0.8
ogvbox.canvas.bar 0, 0, ogvbox.width, ogvbox.height
使用上述方法无论如何也不能生成透明水印
改用下面的语句代替:
ogvbox.canvas.drawpng ogvbox.width-sy_width-20, ogvbox.height-sy_height-10, server.mappath(sy_path)
关键就是ogvbox.drawimage和ogvbox.canvas.drawpng。
网上关于AspJpeg的中文使用说明非常少,我估计ogvbox.canvas.drawpng可能是专门针对PNG格式的图片处理。
好了,透明水印问题解决了,又出现了个新问题,水印图片对比原图,质量下降了很多,模糊不清~
继续百度,找到了问题的关键,ogvbox.quality 原来这个属性用来控制保存图片的质量,经过测试,默认情况下该值为80,将其设置高点,ogvbox.quality = 90,生成后的图片质量和原图对比,基本上没有差别,为什么不设置为100?岂不是更好吗,起初我也这么想,后来试了一下,若设置为100,生成后的图片相比原图,文件大小增加了1倍,原来的图片232K,生成后的图片居然达到了527K,对于WEB传输来讲,这显然是不划算的了。
关键代码:
'使用drawpng 方法设置透明图片水印,后面的属性依次为:水印图片相对原图片的x坐标,y坐标,水印图片绝对路径
ogvbox.canvas.drawpng ogvbox.width-sy_width-20, ogvbox.height-sy_height-10, server.mappath(sy_path)
'设置输出图片的质量,范围0-100,建议90
ogvbox.quality = 90
'保存图片
ogvbox.save server.mappath(image)
效果还行~