在向大家详细介绍VB.NET水印类之前,首先让大家了解下水印技术,然后全面介绍VB.NET水印类。本文解释了如何创建一个VB.NET水印类(watermark)来实现使用一幅图像或文字在原图像上创造一幅水印图。本文提供一个水印的VB.NET应用程序及其完整的源代码和类文件,您可通过运行该程序更为清楚地认识图像水印技术。
图像水印技术是一门使用文字或一幅图像嵌入到另一幅图像,使得原图转换为覆盖图的技术。因为从覆盖图中移除水印是一件相当难的事情,需要很好的手工图像编辑能力,所以水印技术通常用于商标或版权的保护。不幸的是,微软的.net框架没有包含任何内置的动态运行图像水印的功能。
水印技术
VB.NET水印类(watermark)包含很多属性,可用于测定在原图像的哪个位置嵌入水印、使用哪种类型的水印(文字或图像)以及水印的精确信息等。
定义好utility 类之后,就可以构造我们的VB.NET水印类(watermark)。对于文字类型的水印,我们需要清楚使用什么文字及字体来创建这一水印。对于图像类型的水印,需要知道用于水印的图像的文件名。对于既包含文字又包含图像类型的水印,则需要知道原始图像文件的文件名和水印的位置。
因为所有需要的信息都在这些属性中已经设定好,所以主函数不需要其他的任何信息就可以创建一幅水印图像。程序将返回一个System.Drawing.Bitmap类型的实例。
水印程序在多线程环境下运行得非常理想。基于原图像和水印的程序可能占用很多的CPU运行时间。因此,将其放在后台运行,并将主程序放在前台执行可能会更好一点,这在水印程序是某一Web站点一部分的情况下尤为重要。例如,如果站点允许用户上传他们想要进行水印的图片时,我们需要一边继续运行网页的其余部分供用户使用,一边检测以确保水印图像已被创建。
水印的过程相当地简单。首先,我们创建一幅与原图大小相同的覆盖图,在需要的地方嵌入水印。水印可以是从一幅图片中加载,也可以是动态地创建想要的字体和文字。接着,检查覆盖图,搜索每一个像素点的颜色,显示其透明度。当我们找到一个像素点的颜色时,我们用其亮度值去创建一个乘法器。
这一乘法器系统可能使运行减慢,但是它能使水印图像随着原始图像色彩的改变而相应做出调整。同时,通过编辑源代码或者提供一个乘法器,我们就可以在与原始图像相同的像素点上设置与其原来颜色相应的颜色,但是这种颜色的红、绿、蓝分量都相应的乘上一个系数。因为这一系数是一个0-1之间的数,所以它将降低该像素点颜色的饱和度,使之呈现水印的效果。列表B包含了水印技术这一过程的主要处理代码。
下面代码值得注意,这是在创建像素点乘法器的时候使用到的。
- PixelMultiplier = 1 - CSng(((1 - WatermarkPixel.GetBrightness)) * 0.25)
改变这行代码中的最终值(0.25)可以调整水印的强度。乘以0.25,水印的饱和度就被限定为原来的0%-25%。也就是说,如果水印图像颜色较暗淡,水印的效果将不太明显,最暗的颜色只能显示原色彩25%的强度。这一值不能低于0.0(显示不出水印效果)也不能高于 1.0(使要出现水印的地方都呈现白色)。
通过测试,我们发现使该值维持在0.2-0.3之间效果***。当然,我们可以将它设定为一个常数值,也可以修改代码使之在运行时动态地设定其大小。
测试水印技术应用程序
水印程序可以用于动态网页,或者用于编辑图像以实现业目的。通过使用一个VB.NET水印类(watermark),我们可以很容易地将水印技术整合到我们的应用系统中。下载安装整个应用程序便能产生水印图像。应用程序安装同样包含该应用程序的所有源代码和所有图像水印的类文件。我们可以很轻松地使用这些代码,将它们整合到我们自己的工程文件中,并修改它使之更加符合我们的需要。
【编辑推荐】