最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)在圖片中添加文字水印的示例代碼

 更新時(shí)間:2026年05月27日 09:04:39   作者:浮云6363  
本文介紹了一個(gè)使用Java實(shí)現(xiàn)的圖片水印工具,該工具能夠讀取指定路徑的圖片,在圖片上添加文字水印,并將帶有水印的圖片保存到指定路徑,感興趣的小伙伴可以了解下

本文介紹了一個(gè)使用Java實(shí)現(xiàn)的圖片水印工具,該工具能夠讀取指定路徑的圖片,在圖片上添加文字水印,并將帶有水印的圖片保存到指定路徑。文章詳細(xì)展示了如何使用Java AWT庫(kù)進(jìn)行圖片處理,包括設(shè)置水印的顏色、字體、位置等。

完整代碼如下:

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

/**
 * @Author: 浮云
 * @Date: 2019/12/21 21:51
 */
public class MarkImageUtils {

    public static void main(String[] args) {
        Color color=new Color(255, 45, 160);
        Font font = new Font("微軟雅黑", Font.BOLD, 30);
        waterMark("D:/Temp/test.jpg", "D:/Temp//test1.png","好冷~嗚嗚嗚~~~",color,font,130,50);
    }

    /**
     * @param filePath 原圖片
     * @param outFile  輸出圖片
     * @param text     水印文字
     * @param color    顏色
     * @param font     字體
     * @param x        水印起始X坐標(biāo)
     * @param y        水印起始Y坐標(biāo)
     * @return 添加水印是否成功 true-成功 false-失敗
     */
    public static boolean waterMark(String filePath, String outFile,
                                    String text, Color color, Font font, int x, int y) {
        String result = "打水印失??!";
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filePath);
            BufferedImage im = ImageIO.read(fis);//讀取原圖片
            int width = im.getWidth();//原圖片寬
            int height = im.getHeight();//原圖片高
            //判斷水印起始x和y坐標(biāo)是否小于原圖片寬和高
            if (x > width || y > height) {
                System.out.println(result);
                return false;
            }
            Graphics g = im.getGraphics();//創(chuàng)建畫板
            g.setColor(color);//設(shè)置顏色
            g.setFont(font);//設(shè)置文字樣式
            g.drawString(text, x, y);//向畫板上寫字
            g.dispose();//釋放資源
            ImageIO.write(im, "jpg", new File(outFile));
        } catch (IOException e) {
            System.out.println(result);
            return false;
        } finally {
            closeFileInputStream(fis);
        }
        result = "打水印成功!";
        System.out.println(result);
        return true;
    }

    /**
     * 關(guān)閉文件輸入流
     * @param fis
     */
    public static void closeFileInputStream (FileInputStream fis){
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

如果不知道有哪些字體,可以用以下代碼打印所有字體

import java.awt.*;

/**
 * @Author: 浮云
 * @Date: 2019/12/22 0:23
 */
public class FontDemo {
    public static void main(String[] args) {
        Font[] fonts = GraphicsEnvironment
                .getLocalGraphicsEnvironment()
                .getAllFonts();
        for (Font font : fonts) {
            System.out.println(font.getFontName());
        }
    }
}

知識(shí)補(bǔ)充:

在 Java 中為圖片添加文字水印是非常常見的需求,通常使用 java.awt 包下的 Graphics2D 類就能輕松實(shí)現(xiàn)。下面我會(huì)提供一個(gè)簡(jiǎn)潔但功能完整的方法,支持設(shè)置水印文本、字體、顏色、透明度、位置以及旋轉(zhuǎn)角度。

基礎(chǔ)實(shí)現(xiàn):添加單個(gè)文字水印

以下代碼可以在圖片的指定位置添加一個(gè)半透明文字水印。

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

public class ImageWatermark {

    /**
     * 為圖片添加文字水印
     *
     * @param srcImageFile  源圖片文件路徑
     * @param destImageFile 目標(biāo)圖片文件路徑
     * @param watermarkText 水印文字
     * @param x             水印左上角 X 坐標(biāo)(相對(duì)原圖)
     * @param y             水印左上角 Y 坐標(biāo)
     * @param fontSize      字體大小(像素)
     * @param alpha         透明度 (0.0 ~ 1.0)
     * @param angle         旋轉(zhuǎn)弧度(0 表示不旋轉(zhuǎn))
     */
    public static void addTextWatermark(String srcImageFile, String destImageFile,
                                        String watermarkText, int x, int y,
                                        int fontSize, float alpha, double angle) throws IOException {
        // 1. 讀取原圖
        BufferedImage image = ImageIO.read(new File(srcImageFile));
        int width = image.getWidth();
        int height = image.getHeight();

        // 2. 創(chuàng)建 Graphics2D 對(duì)象
        Graphics2D g2d = image.createGraphics();

        // 開啟抗鋸齒,讓文字邊緣更平滑
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        // 3. 設(shè)置字體和顏色
        Font font = new Font("宋體", Font.BOLD, fontSize);
        g2d.setFont(font);
        g2d.setColor(Color.WHITE);      // 文字顏色

        // 4. 設(shè)置透明度(AlphaComposite)
        AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
        g2d.setComposite(alphaComposite);

        // 5. 旋轉(zhuǎn)文字(如果需要)
        if (angle != 0) {
            g2d.rotate(angle, x + (fontSize * watermarkText.length()) / 4.0, y + fontSize / 2.0);
        }

        // 6. 繪制水印文字
        g2d.drawString(watermarkText, x, y);

        // 7. 釋放資源
        g2d.dispose();

        // 8. 保存新圖片
        String format = destImageFile.substring(destImageFile.lastIndexOf(".") + 1);
        ImageIO.write(image, format, new File(destImageFile));
    }

    public static void main(String[] args) {
        try {
            addTextWatermark("input.jpg", "output.jpg",
                    "? 2026 MyCompany", 50, 100,
                    36, 0.5f, 0);
            System.out.println("水印添加成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

高級(jí)用法:自動(dòng)定位(右下角、居中、平鋪)

1. 水印位于右下角,自動(dòng)偏移

int margin = 20;
FontMetrics metrics = g2d.getFontMetrics(font);
int textWidth = metrics.stringWidth(watermarkText);
int textHeight = metrics.getHeight();
int x = width - textWidth - margin;
int y = height - margin;

2. 水印平鋪整個(gè)圖片(防截圖)

可以利用循環(huán)繪制多個(gè)水印,常見于版權(quán)保護(hù)。

int stepX = 200;
int stepY = 150;
for (int i = 0; i < width; i += stepX) {
    for (int j = 0; j < height; j += stepY) {
        g2d.drawString(watermarkText, i, j);
    }
}

3. 水印居中并旋轉(zhuǎn)一定角度

// 獲取文字寬高
FontMetrics fm = g2d.getFontMetrics();
int textWidth = fm.stringWidth(watermarkText);
int textHeight = fm.getHeight();

// 中心點(diǎn)坐標(biāo)
int centerX = width / 2 - textWidth / 2;
int centerY = height / 2 + textHeight / 4;  // 視覺居中

// 旋轉(zhuǎn) 30 度(弧度制)
double angle = Math.toRadians(30);
g2d.rotate(angle, width / 2.0, height / 2.0);
g2d.drawString(watermarkText, centerX, centerY);

常見問題與注意事項(xiàng)

問題解決方案
中文亂碼確保使用的字體支持中文(如 "宋體"、"Microsoft YaHei"、"SimHei"),不要用 "Arial"。
文字鋸齒開啟抗鋸齒提示:g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
透明背景圖片(PNG)水印會(huì)正常疊加,無(wú)需特殊處理;如果希望水印也帶半透明,調(diào)整 alpha 值即可。
保存格式限制某些格式(如 GIF)不支持高精度顏色,建議保存為 PNG 或 JPG。
性能優(yōu)化若對(duì)大量圖片添加相同水印,可提前預(yù)計(jì)算字體和透明度,避免在循環(huán)中重復(fù)創(chuàng)建 Font 對(duì)象。

擴(kuò)展:水印工具類封裝(支持更多參數(shù))

public class WatermarkUtil {
    /**
     * 添加文字水印
     * @param src     源圖片路徑
     * @param dest    目標(biāo)路徑
     * @param text    水印文字
     * @param config  配置項(xiàng)(位置、字體、顏色、透明度等)
     */
    public static void watermark(String src, String dest, String text, WatermarkConfig config) throws IOException {
        // ... 具體實(shí)現(xiàn)
    }
    public static class WatermarkConfig {
        private int x = -1;        // 負(fù)值表示自動(dòng)計(jì)算
        private int y = -1;
        private String fontName = "宋體";
        private int fontSize = 36;
        private Color color = Color.WHITE;
        private float alpha = 0.6f;
        private double angle = 0;
        private boolean tile = false;    // 是否平鋪
        private int tileStepX = 200;
        private int tileStepY = 150;
        // ... getter / setter
    }
}

總結(jié)

  • 核心步驟ImageIO.read → Graphics2D → 設(shè)置透明度和字體 → drawString → ImageIO.write
  • 關(guān)鍵技巧:使用 AlphaComposite 實(shí)現(xiàn)半透明效果;利用 FontMetrics 精確計(jì)算文字尺寸;開啟抗鋸齒提升顯示質(zhì)量。
  • 適用場(chǎng)景:圖片版權(quán)保護(hù)、分享標(biāo)記、上傳預(yù)覽圖標(biāo)識(shí)等。

到此這篇關(guān)于Java實(shí)現(xiàn)在圖片中添加文字水印的示例代碼的文章就介紹到這了,更多相關(guān)Java圖片添加文字水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

泸水县| 新乡县| 清流县| 左贡县| 阿克苏市| 仪征市| 三河市| 留坝县| 双流县| 大洼县| 商洛市| 北宁市| 兰州市| 万宁市| 互助| 张掖市| 辽源市| 自贡市| 都江堰市| 柯坪县| 高阳县| 抚顺市| 清远市| 元朗区| 东方市| 庆元县| 公主岭市| 中牟县| 武汉市| 徐州市| 翁源县| 龙口市| 虎林市| 凉山| 洛浦县| 三亚市| 巴林右旗| 明水县| 万宁市| 邯郸市| 晋江市|