`
haouziwefe
  • 浏览: 127549 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

根据明暗度分别加不同的水印

    博客分类:
  • java
阅读更多
     
package image;import java.awt.alphacomposite;import java.awt.color;import java.awt.font;import java.awt.graphics;import java.awt.graphics2d;import java.awt.image;import java.awt.image.bufferedimage;import java.awt.image.colormodel;import java.awt.image.pixelgrabber;import java.io.file;import java.io.fileoutputstream;import javax.imageio.imageio;import com.sun.image.codec.jpeg.jpegcodec;import com.sun.image.codec.jpeg.jpegimageencoder;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("f:\\a2.png", "a1.png",                "2.jpg", 520, 500, 900, 800, 0.5f, 50);        system.out.print("添加成功");    }}
 
 
0
3
分享到:
评论
2 楼 JetMah 2011-08-22  
MM,重新拍拍版吧
1 楼 corejava5 2011-08-22  
我表示看的很累,而且后面注释和源码连一起了

相关推荐

    java 处理图像的明暗度

    // 增加明暗度(这里假设增加50,可以根据需求调整) red += 50; green += 50; blue += 50; // 防止溢出,如果超过255,则设置为255 red = Math.min(255, red); green = Math.min(255, green); blue = Math...

    调节屏幕明暗度软件

    webplugin调节屏幕明暗度软件 快捷键失效时好用的屏幕明暗度软件

    Android音量明暗度

    在Android操作系统中,音量和明暗度是用户体验的重要组成部分,它们直接影响到用户与设备的交互方式和视觉舒适度。本文将深入探讨Android系统中的音量控制和屏幕明暗度调节,以及与手势操作的关联。 一、Android...

    屏幕明暗度调节器2011版.exe

    显示屏明暗度调节器,热键不好使的可以改换用这个

    基于BH1750的机动车遮阳板明暗度智能控制系统设计.pdf

    本文介绍了一种基于BH1750的机动车遮阳板明暗度智能控制系统的设计,旨在提高驾驶安全性,适应不同光线环境。该系统利用了LCD液晶屏的变光特性,通过实时监测外界光照强度,动态调整液晶屏的驱动电压,以改变遮阳板...

    照片自动变清晰工具[8月27日修正明暗度问题]【值得收藏!】

    照片自动变清晰工具[8月27日修正明暗度问题]【值得收藏!】 照片自动变清晰工具[8月27日修正明暗度问题]【值得收藏!】 软件名称:照片自动变清晰工具┊轻轻松松把暗淡的图片瞬间变的清晰┊绿色版 软件类型:国产...

    基于BH1750的机动车遮阳板明暗度智能控制系统设计.rar

    标题中的“基于BH1750的机动车遮阳板明暗度智能控制系统设计”涉及到一个汽车电子技术的应用,主要关注的是车内遮阳板的智能化控制。在这个系统中,BH1750是一款光强度传感器,用于检测环境光线的亮度,以此来调节...

    论文研究-基于小波变换的语音隐藏算法.pdf

    线性变化处理能改善由水印带来的对彩色图像明暗度的影响,同时利用一维Tent混沌的特性构成混沌二维置换网络,只需要一个初值,使算法更加简单。由实验结果表明该算法对JPEG压缩稳健,而对恶意操作敏感,同时水印提取...

    jquery实现图片灯箱明暗的遮罩效果

    根据提供的信息,我们需要详细说明使用jQuery实现图片灯箱明暗遮罩效果的知识点。由于文件内容不完整,我们将基于文件标题和描述的内容,推断可能的知识点。 1. jQuery技术概述: jQuery是一个快速、小巧、功能丰富...

    《摄影基础》拍摄光线概述.pptx

    光的明暗度随着光源的能量和距离改变,摄影师要学会根据光线的强弱调整拍摄策略。 其次,光的方向对照片的立体感和影调起着决定性作用。主要的光位有顺光、侧光和逆光,它们分别呈现不同的视觉效果。顺光使物体明亮...

    Photoshop在海报设计中的作用-计算机应用技术毕业论文.doc

    例如,Photoshop 软件可以对图像进行编辑、加工和处理,调整图像的颜色、对比度和明暗度等,使图像更加生动和吸引人。 3. Photoshop 在海报设计中的作用 Photoshop 软件在海报设计中可以发挥以下几个方面的作用: ...

    三星打印机加墨后清零方法

    - **步骤一**:对于4100型号的打印机,进入“菜单”,选择“明暗度”,通过左右键调整,最后按下“确认”键。此操作适用于解决打印时放大后缩小不了的问题,或者使用一段时间后边缘缺失过多的情况。 - **步骤二**...

    三维重建综述

    SFS 方法还要基于三个假设:反射模型为朗伯特模型,即从各个角度观察,同一点的明暗度都相同的;光源为无限远处点光源;成像关系为正交投影。 光度立体视觉(Photometric Stereo) 光度立体视觉方法通过多个不共线的...

    液晶显示器亮暗度调节软件下载

    "液晶显示器亮暗度调节软件"是一种专门针对LCD显示器设计的应用程序,它的主要功能就是允许用户自由地调整屏幕亮度。在日常使用中,显示器的亮度调节是非常重要的,因为合适的亮度不仅有助于保护视力,还可以提高...

    Android程序开发之动态设置ImageView的亮度

    在Android程序开发中,我们经常需要对UI元素进行各种自定义操作,以满足不同场景的需求。其中,调整ImageView的亮度是提升用户体验的一个重要方面。本文将深入探讨如何在Android中动态地设置ImageView的亮度。 首先...

    信息时代如何提高师生的信息素养.pdf

    此外,色彩的纯度和明暗度也能激发不同的情感联想,高纯度色彩显得华丽,低纯度则显得朴素。 【产品功能与色彩情感】在产品设计中,色彩被用来增强功能的表达和理解。如冰箱通常采用冷色调,暗示其制冷功能;闹钟的...

    VC图像的亮度处理

    其中,`brightness_value`是你想要增加或减少的亮度值,`new_pixel`和`old_pixel`分别是调整后和调整前的像素值。需要注意的是,如果新的像素值超过了255(对于8位图像),应将其截断到255,低于0则截断到0,以保持...

    ps中的颜色原理解读.docx

    亮度就是各种颜色的图形原色(如 RGB 图像的原色为 R、G、B 三种或各种自的色相)的明暗度,亮度调整也就是明暗度的调整。 亮度范围从 0 到 255,共分为 256 个等级。而我们通常讲的灰度图像,就是在纯白色和纯黑色...

    AUTO LEVEL:自动调整图像的亮度和颜色-matlab开发

    亮度是图像中像素的明暗程度,它决定了图像的整体明暗感觉。而颜色则由色度和饱和度两部分构成。色度是指颜色的位置,通常用色轮上的角度来表示,它代表了颜色的基本属性,如红色、蓝色或绿色。饱和度则是指颜色的...

Global site tag (gtag.js) - Google Analytics