java.imageIo给添加水印

    添加时间:2013-7-2 点击量:

    比来项目在做一个商城项目, 项目上的要添加水印①,添加水印;②:添加文字水印;


    一下供给下个办法,大师可以用得着:



    package com.blogs.image;
    

    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.RenderingHints;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;

    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;

    /
    水印
    /
    public class ImageUtil {

    /
    @param args
    /
    public static void main(String[] args) {
    String srcImgPath
    = e:/2.png;
    String iconPath
    = e:\\logo.jpg;
    String targerPath
    = e:/3.jpg;
    // 给添加水印
    ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targerPath, 0, 0
    0, 0.1f);
    // 给添加水印,水印扭转-45
    // ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
    // targerPath2, -45);

    }

    /
    给添加水印、可设置水印扭转角度

    @param iconPath
    水印路径
    @param srcImgPath
    源路径
    @param targerPath
    目标路径
    @param degree
    水印扭转角度
    @param width
    宽度(与左比拟)
    @param height
    高度(与顶比拟)
    @param clarity
    透明度(小于1的数)越接近0越透明
    /
    public static void waterMarkImageByIcon(String iconPath, String srcImgPath,
    String targerPath, Integer degree, Integer width, Integer height,
    float clarity) {
    OutputStream os
    = null;
    try {
    Image srcImg
    = ImageIO.read(new File(srcImgPath));

    System.out.println(
    width: + srcImg.getWidth(null));
    System.out.println(
    height: + srcImg.getHeight(null));

    BufferedImage buffImg
    = new BufferedImage(srcImg.getWidth(null),
    srcImg.getHeight(
    null), BufferedImage.TYPE_INT_RGB);
    // 获得画笔对象
    // Graphics g= buffImg.getGraphics();
    Graphics2D g = buffImg.createGraphics();
    // 设置对线段的锯齿状边沿处理惩罚
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(
    srcImg.getScaledInstance(srcImg.getWidth(
    null),
    srcImg.getHeight(
    null), Image.SCALE_SMOOTH), 0, 0
    null);
    ifnull != degree) {
    // 设置水印扭转
    g.rotate(Math.toRadians(degree),
    double) buffImg.getWidth() / 2
    double) buffImg.getHeight() / 2);
    }

    // 水印图象的路径 水印一般为gif或者png的,如许可设置透明度
    ImageIcon imgIcon = new ImageIcon(iconPath);
    // 获得Image对象。
    Image img = imgIcon.getImage();
    float alpha = clarity; // 透明度
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
    alpha));

    // 默示水印的地位
    g.drawImage(img, width, height, null);
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
    g.dispose();
    os
    = new FileOutputStream(targerPath);
    // 生成
    ImageIO.write(buffImg, JPG, os);
    System.out.println(
    添加水印完成!);
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    finally {
    try {
    ifnull != os)
    os.close();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    /
    给添加水印、可设置水印扭转角度

    @param logoText
    水印文字
    @param srcImgPath
    源路径
    @param targerPath
    目标路径
    @param degree
    水印扭转角度
    @param width
    宽度(与左比拟)
    @param height
    高度(与顶比拟)
    @param clarity
    透明度(小于1的数)越接近0越透明
    /
    public static void waterMarkByText(String logoText, String srcImgPath,
    String targerPath, Integer degree, Integer width, Integer height,
    Float clarity) {
    // 主的路径
    InputStream is = null;
    OutputStream os
    = null;
    try {
    Image srcImg
    = ImageIO.read(new File(srcImgPath));

    BufferedImage buffImg
    = new BufferedImage(srcImg.getWidth(null),
    srcImg.getHeight(
    null), BufferedImage.TYPE_INT_RGB);

    // 获得画笔对象
    // Graphics g= buffImg.getGraphics();
    Graphics2D g = buffImg.createGraphics();

    // 设置对线段的锯齿状边沿处理惩罚
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);

    g.drawImage(
    srcImg.getScaledInstance(srcImg.getWidth(
    null),
    srcImg.getHeight(
    null), Image.SCALE_SMOOTH), 0, 0
    null);

    ifnull != degree) {
    // 设置水印扭转
    g.rotate(Math.toRadians(degree),
    double) buffImg.getWidth() / 2
    double) buffImg.getHeight() / 2);
    }

    // 设置色彩
    g.setColor(Color.red);

    // 设置 Font
    g.setFont(new Font(宋体, Font.BOLD, 30));

    float alpha = clarity;
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
    alpha));

    // 第一参数->设置的内容,后面两个参数->文字在上的坐标地位(x,y) .
    g.drawString(logoText, width, height);

    g.dispose();

    os
    = new FileOutputStream(targerPath);

    // 生成
    ImageIO.write(buffImg, JPG, os);

    System.out.println(
    添加水印文字完成!);
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    finally {
    try {
    ifnull != is)
    is.close();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    try {
    ifnull != os)
    os.close();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }


     还有一个缩放代码:



        /
    
    缩放(等比例缩放为指定大小,空白项目组以白色填充)

    @param srcPath
    源路径
    @param destPath
    缩放后路径
    /
    public static void zoomImage(String srcPath, String destPath, int destHeight, int destWidth) {
    try {
    BufferedImage srcBufferedImage
    = ImageIO.read(new File(srcPath));
    int imgWidth = destWidth;
    int imgHeight = destHeight;
    int srcWidth = srcBufferedImage.getWidth();
    int srcHeight = srcBufferedImage.getHeight();
    if (srcHeight >= srcWidth) {
    imgWidth
    = (int) Math.round(((destHeight 1.0 / srcHeight) srcWidth));
    }
    else {
    imgHeight
    = (int) Math.round(((destWidth 1.0 / srcWidth) srcHeight));
    }
    BufferedImage destBufferedImage
    = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics2D
    = destBufferedImage.createGraphics();
    graphics2D.setBackground(Color.WHITE);
    graphics2D.clearRect(
    0, 0, destWidth, destHeight);
    graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth
    / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
    graphics2D.dispose();
    ImageIO.write(destBufferedImage,
    JPEG, new File(destPath));
    }
    catch (IOException e) {
    e.printStackTrace();
    }
    }


    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: