java 圖片水印處理類

FH-Admin發表於2022-01-26
package com.fh.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
//import java.io.FileOutputStream;
//import com.sun.image.codec.jpeg.JPEGCodec;
//import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 說明:圖片水印處理類 
 * 作者:FH Admin 
 * from:fhadmin.cn
 */
public class Watermark {

        private    static String strFWATERM,strIWATERM;

        static{
            strFWATERM = Tools.readTxtFile(Const.FWATERM);    //讀取文字水印配置
            strIWATERM = Tools.readTxtFile(Const.IWATERM);    //讀取圖片水印配置
        }

        /**
         * 重新整理
        */
        public static void fushValue(){
            strFWATERM = Tools.readTxtFile(Const.FWATERM);    //讀取文字水印配置
            strIWATERM = Tools.readTxtFile(Const.IWATERM);    //讀取圖片水印配置
        }

        /**
         * @param imagePath 圖片全路徑
        */
          public static void setWatemark(String imagePath){ 
              //文字水印
              if(null != strFWATERM && !"".equals(strFWATERM)){
                String strFW[] = strFWATERM.split(",fh,");
                if(strFW.length == 5){
                    if("yes".equals(strFW[0])){
                        pressText(strFW[1].toString(), imagePath, "", 1, Color.RED,Integer.parseInt(strFW[2]), Integer.parseInt(strFW[3]), Integer.parseInt(strFW[4]));    //文字
                    }
                }
            }
              //圖片水印
            if(null != strIWATERM && !"".equals(strIWATERM)){
                String strIW[] = strIWATERM.split(",fh,");
                if(strIW.length == 4){
                    if("yes".equals(strIW[0])){
                        pressImage(PathUtil.getClasspath() + Const.FILEPATHIMG+strIW[1], imagePath, Integer.parseInt(strIW[2]), Integer.parseInt(strIW[3]));
                    }
                }
            }
          } 

        /**
         * 把圖片印刷到圖片上
         * 
         * @param pressImg --
         *            水印檔案
         * @param targetImg --
         *            目標檔案
         * @param x
         *            --x座標
         * @param y
         *            --y座標
         */
        public final static void pressImage(String pressImg, String targetImg,
                int x, int y) {
            try {
                //目標檔案
                File _file = new File(targetImg);
                Image src = ImageIO.read(_file);
                int wideth = src.getWidth(null);
                int height = src.getHeight(null);
                BufferedImage image = new BufferedImage(wideth, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = image.createGraphics();
                g.drawImage(src, 0, 0, wideth, height, null);

                //水印檔案
                File _filebiao = new File(pressImg);
                Image src_biao = ImageIO.read(_filebiao);
                int wideth_biao = src_biao.getWidth(null);
                int height_biao = src_biao.getHeight(null);
                //g.drawImage(src_biao, (wideth - wideth_biao) / 2,(height - height_biao) / 2, wideth_biao, height_biao, null);
                g.drawImage(src_biao, x, y, wideth_biao, height_biao, null);
                //水印檔案結束
                g.dispose();
                /*FileOutputStream out = new FileOutputStream(targetImg);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(image);
                out.close();*/
                String formatName = targetImg.substring(targetImg.lastIndexOf(".") + 1);
                ImageIO.write(image, /*"GIF"*/ formatName /* format desired */ , new File(targetImg) /* target */ );

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 列印文字水印圖片
         * 
         * @param pressText
         *            --文字
         * @param targetImg --
         *            目標圖片
         * @param fontName --
         *            字型名
         * @param fontStyle --
         *            字型樣式
         * @param color --
         *            字型顏色
         * @param fontSize --
         *            字型大小
         * @param x --
         *            偏移量
         * @param y
         */

        public static void pressText(String pressText, String targetImg,
                String fontName, int fontStyle, Color color, int fontSize, int x,int y) {
            try {
                File _file = new File(targetImg);
                Image src = ImageIO.read(_file);
                int wideth = src.getWidth(null);
                int height = src.getHeight(null);
                BufferedImage image = new BufferedImage(wideth, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = image.createGraphics();
                g.drawImage(src, 0, 0, wideth, height, null);
                g.setColor(color);
                g.setFont(new Font(fontName, fontStyle, fontSize));
                g.drawString(pressText, x, y);
                g.dispose();
                /*FileOutputStream out = new FileOutputStream(targetImg);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(image);
                out.close();*/
                String formatName = targetImg.substring(targetImg.lastIndexOf(".") + 1);
                ImageIO.write(image, /*"GIF"*/ formatName /* format desired */ , new File(targetImg) /* target */ );
            } catch (Exception e) {
                System.out.println(e);
            }
        }  

}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章