0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

java如何處理圖片水印

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 16:21 ? 次閱讀

在項(xiàng)目中經(jīng)常有需要在圖片上添加水印的需求以及在某些場合下需要身份證圖片,這時(shí)就可以對身份證上加水印防止被用于其他用途,java 在處理圖片水印時(shí)不需要額外的第三方包,使用 BufferedImage 和 Graphics2D 就可以搞定

讀取圖片

讀取圖片非常簡單,使用 ImageIO 讀取 file 文件就行了。

File imageFile = new File("img.png");
Image src = ImageIO.read(imageFile);
int width = src.getWidth(null);
int height = src.getHeight(null);

添加水印

Image 類是一個(gè)抽象類,無法被直接創(chuàng)建,我們可以使用 BufferedImage 讀取緩存中的圖像數(shù)據(jù)。Graphics2D 類繼承于 Graphics 類,Graphics2D 類是 java 渲染文字及圖片的基礎(chǔ)類,提供了對繪制、填充、旋轉(zhuǎn)和定義顏色的支持。

//創(chuàng)建指定大小,指定圖像類型的 BufferedImage 對象
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//創(chuàng)建 Graphics2D 對象
Graphics2D graphics2D = bufferedImage.createGraphics();
graphics2D.drawImage(src, 0, 0, width, height, null);

接下來就是創(chuàng)建水印的字體、顏色了,如果水印文字在右邊的話,我們需要知道文字的長度。

//設(shè)置字體和顏色
graphics2D.setColor(Color.lightGray);

Font font = new Font("宋體", Font.PLAIN, 20);
graphics2D.setFont(font);
//獲取文字長度
FontMetrics fontMetrics = graphics2D.getFontMetrics(font);
int len = fontMetrics.stringWidth("這里是水印");
graphics2D.drawString("這里是水印", width - len - 10, height - 10);
graphics2D.dispose();

保存圖片

最后使用 FileOutputStream 和 ImageIO.write() 保存圖片。

try(FileOutputStream outputStream = new FileOutputStream("0.png")) {
    ImageIO.write(bufferedImage, "png", outputStream);
}

添加圖片水印

添加圖片水印更是簡單,不再需要設(shè)置字體和顏色,直接使用 graphics2D.drawImage() 方法。

File waterMarkFile = new File("E:pdfProjectsrcmainjavawaterMark.png");
Image waterMarkImg = ImageIO.read(waterMarkFile);
int waterMarkWidth = waterMarkImg.getWidth(null);
int waterMarkHeight = waterMarkImg.getHeight(null);
graphics2D.drawImage(waterMarkImg,width - waterMarkWidth - 10, height - waterMarkHeight - 10,waterMarkWidth, waterMarkHeight, null);
try(FileOutputStream outputStream = new FileOutputStream("1.png")) {
    ImageIO.write(bufferedImage, "png", outputStream);
}

總結(jié)

BufferedImage 和 Graphics2D 還可以做其他事情,比如對表情包添加文字等。大家都可以去試試,做出自己的實(shí)用工具庫。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2952

    瀏覽量

    104477
  • 圖像數(shù)據(jù)
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    11268
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    229

    瀏覽量

    26635
  • File
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    14315
收藏 人收藏

    評論

    相關(guān)推薦

    dede的水印圖片文字顏色,無論如何設(shè)置都是黑色?

    dede的水印圖片文字顏色,無論如何設(shè)置都是黑色?試了N種方法搞不好,誰有好的方法啊。。
    發(fā)表于 05-15 10:02

    紅外熱像儀成像后圖片何處理

    在紅外熱像儀成像后,圖片何處理。就是利用前后倆張圖片如何比較
    發(fā)表于 12-06 19:10

    如何刪除pdf文件中的水印 刪除pdf中水印的方法

    點(diǎn)擊“是”,即可去除PDF文件中的文字水印?! ∈遣皇遣僮骱唵危柚附軵DF編輯器幾步即可輕松去除PDF文件的文字水印。這款軟件不僅僅可以對PDF文件中的文本內(nèi)容進(jìn)行編輯,還可以對圖片、多媒體等內(nèi)容進(jìn)行
    發(fā)表于 07-24 11:39

    迷你圖片處理工具

    圖片處理工具,可以修改圖片編碼格式,能夠處理JAVA不能識別的圖片
    發(fā)表于 03-24 14:52 ?4次下載

    JAVA教程之圖片的拖動處理

    JAVA教程之圖片的拖動處理,很好的學(xué)習(xí)資料。
    發(fā)表于 03-31 11:13 ?7次下載

    JAVA教程之用applet顯示圖片

    JAVA教程之用applet顯示圖片,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:14 ?5次下載

    JAVA教程之圖片火焰效果

    JAVA教程之圖片火焰效果,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:14 ?5次下載

    JAVA教程之圖片倒影

    JAVA教程之圖片倒影,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:14 ?5次下載

    JAVA教程之圖片翻折

    JAVA教程之圖片翻折,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:14 ?2次下載

    JAVA教程之半透明圖片

    JAVA教程之半透明圖片,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:14 ?1次下載

    JAVA教程之圖片旋轉(zhuǎn)

    JAVA教程之圖片旋轉(zhuǎn),很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?2次下載

    結(jié)合可視密碼和數(shù)字水印圖片版權(quán)保護(hù)方案

    數(shù)字作品的拷貝較為容易,倘若多方擁有版權(quán)的數(shù)字作品在多用戶合作之間,若其版權(quán)問題處理不當(dāng),勢必會引起各種矛盾和商業(yè)糾紛等問題。設(shè)計(jì)一種結(jié)合可視密碼、數(shù)字水印圖片版權(quán)保護(hù)方案,在不破壞視覺效果
    發(fā)表于 12-11 17:04 ?0次下載
    結(jié)合可視密碼和數(shù)字<b class='flag-5'>水印</b>的<b class='flag-5'>圖片</b>版權(quán)保護(hù)方案

    pcb抄板如何處理掃描圖片_pcb抄板處理掃描圖片的步驟教程詳解

     PCB史板一個(gè)重要的過程就是將電路板實(shí)物的電路轉(zhuǎn)換為可電腦處理的PCB線路文件實(shí)現(xiàn)這個(gè)過程的一個(gè)環(huán)節(jié)便是將實(shí)物掃描并處理掃描圖片,本文將詳細(xì)介紹如何處理PCB護(hù)板掃描
    發(fā)表于 05-04 17:45 ?1.4w次閱讀
    pcb抄板如<b class='flag-5'>何處理</b>掃描<b class='flag-5'>圖片</b>_pcb抄板<b class='flag-5'>處理</b>掃描<b class='flag-5'>圖片</b>的步驟教程詳解

    Linux開發(fā)_介紹BMP圖片上下翻轉(zhuǎn)、添加水印

    介紹BMP圖片上下翻轉(zhuǎn)、添加水印、通過學(xué)習(xí)BMP圖片結(jié)構(gòu)學(xué)習(xí)文件編程。
    的頭像 發(fā)表于 09-17 15:43 ?1796次閱讀

    Linux開發(fā)_BMP圖片編程(翻轉(zhuǎn)、添加水印)

    接收BMP圖片編程,完成BMP圖片翻轉(zhuǎn)、水印添加等知識點(diǎn)。
    的頭像 發(fā)表于 09-17 15:33 ?1482次閱讀
    Linux開發(fā)_BMP<b class='flag-5'>圖片</b>編程(翻轉(zhuǎn)、添加<b class='flag-5'>水印</b>)