当前位置:编程学习 > JAVA >>

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

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( 
  &nb

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,