溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java怎么實現給圖片打上水印

發(fā)布時間:2021-05-06 16:35:50 來源:億速云 閱讀:196 作者:Leah 欄目:開發(fā)技術

本篇文章給大家分享的是有關使用Java怎么實現給圖片打上水印,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

java基本數據類型有哪些

Java的基本數據類型分為:1、整數類型,用來表示整數的數據類型。2、浮點類型,用來表示小數的數據類型。3、字符類型,字符類型的關鍵字是“char”。4、布爾類型,是表示邏輯值的基本數據類型。

打水印(文字)

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

public class ImageUtils {

    // 水印字體
    private static final Font FONT = new Font("微軟雅黑", Font.PLAIN, 14);

    // 透明度
    private static final AlphaComposite COMPOSITE = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f);

    // 水印之間的間隔
    private static final int XMOVE = 150;

    // 水印之間的間隔
    private static final int YMOVE = 200;
    
    /**
     * 打水印(文字)
     *
     * @param srcImgPath       源文件地址
     * @param font             字體
     * @param markContentColor 水印顏色
     * @param waterMarkContent 水印內容
     */
    public static void markWithContent(String srcImgPath, Font font, Color markContentColor, String waterMarkContent) {
        FileOutputStream fos = null;
        try {
            // 讀取原圖片信息
            File srcFile = new File(srcImgPath);
            BufferedImage srcImg = ImageIO.read(srcFile);

            // 圖片寬、高
            int imgWidth = srcImg.getWidth();
            int imgHeight = srcImg.getHeight();

            // 圖片緩存
            BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);

            // 創(chuàng)建繪圖工具
            Graphics2D g = bufImg.createGraphics();

            // 畫入原始圖像
            g.drawImage(srcImg, 0, 0, imgWidth, imgHeight, null);

            // 設置水印顏色
            g.setColor(markContentColor);

            // 設置水印透明度
            g.setComposite(COMPOSITE);

            // 設置傾斜角度
            g.rotate(Math.toRadians(-35), (double) bufImg.getWidth() / 2, (double) bufImg.getHeight() / 2);

            // 設置水印字體
            g.setFont(font);

            // 消除java.awt.Font字體的鋸齒
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            int x = -imgWidth / 2;
            int y;

            // 字體長度
            int markWidth = FONT.getSize() * getTextLength(waterMarkContent);
            // 字體高度
            int markHeight = FONT.getSize();

            // 循環(huán)添加水印
            while (x < imgWidth * 1.5) {
                y = -imgHeight / 2;
                while (y < imgHeight * 1.5) {
                    g.drawString(waterMarkContent, x, y);
                    y += markHeight + YMOVE;
                }
                x += markWidth + XMOVE;
            }

            // 釋放畫圖工具
            g.dispose();

            // 輸出圖片
            fos = new FileOutputStream(srcFile);
            ImageIO.write(bufImg, "jpg", fos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.flush();
                    fos.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }


    //計算水印文本長度
    //1、中文長度即文本長度 2、英文長度為文本長度二分之一
    public static int getTextLength(String text) {
        //水印文字長度
        int length = text.length();

        for (int i = 0; i < text.length(); i++) {
            String s = String.valueOf(text.charAt(i));
            if (s.getBytes().length > 1) {
                length++;
            }
        }
        length = length % 2 == 0 ? length / 2 : length / 2 + 1;
        return length;
    }
    
    
    public static void main(String[] args) {
        ImageUtils.markWithContent("C:\\Users\\lbb\\Pictures\\test.jpg", FONT, Color.darkGray, "水印文字");
    }
}

打了水印后的效果

使用Java怎么實現給圖片打上水印

三、打水印(圖片)

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

public class ImageUtils {

    // 透明度
    private static final AlphaComposite COMPOSITE = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f);

    // 水印之間的間隔
    private static final int XMOVE = 150;

    // 水印之間的間隔
    private static final int YMOVE = 200;

    /**
     * 打水印(圖片)
     *
     * @param srcImgPath  源圖片路徑
     * @param markImgPath 水印圖片路徑
     */
    public static void markWithImg(String srcImgPath, String markImgPath) {
        FileOutputStream fos = null;

        try {
            // 讀取原始圖像
            File srcFile = new File(srcImgPath);
            BufferedImage srcImg = ImageIO.read(srcFile);

            // 原始寬度
            int srcImgWidth = srcImg.getWidth();
            // 原始高度
            int srcImgHeight = srcImg.getHeight();

            // 最終圖像
            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);

            // 創(chuàng)建繪圖工具
            Graphics2D g = bufImg.createGraphics();

            // 畫入原始圖像
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);

            // 讀取水印圖片
            BufferedImage markImg = ImageIO.read(new File(markImgPath));

            // 圖片寬、高
            int markImgWidth = markImg.getWidth();
            int markImgHeight = markImg.getHeight();

            // 設置水印透明度
            g.setComposite(COMPOSITE);

            // 設置傾斜角度
            g.rotate(Math.toRadians(-35), (double) bufImg.getWidth() / 2, (double) bufImg.getHeight() / 2);

            // 循環(huán)添加水印
            int x = -srcImgWidth / 2;
            int y;
            while (x < srcImgWidth * 1.5) {
                y = -srcImgHeight / 2;
                while (y < srcImgHeight * 1.5) {
                    g.drawImage(markImg, x, y, null);
                    y += markImgHeight + YMOVE;
                }
                x += markImgWidth + XMOVE;
            }

            // 釋放畫圖工具
            g.dispose();

            // 輸出圖片
            fos = new FileOutputStream(srcFile);
            ImageIO.write(bufImg, "jpg", fos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.flush();
                    fos.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    public static void main(String[] args) {
        ImageUtils.markWithImg("C:\\Users\\lbb\\Pictures\\test.jpg", "C:\\Users\\lbb\\Pictures\\mark.png");
    }
}

下面是水印圖片

使用Java怎么實現給圖片打上水印

下面是打了水印后的效果

使用Java怎么實現給圖片打上水印

以上就是使用Java怎么實現給圖片打上水印,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI