`
sunbin
  • 浏览: 352605 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

图片添加水印

J# 
阅读更多

 

public class WaterMark {  
 
    /** 
     * 获取指定矩形中的像素的矩阵 
     *  
     * @param imageSrc 
     * @param startX 
     * @param startY 
     * @param w 
     * @param h 
     * @return 
     */ 
    private int[] getPixArray(Image imageSrc, int startX, int startY,  
            int w, int h) {  
        int[] pix = new int[(w - startX) * (h - startY)];  
          
        /*下面是别人程序中的一段,我实在不明白为何要加这一段,因为我去掉也没有问题,加上还会报错*/ 
        PixelGrabber pg = null;  
        try {  
            pg = new PixelGrabber(imageSrc, startX, startY, w-startX, h-startY, pix, 0, w);  
            if (pg.grabPixels() != true) {  
                try {  
                    throw new java.awt.AWTException("pg error" + pg.status());  
                } catch (Exception eq) {  
                    eq.printStackTrace();  
                }  
            }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        return pix;  
    }  
 
    /** 
     * 将1张图片和另1张图片的指定区域重合。可用于制作水印。图片的左上角坐标为0,0 
     *  
     * @param lightnessWaterImg 
     *            颜色比较亮的水印图片,适合底色比较暗的情况 
     * @param darknessWaterImg 
     *            颜色比较暗的水印图片,适合底色比较亮的情况,如果不想区分,则输入null,平均灰度边界同时失效。 
     * @param targetImg 
     *            源图片 
     * @param startX 
     * @param startY 
     * @param x 
     * @param y 
     * @param alpha 
     *            透明度,0f为全透明,1f为完全不透明,0.5f为半透明 
     * @param averageGray 
     *            平均灰度边界(0-255),大于此值,则打暗的水印图片,小于此值则打亮的水印图片。 
     *            默认值128。超过范围,按默认值进行。 
     */ 
    private final void pressImage(String lightnessWaterImg,  
            String darknessWaterImg, String targetImg, int startX, int startY,  
            int x, int y, float alpha, float averageGray) {  
        try {  
            // 先判断亮水印和源文件的值是否为null,否则抛出异常  
            if (lightnessWaterImg == null || lightnessWaterImg == "" 
                    || targetImg == null || targetImg == "") {  
                throw new Exception("亮水印或者源图片的地址不能为空");  
            }   
            // 再判断平均灰度边界是否越界  
            if (averageGray>255||averageGray<0) {  
                averageGray = 128;  
            }  
              
 
            // 装载源图片  
            File _file = new File(targetImg);  
            // 图片装入内存  
            BufferedImage src = ImageIO.read(_file);  
            // 获取图片的尺寸  
            int width = src.getWidth(null);  
            int height = src.getHeight(null);  
            // 根据源图片尺寸,设置预装载的一个图片,默认是RGB格式的  
            BufferedImage image = new BufferedImage(width, height,  
                    BufferedImage.TYPE_INT_RGB);  
            Graphics2D graphics = image.createGraphics();  
            // 绘制内存中的源图片至指定的矩形内  
            graphics.drawImage(src, 0, 0, width, height, null);  
            // 在已经绘制的图片中加入透明度通道  
            graphics.setComposite(AlphaComposite.getInstance(  
                    AlphaComposite.SRC_ATOP, alpha));  
              
 
            // 获取源图片中和设定的同样大小的区域内的像素集合  
            int[] pixels = getPixArray(src, startX, startY, x, y);  
 
            //查询此集合的平均灰度  
            float average = getAverageGrap(x-startX,y-startY,pixels);  
 
            // 如果平均灰度大于130,则说明此区域比较亮,否则则比较暗  
            System.out.println(average);  
 
              
            //装载水印图片所需参数  
            File water;  
            BufferedImage bufferwater;  
              
            // 根据设定的平均灰度边界来装载不同的水印  
            if (darknessWaterImg == null||average>=averageGray) {  
                // 装载亮水印文件  
                water = new File(darknessWaterImg);  
            }else{  
                // 装载暗水印文件  
                water = new File(lightnessWaterImg);  
            }  
            // 装入内存  
            bufferwater = ImageIO.read(water);  
                          
            graphics.drawImage(bufferwater, startX, startY, x, y,  
                    null);  
            // 水印文件结束  
            graphics.dispose();  
            FileOutputStream out = new FileOutputStream(targetImg);  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            // 绘制新的文件  
            encoder.encode(image);  
            out.close();  
              
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
          
    /** 
     * 查询某个区域的平均灰度 
     * @param width 
     * @param height 
     * @param pixels 
     * @return 
     */ 
    private float getAverageGrap(int width,int height,int[] pixels){  
        /* 下面是开始算这个区域的亮度了,灰度等同于亮度 */ 
        ColorModel colorModel = ColorModel.getRGBdefault();  
        int i = 0;  
        int j = 0;  
        int k = 0;  
        int r = 0;  
        int g = 0;  
        int b = 0;  
        int gray = 0;  
        float average = 0;// 平均灰度  
        for (i = 0; i < height; i++) {  
            for (j = 0; j < width; j++) {  
                // 定位像素点  
                k = i * width + j;  
                r = colorModel.getRed(pixels[k]);  
                g = colorModel.getGreen(pixels[k]);  
                b = colorModel.getBlue(pixels[k]);  
 
                // 计算灰度值  
                gray = (r * 38 + g * 75 + b * 15) >> 7;  
 
                average = average + gray;  
            }  
        }  
        // 计算平均灰度  
        average = average / ((i - 1) * (j - 1));  
        return average;  
    }  
    public static void main(String[] args) {  
        WaterMark waterMark = new WaterMark();  
 
        waterMark.pressImage("d:\\aa.png", "d:\\aa.png",  
                "d:\\2.jpg", 520, 500, 900, 800, 0.5f, 50);  
        System.out.print("添加成功");  
    }  
 

分享到:
评论

相关推荐

    C# 图片添加水印(图片或者文字)

    在C#编程中,添加水印到图片...总之,C#结合WPF为图片添加水印提供了一种强大而灵活的方法,无论是图片还是文字水印,都可以轻松实现。通过创建DEMO并运行代码,你可以进一步熟悉这个过程,并将其应用到自己的项目中。

    易语言图片加水印

    在“易语言图片加水印”这个主题中,我们主要探讨如何利用易语言来实现对图片添加水印的功能。水印通常用于保护版权,或者为图像增添个性化的标识。 首先,我们要理解什么是水印。水印是图片处理中的一个常见概念,...

    java给图片添加水印

    在Java编程语言中,给图片添加水印是一项常见的任务,特别是在网站开发中,为了保护版权或者标识来源,经常需要在用户上传的图片上添加特定的文字或图像水印。以下将详细讲解如何使用Java来实现这一功能。 首先,...

    springboot实现上传图片添加水印

    接下来,我们需要处理图片添加水印的逻辑。这个过程通常包括读取图片,生成水印(可以是文本或图像),然后将水印合并到原始图片上。在Java中,我们可以使用Java Advanced Imaging (JAI)库或者更现代的ImageMagick的...

    java图片加水印(适应铺满)

    开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我

    QT给图片加水印(pro工程+代码)

    QT给图片加水印是一种常见的图像处理操作,用于在图片上添加标识或版权信息,防止未经授权的使用。本文将深入探讨如何使用Qt框架实现这一功能,包括必要的编程知识和步骤。 首先,Qt是一个跨平台的应用程序开发框架...

    delphi实现给图片加水印2用ImageEn控件

    ### Delphi 实现给图片添加水印:使用 ImageEn 控件 #### 背景介绍 在 Delphi 开发环境中,实现对图像处理的需求时,经常会遇到需要为图片添加水印的情况。添加水印不仅可以保护图片版权,还能提高品牌识别度。本文...

    html2canvas 网页对图片加水印

    在这个过程中,我们可以利用它来实现网页对图片添加水印的功能。 水印在各种领域中都有广泛的应用,例如版权保护、品牌宣传或个性化定制。在网页上对图片添加水印,通常是为了防止图片被未经授权的用户盗用,或者...

    PHP为原图片添加水印图片

    使用PHP,为图片添加水印图片。 缩放源水印图片,使其最大宽/高度不能超过原图片。

    winform 图片加水印文字和水印图片

    总的来说,这个WinForm应用提供了一个方便的工具,可以对图片进行多种操作,如加水印(文字和图片)、等比例缩放和压缩,这对于日常需要处理图片的工作非常实用。通过理解并应用GDI+的图形处理技术,开发者可以...

    给图片加水印

    在IT领域,为图片添加水印是一项常见的任务,主要用于保护版权、标识出处或者增强视觉效果。VB(Visual Basic)是一种由微软开发的编程环境,它提供了简单易用的图形用户界面(GUI)创建工具和丰富的功能,使得创建...

    Winform图片加水印

    本教程将详细介绍如何在Winform应用中为图片添加水印,包括图片水印和文字水印,并允许调整水印的透明度和文字字体。 首先,我们需要了解Winform中的图像处理基本概念。`System.Drawing`命名空间提供了处理图像所需...

    易优批量图片加水印插件

    易优批量图片加水印插件是一款针对易优CMS(EyouCMS)设计的专业插件,主要用于提升网站的用户体验和优化网页加载速度。在互联网环境中,网页加载速度是影响用户体验的关键因素之一,尤其是当页面中包含大量图片时,...

    java图片加水印工具类

    6. **批量处理**:为了提高效率,工具类可能还支持一次性为多个图片添加水印,这对于处理大量图片非常有用。 7. **性能优化**:高效的操作方式,如使用缓冲流(BufferedImage)处理图像,可以减少内存消耗并提高...

    C#实现图片加水印

    在C#编程中,给图片添加水印是一项常见的任务,特别是在设计、品牌保护或网站开发中。水印可以是文字、图像或者图形,用于表明所有权、版权信息或为图片增加额外的视觉元素。本篇文章将深入探讨如何使用C#来实现这一...

    微信小程序用Canvas给图片加水印,拼接图片,制作名片PHelper-master.zip

    1. **给图片加水印**: 在这个项目中,开发者可能会使用`wx.createSelectorQuery()`来选取Canvas元素,然后通过`canvasContext.drawImage()`方法加载图片并将其绘制到Canvas上。接着,利用`canvasContext....

    Java为图片添加水印功能.rar

    Java为图片添加水印功能,这个水印类的操作比较实用,不但可以旋转水印图像,还可设置其水印图片的透明度,使其与原图融为一体,给图片添加水印,可以设置图片水印的角度,设置对线段的锯齿状边缘处理,第一参数-&gt;...

    给一张图片加 水印(源代码)

    在IT行业中,为图片添加水印是一项常见的任务,主要用于保护版权、标识品牌或者增强视觉效果。这个主题的标题“给一张图片加水印(源代码)”表明我们将探讨如何通过编程实现这一功能。描述中提到的“含源代码”意味...

    图片加水印小工具绿色版

    【图片加水印小工具绿色版】是一款便捷的软件,专为用户设计,用于在图片上添加水印,以保护版权或进行个性化定制。这款工具因其便携式特性,无需安装即可直接运行,大大简化了用户的操作流程。下面将详细介绍这款...

    Vb图片加水印组件.rar

    在VB(Visual Basic)编程环境中,为图片添加水印是一项常见的需求,这通常用于保护版权或者增加品牌标识。"Vb图片加水印组件.rar" 提供了一个实用的技术方案,帮助开发者实现这一功能。该组件使得在图片上叠加图片...

Global site tag (gtag.js) - Google Analytics