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

Java实现给图片添加水印

查了资料小试下来发现java实现水印还是非常方便的,水印可以是图片或者文字,而且还可以选择不同的角度旋转呢,以后有需要可以写个代码批量处理自己的图片了。
 
本门目录:
图片水印
文字水印
[一]、图片水印
 
Java代码 
package michael.io.image; 
 
import java.awt.AlphaComposite; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
 
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGImageDecoder; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 
 
/**
 * 图片水印
 * @blog http://sjsky.iteye.com
 * @author Michael
 */ 
public class ImageMarkLogoByIcon { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        String srcImgPath = "d:/test/michael/myblog_01.png"; 
        String iconPath = "d:/test/michael/blog_logo.png"; 
        String targerPath = "d:/test/michael/img_mark_icon.jpg"; 
        String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg"; 
        // 给图片添加水印 
        ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath); 
        // 给图片添加水印,水印旋转-45 
        ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2, 
                -45); 
 
    } 
 
    /**
     * 给图片添加水印
     * @param iconPath 水印图片路径
     * @param srcImgPath 源图片路径
     * @param targerPath 目标图片路径
     */ 
    public static void markImageByIcon(String iconPath, String srcImgPath, 
            String targerPath) { 
        markImageByIcon(iconPath, srcImgPath, targerPath, null); 
    } 
 
    /**
     * 给图片添加水印、可设置水印图片旋转角度
     * @param iconPath 水印图片路径
     * @param srcImgPath 源图片路径
     * @param targerPath 目标图片路径
     * @param degree 水印图片旋转角度
     */ 
    public static void markImageByIcon(String iconPath, String srcImgPath, 
            String targerPath, Integer degree) { 
        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); 
 
            if (null != 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 = 0.5f; // 透明度 
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 
                    alpha)); 
 
            // 表示水印图片的位置 
            g.drawImage(img, 150, 300, null); 
 
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); 
 
            g.dispose(); 
 
            os = new FileOutputStream(targerPath); 
 
&n

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,