如何利用Java在圖片上添加文字水印效果
前言
今天分享一個:通過Java代碼,給圖片添加文字。
比如下面這個圖片,我們在左下角就添加了一個文字版的水印,那么這是如何實(shí)現(xiàn)的呢 ?
【1】獲取原圖片對象
首先,第一步,肯定是要讓我們的程序,拿到需要處理的圖片。
我們程序獲取圖片的方式,通常有兩種,一種是通過下載到本地,從本地讀??;另外一種就是通過網(wǎng)絡(luò)地址進(jìn)行獲取。
(1.1)讀取本地圖片
比如,我們將圖片下載到了我們計算機(jī)本地(E:\imgs目錄下),那么我們直接在main函數(shù)中,通過下面這段代碼,就可以獲取到圖片對象。
// 讀取圖片文件 File file = new File("E:/imgs/test.png"); System.out.println("圖片名稱:" + file.getName()); System.out.println("圖片大?。? + file.length() / 1024 + " kb"); // 將文件對象轉(zhuǎn)化為圖片對象 BufferedImage image = ImageIO.read(file); System.out.println("圖片寬度:" + image.getWidth() + " px"); System.out.println("圖片高度:" + image.getHeight() + " px");
代碼效果如下:
(1.2)讀取網(wǎng)絡(luò)圖片
如果圖片是一個網(wǎng)絡(luò)圖片,我們可以直接獲取它的地址進(jìn)行下載,相關(guān)代碼如下(網(wǎng)絡(luò)圖片的名稱和類型,取決于下載者)。
URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png"); BufferedImage image = ImageIO.read(url.openStream()); System.out.println("圖片寬度:" + image.getWidth() + " px"); System.out.println("圖片高度:" + image.getHeight() + " px");
代碼效果如下:
【2】創(chuàng)建畫筆
經(jīng)過上面的描述,我們已經(jīng)獲取到了原始圖片,接下來我們還需要創(chuàng)建一個畫筆,后面我們寫出的文字樣式,完全則由它來決定。它可以設(shè)置顏色,字體大小,字體樣式等。
// 創(chuàng)建畫筆(image為上一步的圖片對象) Graphics2D pen = image.createGraphics(); // 設(shè)置畫筆顏色為白色 pen.setColor(Color.WHITE); // 設(shè)置畫筆字體樣式為微軟雅黑,斜體,文字大小為20px pen.setFont(new Font("微軟雅黑", Font.ITALIC, 20));
相關(guān)說明:
(1) pen.setColor(Color.WHITE);
這行代碼的意思是將畫筆顏色設(shè)置為白色。
其他顏色還有:WHITE(白色)、LIGHT_GRAY(淺灰色)、GRAY(灰色)、DARK_GRAY(深灰色)、BLACK(黑色)、RED(紅色)、PINK(粉紅色)、ORANGE(橘黃色)、YELLOW(黃色)、GREEN(綠色)、MAGENTA(紫紅色)、CYAN(青色)、BLUE(藍(lán)色)
如果上面顏色都不滿足你,或者你還想設(shè)置下字體透明度,你可以改為如下格式:
pen.setColor(new Color(179, 250, 233, 100));
這里的四個參數(shù)分別為 RGBA(不懂RGBA的點(diǎn)這里),四個參數(shù)的范圍均是0-255;
(2)pen.setFont(new Font("微軟雅黑", Font.ITALIC, 20));
Font.PLAIN(正常),F(xiàn)ont.BOLD(粗體),F(xiàn)ont.ITALIC(斜體)
【3】添加文字水印
下面這行代碼就是添加文字水印的核心代碼。
// 這三個參數(shù)分別為你的文字內(nèi)容,起始位置橫坐標(biāo)(px),縱坐標(biāo)位置(px)。 pen.drawString("我是圖片水印", 30, 550);
(3.1)如何確定水印位置 ?
首先,大家要明白,我們在說圖片上的坐標(biāo),它一個表示法,具體如下:
那么,我們?nèi)绾未_定我們水印的圖片其實(shí)坐標(biāo)呢?
我們可以將圖片首先保存到本地,然后右鍵單擊,選擇畫圖工具類打開它。
打開后,我們將鼠標(biāo)光標(biāo)移動到我們需要添加文字的地方(如紅色箭頭處),則底部就會顯示對應(yīng)位置的坐標(biāo)(藍(lán)色箭頭處),那么這個坐標(biāo)我們就可以拿到,然后寫入到程序代碼里了。
【4】獲取處理圖片
經(jīng)過上面三次操作后,我們的圖片添加文字就已經(jīng)處理完成了,但他現(xiàn)在還保存在Java對象中,我們需要將他保存到本地,我們才能看得到效果(如:這里我將處理的圖片保存到 test2.png 中)。
// 創(chuàng)建新圖片文件 File file = new File("E:/imgs/test2.png"); // 將處理好的圖片數(shù)據(jù)寫入到新圖片文件中 FileOutputStream fos = new FileOutputStream(file); ImageIO.write(image, "png", fos);
最后執(zhí)行代碼,我們看到在原圖片文件夾下,多了一個 test2.png 的圖片。
我們打開 test2.png 圖片后,可以看到文字水印已經(jīng)添加成功了。
【5】源代碼
最后將前面解讀的整個源碼放在下面,供大家參考:
package com.zyq.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; public class ImgTest { public static void main(String[] args) throws IOException { // 讀取本地圖片文件 // File file = new File("E:/imgs/test.png"); // System.out.println("圖片名稱:" + file.getName()); // System.out.println("圖片大?。? + file.length() / 1024 + " kb"); // 將文件對象轉(zhuǎn)化為圖片對象 // BufferedImage image = ImageIO.read(file); // 獲取網(wǎng)絡(luò)圖片 URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png"); BufferedImage image = ImageIO.read(url.openStream()); // 創(chuàng)建畫筆 Graphics2D pen = image.createGraphics(); // 設(shè)置畫筆顏色為白色 // pen.setColor(Color.WHITE); pen.setColor(new Color(179, 250, 233, 200)); // 設(shè)置畫筆字體樣式為微軟雅黑,斜體,文字大小為20px pen.setFont(new Font("微軟雅黑", Font.ITALIC, 20)); // 寫上水印文字和坐標(biāo) pen.drawString("我是圖片水印", 30, 550); // 創(chuàng)建新圖片文件 File file = new File("E:/imgs/test2.png"); // 將處理好的圖片數(shù)據(jù)寫入到新圖片文件中 FileOutputStream fos = new FileOutputStream(file); ImageIO.write(image, "png", fos); } }
總結(jié)
到此這篇關(guān)于如何利用Java在圖片上添加文字水印效果的文章就介紹到這了,更多相關(guān)Java圖片加文字水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring實(shí)現(xiàn)自定義注解處理器解析和處理注解
這篇文章主要介紹了Spring實(shí)現(xiàn)自定義注解處理器解析和處理注解,注解在現(xiàn)代Java編程中扮演了至關(guān)重要的角色,無論是簡化代碼、增強(qiáng)可讀性,還是將元數(shù)據(jù)與業(yè)務(wù)邏輯分離,注解都讓我們的代碼更加優(yōu)雅和靈活,需要的朋友可以參考下2024-10-10Spring的RedisTemplate存儲的key和value有特殊字符的處理
這篇文章主要介紹了Spring的RedisTemplate存儲的key和value有特殊字符的處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12完美解決Logback configuration error detected的問題
這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08如何將DeepSeek 集成到 Java 的 Spring Boot&
本文介紹了如何將DeepSeek集成到Java的SpringBoot項(xiàng)目中,包括準(zhǔn)備工作、集成步驟和示例說明,感興趣的朋友一起看看吧2025-02-02淺談Java并發(fā)中ReentrantLock鎖應(yīng)該怎么用
本文主要介紹了ava并發(fā)中ReentrantLock鎖的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11SpringBoot獲取yml和properties配置文件的內(nèi)容
這篇文章主要為大家詳細(xì)介紹了SpringBoot獲取yml和properties配置文件的內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04