<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
為圖片新增水印的主要作用是保護圖片版權,防止圖片被未經授權的人使用或傳播。
通常情況下,圖片水印會包含圖片作者的名字、版權資訊或公司商標等資訊,這些資訊可以幫助識別圖片的所有者,並對未經授權的使用進行追究。
此外,圖片水印還可以用於提醒人們圖片的使用限制,例如是否需要授權、是否可以用於商業用途等。
除此之外,圖片水印還可以用於增加圖片的視覺吸引力或宣傳性,例如可以在圖片中新增品牌 logo 或宣傳標語等。
總的來說,圖片水印的主要作用是保護圖片版權和提醒人們圖片的使用限制,但也可以用於提升圖片的視覺效果和宣傳性。
為圖片新增水印是一種常用的圖片處理技術。在 Java 中可以使用 Graphics2D 類來繪製水印。
以下是一個簡單的例子,展示瞭如何在圖片的右下角新增一個水印:
import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Watermark { public static void main(String[] args) { // 讀取原圖片 BufferedImage image = null; try { image = ImageIO.read(new File("original.jpg")); } catch (IOException e) { e.printStackTrace(); } // 獲取圖片的寬度和高度 int width = image.getWidth(); int height = image.getHeight(); // 建立一個圖片快取物件 BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖片的畫筆 Graphics2D g = newImage.createGraphics(); // 將原圖片繪製到快取圖片上 g.drawImage(image, 0, 0, width, height, null); // 設定水印的字型樣式 g.setFont(new Font("微軟雅黑", Font.BOLD, 20)); // 設定水印的顏色 g.setColor(Color.red); // 設定水印的位置 g.drawString("Hello World!", width - 120, height - 10); // 釋放圖形上下文使用的系統資源 g.dispose(); // 儲存帶水印的圖片 try { ImageIO.write(newImage, "jpg", new File("watermarked.jpg")); } catch (IOException e) { e.printStackTrace(); } } }
如果你已經知道了字串的大小(size)和內容(str),想要計算字串的寬度,可以使用以下方法:
首先建立一個 Font 物件,使用該物件的 getStringBounds 方法計算字串的寬度。
import java.awt.Font; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; public class StringWidth { public static void main(String[] args) { // 字串內容 String str = "Hello World!"; // 字型大小 int size = 20; // 建立字型物件 Font font = new Font("微軟雅黑", Font.BOLD, size); // 建立字型渲染上下文 FontRenderContext frc = new FontRenderContext(null, true, true); // 計算字串的寬度 Rectangle2D bounds = font.getStringBounds(str, frc); // 輸出字串的寬度 System.out.println(bounds.getWidth()); } }
在這段程式碼中,我們首先建立了一個 Font 物件,然後使用該物件的 getStringBounds 方法計算字串的寬度。
注意,在呼叫 getStringBounds 方法時,需要傳入一個 FontRenderContext 物件,該物件用於描述字型的渲染環境,可以影響字串的顯示效果。
最後,計算出的字串寬度是一個 Rectangle2D 物件,你可以使用 getWidth 方法來獲取實際的寬度值。
可以看到,我們新增的水印已經超出了圖片的範圍,導致顯示不完全,出現這種結果的原因是因為我們預設字元的寬度為120px
.您可以通過上面介紹的動態計算字元寬度來讓水印始終顯示在圖片上。
import java.awt.Color; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Watermark { public static void main(String[] args) { // 讀取原圖片 BufferedImage image = null; try { image = ImageIO.read(new File("original.jpg")); } catch (IOException e) { e.printStackTrace(); } // 獲取圖片的寬度和高度 int width = image.getWidth(); int height = image.getHeight(); // 建立一個圖片快取物件 BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖片的畫筆 Graphics2D g = newImage.createGraphics(); // 字串內容 String str = "Hello World!"; // 字型大小 int size = 20; // 建立字型物件 Font font = new Font("微軟雅黑", Font.BOLD, size); // 建立字型渲染上下文 FontRenderContext frc = new FontRenderContext(null, true, true); // 計算字串的寬度和高度 Rectangle2D bounds = font.getStringBounds(str, frc); // 字元寬度 int strWidth = (int)bounds.getWidth(); // 字元高度 int strHeight = (int)bounds.getHeight(); // 將原圖片繪製到快取圖片上 g.drawImage(image, 0, 0, width, height, null); // 設定水印的字型樣式 g.setFont(font); // 設定水印的顏色 g.setColor(Color.red); // 設定水印的位置 g.drawString("Hello World!", width - strWidth - 10, height - strHeight - 10); // 釋放圖形上下文使用的系統資源 g.dispose(); // 儲存帶水印的圖片 try { ImageIO.write(newImage, "jpg", new File("watermarked.jpg")); } catch (IOException e) { e.printStackTrace(); } } }
如果你想在 png 格式的圖片上繪製透明的圖片水印,可以使用以下方法:
首先讀取原圖片和水印圖片,然後使用 Graphics2D 類的 drawImage 方法將水印圖片繪製到原圖片上,最後使用 setComposite 方法設定水印圖片的 alpha 通道值來調整水印的透明度。
紫色部分為圖片水印。
具體實現如下:
import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class TransparentWatermark { public static void main(String[] args) { // 讀取原圖片 BufferedImage image = null; try { image = ImageIO.read(new File("original.png")); } catch (IOException e) { e.printStackTrace(); } // 獲取圖片的寬度和高度 int width = image.getWidth(); int height = image.getHeight(); // 建立一個圖片快取物件 BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖片的畫筆 Graphics2D g = newImage.createGraphics(); // 將原圖片繪製到快取圖片上 g.drawImage(image, 0, 0, width, height, null); // 讀取水印圖片 BufferedImage watermark = null; try { watermark = ImageIO.read(new File("watermark.png")); } catch (IOException e) { e.printStackTrace(); } // 獲取水印圖片的寬度和高度 int wmWidth = watermark.getWidth(); int wmHeight = watermark.getHeight(); // 設定水印圖片的透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f)); // 繪製水印圖片 g.drawImage(watermark, width - wmWidth - 10, height - wmHeight - 10, wmWidth, wmHeight, null); // 釋放圖形上下文使用的系統資源 g.dispose(); // 儲存帶水印的圖片 try { ImageIO.write(newImage, "png", new File("watermarked.png")); } catch (IOException e) { e.printStackTrace(); } } }
目前我們新增文字水印和圖片水印耗時都在 700ms - 2000ms
。
可以考慮以下幾種方法來提升速度:
到此這篇關於Java實現新增文字水印&圖片水印的方法詳解的文章就介紹到這了,更多相關Java新增水印內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45