Java為圖片加水印的代碼

cp66 9年前發布 | 9K 次閱讀 Java

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;

/***

  • Description: 圖片水印工具類
  • Copyright: Copyright (c) 2011
  • Company: Founder
  • Project: CMS
  • @Author taoxg
  • @version 1.0
  • @See
  • HISTORY 2011-9-27 taoxg create **/ public class ImageMarkLogoUtil {

    // 水印透明度 private static float alpha = 0.5f; // 水印橫向位置 private static int positionWidth = 150; // 水印縱向位置 private static int positionHeight = 300; // 水印文字字體 private static Font font = new Font("宋體", Font.BOLD, 30); // 水印文字顏色 private static Color color = Color.red; /**

    • @param alpha
    • 水印透明度
    • @param positionWidth
    • 水印橫向位置
    • @param positionHeight
    • 水印縱向位置
    • @param font
    • 水印文字字體
    • @param color
    • 水印文字顏色 */ public static void setImageMarkOptions(float alpha , int positionWidth , int positionHeight ,Font font,Color color){ if(alpha!=0.0f)ImageMarkLogoUtil.alpha = alpha; if(positionWidth!=0)ImageMarkLogoUtil.positionWidth = positionWidth; if(positionHeight!=0)ImageMarkLogoUtil.positionHeight = positionHeight; if(font!=null)ImageMarkLogoUtil.font = font; if(color!=null)ImageMarkLogoUtil.color = color; }

      /**

    • 給圖片添加水印圖片
    • @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);

      // 1、得到畫筆對象 Graphics2D g = buffImg.createGraphics();

      // 2、設置對線段的鋸齒狀邊緣處理 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); // 3、設置水印旋轉 if (null != degree) { g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2); }

      // 4、水印圖片的路徑 水印圖片一般為gif或者png的,這樣可設置透明度 ImageIcon imgIcon = new ImageIcon(iconPath);

      // 5、得到Image對象。 Image img = imgIcon.getImage();

      g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));

      // 6、水印圖片的位置 g.drawImage(img, positionWidth, positionHeight, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); // 7、釋放資源 g.dispose();

      // 8、生成圖片 os = new FileOutputStream(targerPath); ImageIO.write(buffImg, "JPG", os);

      System.out.println("圖片完成添加水印圖片");

      } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } }

      /**

    • 給圖片添加水印文字
    • @param logoText
    • 水印文字
    • @param srcImgPath
    • 源圖片路徑
    • @param targerPath
    • 目標圖片路徑 */ public static void markImageByText(String logoText, String srcImgPath, String targerPath) { markImageByText(logoText, srcImgPath, targerPath, null); }

      /**

    • 給圖片添加水印文字、可設置水印文字的旋轉角度
    • @param logoText
    • @param srcImgPath
    • @param targerPath
    • @param degree */ public static void markImageByText(String logoText, String srcImgPath,

       String targerPath, Integer degree) {
      
      

      InputStream is = null; OutputStream os = null; try {

       // 1、源圖片
       Image srcImg = ImageIO.read(new File(srcImgPath));
       BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
      
       // 2、得到畫筆對象
       Graphics2D g = buffImg.createGraphics();
       // 3、設置對線段的鋸齒狀邊緣處理
       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);
       // 4、設置水印旋轉
       if (null != degree) {
           g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);
       }
       // 5、設置水印文字顏色
       g.setColor(color);
       // 6、設置水印文字Font
       g.setFont(font);
       // 7、設置水印文字透明度
       g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));
       // 8、第一參數->設置的內容,后面兩個參數->文字在圖片上的坐標位置(x,y)
       g.drawString(logoText, positionWidth, positionHeight);
       // 9、釋放資源
       g.dispose();
       // 10、生成圖片
       os = new FileOutputStream(targerPath);
       ImageIO.write(buffImg, "JPG", os);
      
       System.out.println("圖片完成添加水印文字");
      
      

      } catch (Exception e) {

       e.printStackTrace();
      

      } finally {

       try {
           if (null != is)
               is.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
       try {
           if (null != os)
               os.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
      

      } }

      public static void main(String [] args){ String srcImgPath = "d:/qie.jpg";
      String logoText = "[ I love Qie]"; String iconPath = "d:/shuimu.jpg";

      String targerTextPath = "d:/qie_text.jpg";
      String targerTextPath2 = "d:/qie_text_rotate.jpg";

      String targerIconPath = "d:/qie_icon.jpg";
      String targerIconPath2 = "d:/qie_icon_rotate.jpg";

      System.out.println("給圖片添加水印文字開始..."); // 給圖片添加水印文字
      markImageByText(logoText, srcImgPath, targerTextPath);
      // 給圖片添加水印文字,水印文字旋轉-45
      markImageByText(logoText, srcImgPath, targerTextPath2, -45);
      System.out.println("給圖片添加水印文字結束...");

      System.out.println("給圖片添加水印圖片開始..."); setImageMarkOptions(0.3f,1,1,null,null); // 給圖片添加水印圖片
      markImageByIcon(iconPath, srcImgPath, targerIconPath);
      // 給圖片添加水印圖片,水印圖片旋轉-45
      markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45); System.out.println("給圖片添加水印圖片結束..."); }

} </pre>

 本文由用戶 cp66 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!