图像处理之添加图像水印
生活随笔
收集整理的這篇文章主要介紹了
图像处理之添加图像水印
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
常用的圖像加水印一般是在原圖上找一個位置將水印圖像置于上方,本質(zhì)上就是對兩幅圖像的疊加融合。這里提供兩種方式進行圖像加水印,一種是直接將水印圖像疊加在原圖指定位置,一種是將水印通過一定透明度與原圖指定位置像素進行融合。
當然在水印融合的同時需要考慮,指定位置疊加水印圖像時,水印圖像邊界不會超過原圖邊界。另外也可以使用本身帶有透明通道的圖像作為水印圖像,融合之后的圖像可以形成鏤空水印。
測試圖像:
水印圖像:
第一種方式實現(xiàn):
public BufferedImage waterMarkerWithLocation(BufferedImage srcImage,BufferedImage waterMarker,int x,int y) {int width = srcImage.getWidth();int height = srcImage.getHeight();BufferedImage resultImage = new BufferedImage(width, height, srcImage.getType());for(int i = 0; i < width;i++) {for(int j = 0; j < height;j++) {int rgb = srcImage.getRGB(i, j);if (i > x & i < (waterMarker.getWidth() + x) & j > y & j < (waterMarker.getHeight() + y)) {rgb = waterMarker.getRGB(i - x, j - y);}resultImage.setRGB(i, j, rgb);}}return resultImage;}效果:
第二種方式實現(xiàn):
public BufferedImage waterMarkerWithTransparent(BufferedImage srcImage,BufferedImage waterMarker,double transparent,int x,int y) {int width = srcImage.getWidth();int height = srcImage.getHeight();BufferedImage resultImage = new BufferedImage(width, height, srcImage.getType());for(int i = 0; i < width;i++) {for(int j = 0; j < height;j++) {int rgb = srcImage.getRGB(i, j);if (i > x & i < (waterMarker.getWidth() + x) & j > y & j < (waterMarker.getHeight() + y)) {int rgb1 = waterMarker.getRGB(i - x, j - y);double r = (rgb >> 16) & 0xff;double g = (rgb >> 8) & 0xff;double b = rgb & 0xff;double r1 = (rgb1 >> 16) & 0xff;double g1 = (rgb1 >> 8) & 0xff;double b1 = rgb1 & 0xff;r = (1 - transparent) * r + transparent * r1;g = (1 - transparent) * g + transparent * g1;b = (1 - transparent) * b + transparent * b1;rgb = (255 & 0xff) << 24 | (clamp((int)r) & 0xff) << 16 | (clamp((int)g) & 0xff) << 8 | (clamp((int)b) & 0xff);}resultImage.setRGB(i, j, rgb);}}return resultImage;}測試效果:
當透明度設(shè)置為0.5時
透明度0.2時:
?
總結(jié)
以上是生活随笔為你收集整理的图像处理之添加图像水印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理之双线性插值原理和实现
- 下一篇: 遥感应用基础