1. 程式人生 > >利用jdk API 為圖片新增文字水印

利用jdk API 為圖片新增文字水印

1.為了方便我把需要的資訊封裝成了一個類,  ImageInfo  類

package com.demo.water.image.bean;


import java.awt.Color;
import java.awt.Font;
import java.io.InputStream;


public class ImageInfo {


/**
* 圖片的輸入流
*/
private InputStream inputStream;
/**
* 水印效果文字的設定
*/
private String fontName = "微軟雅黑";
private int fontStyle = Font.PLAIN;
private int fontSize = 20;

/**
* 文字的顏色
*/
private Color fontColor = Color.BLUE;
/**
* 文字的透明度  0 - 1 之間
*/
private float composite = 1f;
/**
* 文字的內容
*/
private String content;
/**
* 圖片的格式和要儲存的路徑
* location 是利用imageType作為圖片的字尾名的,所以輸location的時候只需要輸到圖片的名字即可 
*/
private String imageType = "jpg";
private String location;

public String getImageType() {
return imageType;
}
public void setImageType(String imageType) {
this.imageType = imageType;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String getFontName() {
return fontName;
}
public void setFontName(String fontName) {
this.fontName = fontName;
}
public int getFontStyle() {
return fontStyle;
}
public void setFontStyle(int fontStyle) {
this.fontStyle = fontStyle;
}
public int getFontSize() {
return fontSize;
}
public void setFontSize(int fontSize) {
this.fontSize = fontSize;
}
public Color getFontColor() {
return fontColor;
}
public void setFontColor(Color fontColor) {
this.fontColor = fontColor;
}
public float getComposite() {
return composite;
}
public void setComposite(float composite) {
this.composite = composite;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public ImageInfo(InputStream inputStream, String fontName, int fontStyle, int fontSize, Color fontColor,
float composite, String content, String location) {
this(inputStream, content, location);
this.fontName = fontName;
this.fontStyle = fontStyle;
this.fontSize = fontSize;
this.fontColor = fontColor;
this.composite = composite;
}
public ImageInfo(InputStream inputStream, String content, String location) {
this.inputStream = inputStream;
this.content = content;
this.location = location + "." + imageType;
}
public ImageInfo() {}
public ImageInfo(InputStream inputStream, Color fontColor, float composite, String content, String location) {
this(inputStream, content, location);
this.fontColor = fontColor;
this.composite = composite;
}
public ImageInfo(InputStream inputStream, String fontName, int fontStyle, int fontSize, String content, String location) {
this(inputStream, content, location);
this.fontName = fontName;
this.fontStyle = fontStyle;
this.fontSize = fontSize;
}
}

2,主要是 ImageUtil 裡面的處理邏輯,大家可以看一下

package com.demo.water.image.util;


import java.awt.AlphaComposite;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;


import javax.imageio.ImageIO;


import com.demo.water.image.bean.ImageInfo;


public class ImageUtil {


public static boolean waterImage(ImageInfo imageInfo){


try {
//獲取傳進來的圖片的資訊   ImageIO.read 返回的物件就是輸入那個物件的資訊了
Image image = ImageIO.read(imageInfo.getInputStream());


//建立快取圖片     BufferedImage.TYPE_INT_RGB  那種普通的 RGB顏色,這個引數我沒怎麼研究
BufferedImage bufImg = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);


//獲取繪圖工具
Graphics2D g = bufImg.createGraphics();


//設定繪圖工具的一些基本資訊
g.setFont(new Font(imageInfo.getFontName(), imageInfo.getFontStyle(), imageInfo.getFontSize()));
g.setColor(imageInfo.getFontColor());


//把圖片寫到快取圖片的位置上   如果需要把圖片也實現透明度處理,那麼把它放到   g.setComposite 後面即可
g.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), null);
//這個是設定透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, imageInfo.getComposite()));
//新增水印的文字
g.drawString(imageInfo.getContent(), 0, imageInfo.getFontSize());

//釋放工具
g.dispose();

//把快取圖片寫到磁碟上
return ImageIO.write(bufImg, imageInfo.getImageType(), new File(imageInfo.getLocation()));
} catch (Exception e) {
e.printStackTrace();
} finally {
if(imageInfo.getInputStream() != null) {
try {
imageInfo.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


return false;
}
}

這裡只是做了一個 demo ,我只處理了把文字放到左上角顯示,文字也沒有限制,也只是存到了磁碟的某一個位置,大家自己根據業務改一下即可

接下來是例子     ll.jpg 是原圖  zxc.jpg 是新增文字水印後的圖片

ll.jpg

zcx.jpg

這是一個最簡單的demo了,大家根據自己需求改進一下即可使用,還有另外一種說法是用  com.sun.image.codec.jpeg.JPEGImageEncoder

和com.sun.image.codec.jpeg.JPEGCodec  這兩個類處理,但是eclipse好像預設不允許使用這兩個類,網上有說解決辦法,我的弄不了,可能是因為我的jdk是1.8的吧

大家也可以自己試一下。

好的,謝謝大家、

相關推薦

利用jdk API 圖片新增文字水印

1.為了方便我把需要的資訊封裝成了一個類,  ImageInfo  類 package com.demo.water.image.bean; import java.awt.Color; import java.awt.Font; import java.io.Inpu

用Java實現給圖片新增文字水印-原始碼分享

直接上原始碼: 單張瓦片新增單個文字水印、可設定水印文字內容,字型,顏色,旋轉角度,透明度 controller層 import org.springframework.web.bind.annotation.GetMapping; import org.springframewo

java給圖片新增文字水印,以及docker容器新增中文字型支援

發現雖然簡單,但是水印內容通過編碼拼接在圖片地址後面,每次訪問都要加上,如果要儲存下來還需要自己存第二遍有水印的圖。可是我們並不需要沒有水印的原圖,於是決定通過程式碼新增,更自由。 程式碼如下: /** * 新增文字水印 * @param inpu

php 圖片新增文字水印 以及 圖片合成(微信快碼傳播)

1、圖片新增文字水印: $bigImgPath = 'backgroud.png'; $img = imagecreatefromstring(file_get_contents($bigImgPath)); $font = 'msyhl.ttc';//字型 $blac

圖片新增文字水印,實現文字換行居中

結合各位前輩的文章,實現文字新增到圖片上,換行居中。import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; impor

基於springBoot實現給圖片新增文字水印(附原始碼)

原始碼在最下面 程式背景 在網路中的很多地方都有水印的存在,比如微信公眾號上面的圖片,微博 等……所以老闆也要求我們在圖片上傳時新增自己的水印。 所以寫了一個工具類。

Android - 利用擴充套件函式Bitmap新增時間水印

專案技術分享系列——擴充套件函式為Bitmap新增文字水印 對圖片Bitmap繪製文字水印還是比較常見的需求,畢竟版權意識都在增強(使用者可以給自己圖片加上使用者名稱),還可以為使用者提供更多的資訊(例如視訊縮圖) 先上效果圖(比較簡單的效果,可繼續擴充套件實現),以下程式碼使用**Kotlin**語言編

Java 圖片新增水印

  package com.image import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.aw

javaCV開發詳解之4:轉流器實現(也可作為本地收流器、推流器,新增新增圖片文字水印,視訊影象幀儲存),實現rtsp/rtmp/本地檔案轉發到rtmp流媒體伺服器(基於javaCV-FFMPEG)

javaCV系列文章: 補充篇: 歡迎大家積極開心的加入討論群 javacpp-ffmpeg: 前言: 本章基於javaCV實現轉流器和收流器功能,測試採用監控rtsp地址轉發至rtmp伺服器地址 新增openCV儲存圖片功能。 補充:

Java寫的圖片新增水印的軟體(含原始碼)

介面如下:   效果圖如下:   拖拉操作如下: 支援功能: 1、可設定水印的字型(字型名字、樣式、大小) 2、可設定水印的位置(暫時只支援6個位置) 3、可設定水印的透明度,同時支援縮放 4、支援預覽(按Esc鍵退出) 5、支援批量新增水印 6、支援拖拉:拖拉進入主介

php給圖片文字水印

img black rom filename 這不 data- 等等 con rac <?php /*給圖片加文字水印的方法*/ $dst_path = ‘http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg‘

java圖片添加水印

red eat wim static 水印 圖片保存 images col port 添加水印的Demo如下,新建工程測試後如遇到問題,可以執行最後圖片指示更改即可。 import java.awt.AlphaComposite;import java.awt.Color;

python-嘗試將Excel文件保存圖片並加上水印

缺陷 white 導出 nms lsb Coding hrp 場景 phantom python-嘗試將Excel文件保存為圖片並加上水印 場景:並不是將 excel 的 chart 生成圖片,而是將整個表格內容生成圖片。 1. 準備工作 目前搜索不到已有的方法,只能

C# 使用 GDI+ 給圖片新增文字,並使文字自適應矩形區域

需求 分析&思路 具體實現 需求 需求是要做一個編輯文字的頁面。使用者在網頁端寫文字,文字區域是個矩形框,使用者可以通過下方的拖動條調節文字大小。 如下圖: 提交資料的時候前端傳文字區域的左上角和右

Python視覺化中的Matplotlib(6.散點圖以及詳細引數、圖形新增文字、註釋、箭頭以及它們的引數)

1. 散點圖        散點圖需要兩個引數x,y , 但此時,x不是表示x軸的刻度,而是每個點的橫軸座標!    散點圖 scatter() 引數說明:         &n

linux php 圖片新增文字,字型格式問題導致文字不顯示

在使用imagettfbbox()方法給圖片新增文字的時候,發現有些字型能顯示,有些字型不能顯示。 原本字型是otf格式,ttf格式就可以了 網上說linux支援ttf格式,不支援otf格式字型,但是有些otf沒有問題,思源黑體otf不能,只能轉ttf 不知道為什麼,有大神解釋下嗎

Java 圖片文字水印以及圖片水印 水印位置可選

package com.product.utils; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import org.apache.commo

如何給gif圖片新增文字?GIF圖片新增文字教程

我們經常會在網上下載一下GIF動態圖片,有時候我們想給我們下載的GIF動態圖片新增文字,這時候該怎麼操作,下面小編就來分享一下給GIF圖片新增文字的教程給大家,供大家參考和學習,希望大家都是能夠滿意的。   GIF格式可以存多幅彩色影象,如果把存於一個檔案中的

JAVA生成二維碼,圖片合成,圖片新增文字

首先引入zxing用於生成二維碼 <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>c

Pdf新增文字水印

    package com.zving.demo; import java.awt.Color; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutpu