Java实现 图片水印或者文字水印

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
在原图之上再画一张图片(drawImage)或者文本文字(drawString),Java SE中提供了 java.awt.image包和javax.imageio包可以实现非常方便的实现 图片水印或者文字水印。

1.图片水印

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.FileOutputStream;  
import java.io.OutputStream;  
import javax.imageio.ImageIO;  
import javax.swing.ImageIcon;  
  
/** 
 * 生成图片水印 
 * @author Ricky Fung 
 * 
 */  
public class WaterMarkIconTest {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        File srcImageFile = new File("D:/test/myblog.png");  
        File logoImageFile = new File("D:/test/logo.png");  
          
        File outputImageFile = new File("D:/test/myblog_water_icon.jpg");  
        File outputRoateImageFile = new File("D:/test/myblog_water_icon_rotate.jpg");  
          
        createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile);  
          
        createWaterMarkByIcon(srcImageFile, logoImageFile, outputRoateImageFile, 45);  
    }  
  
    public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile,  
            File outputImageFile) {  
        createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile, 0);  
    }  
  
    public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile,  
            File outputImageFile, double degree) {  
          
        OutputStream os = null;  
        try {  
            Image srcImg = ImageIO.read(srcImageFile);  
  
            BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),  
                    srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);  
  
            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);  
  
            ImageIcon logoImgIcon = new ImageIcon(ImageIO.read(logoImageFile));  
  
            Image logoImg = logoImgIcon.getImage();  
  
            //旋转  
            if (degree>0) {  
                g.rotate(Math.toRadians(degree),  
                        (double) buffImg.getWidth() / 2,  
                        (double) buffImg.getWidth() / 2);  
            }  
              
            float alpha = 0.8f; // 透明度  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,  
                    alpha));  
  
            //水印 的位置  
            g.drawImage(logoImg, buffImg.getWidth()/3, buffImg.getHeight()/2, null);  
  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));  
  
            g.dispose();  
  
            os = new FileOutputStream(outputImageFile);  
  
            // 生成图片  
            ImageIO.write(buffImg, "JPG", os);  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != os)  
                    os.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  
}  

2.文字水印

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.OutputStream;  
import javax.imageio.ImageIO;  
  
/** 
 * 生成文字水印 
 * @author Ricky Fung 
 * 
 */  
public class WaterMarkTextTest {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        File srcImgFile = new File("D:/test/myblog.png");  
        String logoText = "[ 水印文字 电话邦   ]";  
          
        File outputImageFile = new File("D:/test/myblog_water_text.jpg");  
          
        File outputRotateImageFile = new File("D:/test/myblog_water_text_rotate.jpg");  
  
        createWaterMarkByText(srcImgFile, logoText, outputImageFile);  
  
        createWaterMarkByText(srcImgFile, logoText, outputRotateImageFile, 45);  
    }  
  
      
    public static void createWaterMarkByText(File srcImgFile, String logoText,  
            File outputImageFile) {  
        createWaterMarkByText(srcImgFile, logoText, outputImageFile, 0);  
    }  
      
    public static void createWaterMarkByText(File srcImgFile, String logoText,  
            File outputImageFile, double degree) {  
          
        OutputStream os = null;  
        try {  
            Image srcImg = ImageIO.read(srcImgFile);  
  
            BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),  
                    srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);  
  
            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 (degree>0) {  
                g.rotate(Math.toRadians(degree),  
                        (double) buffImg.getWidth() / 2,  
                        (double) buffImg.getHeight() / 2);  
            }  
  
            g.setColor(Color.RED);  
  
            g.setFont(new Font("宋体", Font.BOLD, 36));  
  
            float alpha = 0.8f;  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,  
                    alpha));  
  
            g.drawString(logoText, buffImg.getWidth()/3, buffImg.getHeight()/2);  
  
            g.dispose();  
  
            os = new FileOutputStream(outputImageFile);  
  
            // 生成图片  
            ImageIO.write(buffImg, "JPG", os);  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != os)  
                    os.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  
}  

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:HtmlUnit示例代码

下一篇:Java加密解密DESUtil、TripleDESUtil