用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
生活随笔
收集整理的這篇文章主要介紹了
用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
javaCV圖像處理系列: javaCV圖像處理之1:實時視頻添加文字水印并截取視頻圖像保存成圖片,實現文字水印的字體、位置、大小、粗度、翻轉、平滑等操作
javaCV圖像處理之2:實時視頻添加圖片水印,實現不同大小圖片疊加,圖像透明度控制
?前言:
這是個很常用的操作,一般我們的網站在用戶上傳圖片時都會給圖片添加一個水印以防止其他站點盜圖的行為
實現功能:①給圖片增加文字水印②給圖片增加圖片水印
一、核心功能實現:
1、添加文字水印
// 加文字水印public void mark(BufferedImage bufImg, Image img, String text, Font font, Color color, int x, int y) {Graphics2D g = bufImg.createGraphics();g.drawImage(img, 0, 0, bufImg.getWidth(), bufImg.getHeight(), null);g.setColor(color);g.setFont(font);g.drawString(text, x, y);g.dispose();} 2、添加圖片水印
// 加圖片水印public void mark(BufferedImage bufImg, Image img, Image markImg, int width, int height, int x, int y) {Graphics2D g = bufImg.createGraphics();g.drawImage(img, 0, 0, bufImg.getWidth(), bufImg.getHeight(), null);g.drawImage(markImg, x, y, width, height, null);g.dispose();} 補充:
為什么要這么寫?
考慮到該方法不僅可以用于給圖片文件增加水印,而且還可以給視頻的每一幀圖像也添加,所以為了方便不同場合重復使用,去除了不必要的依賴關系。
有了核心的兩個方法就我們可以給圖片文件增加水印了
二、功能性實現
1、給圖片增加文字水印
/*** 給圖片增加文字水印* * @param imgPath* -要添加水印的圖片路徑* @param outImgPath* -輸出路徑* @param text-文字* @param font* -字體* @param color* -顏色* @param x* -文字位于當前圖片的橫坐標* @param y* -文字位于當前圖片的豎坐標*/public void mark(String imgPath, String outImgPath, String text, Font font, Color color, int x, int y) {try {// 讀取原圖片信息File imgFile = null;Image img = null;if (imgPath != null) {imgFile = new File(imgPath);}if (imgFile != null && imgFile.exists() && imgFile.isFile() && imgFile.canRead()) {img = ImageIO.read(imgFile);}int imgWidth = img.getWidth(null);int imgHeight = img.getHeight(null);// 加水印BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);mark(bufImg, img, text, font, color, x, y);// 輸出圖片FileOutputStream outImgStream = new FileOutputStream(outImgPath);ImageIO.write(bufImg, "jpg", outImgStream);outImgStream.flush();outImgStream.close();} catch (Exception e) {e.printStackTrace();}}
2、給圖片增加圖片水印
/*** 給圖片增加圖片水印* * @param inputImg* -源圖片,要添加水印的圖片* @param markImg* - 水印圖片* @param outputImg* -輸出圖片(可以是源圖片)* @param width* - 水印圖片寬度* @param height* -水印圖片高度* @param x* -橫坐標,相對于源圖片* @param y* -縱坐標,同上*/public void mark(String inputImg, String markImg, String outputImg, int width, int height, int x, int y) {// 讀取原圖片信息File inputImgFile = null;File markImgFile = null;Image img = null;Image mark = null;try {if (inputImg != null && markImg != null) {inputImgFile = new File(inputImg);markImgFile = new File(markImg);}if (inputImgFile != null && inputImgFile.exists() && inputImgFile.isFile() && inputImgFile.canRead()) {img = ImageIO.read(inputImgFile);}if (markImgFile != null && markImgFile.exists() && markImgFile.isFile() && markImgFile.canRead()) {mark = ImageIO.read(markImgFile);}int imgWidth = img.getWidth(null);int imgHeight = img.getHeight(null);BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);mark(bufImg, img, mark, width, height, x, y);FileOutputStream outImgStream = new FileOutputStream(outputImg);ImageIO.write(bufImg, "jpg", outImgStream);outImgStream.flush();outImgStream.close();} catch (IOException e) {e.printStackTrace();}}3、測試一下效果
文字水印的字體和顏色需要自行定義,這里我們使用宋體,14號字體,顏色選擇橙色 - -!,坐標是x軸0,y軸等于字體的大小,也就是圖片的左上角。
public static void main(String[] args) {Font font = new Font("宋體", Font.PLAIN, 14);// 原圖位置, 輸出圖片位置, 水印文字顏色, 水印文字// new MarkText4J().mark("eguidMarkText2.jpg", "eguidMarkText2.jpg", "水印效果測試", font, Color.ORANGE, 0, 14);// 增加圖片水印new MarkText4J().mark("eguidMarkText2.jpg", "eguid.jpg", "eguidMarkText3.jpg", 40, 20, 0, 14);}簡直棒極了,至此我們可以隨意的給圖片任意位置添加任意文字或者圖片水印了。 最后,額。。。導出的圖片比原本圖片還小是什么鬼?歡迎加入討論群一起討論:371249677。- -!
轉載于:https://www.cnblogs.com/eguid/p/6821579.html
總結
以上是生活随笔為你收集整理的用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Session原理、安全以及最基本的Ex
- 下一篇: 布局display