Java添加水印 图片水印 文字水印
水印的处理。。。以下有两种方式:
第一种是添加文字水印;
第二种是添加图片水印;
现在附上代码 2种的源码
package com。
yjf。image;
import java。awt。AlphaComposite;
import java。awt。Color;
import java。
awt。Font;
import java。awt。Graphics2D;
import java。awt。Image;
import java。awt。geom。AffineTransform;
import java。
awt。image。AffineTransformOp;
import java。awt。image。BufferedImage;
import java。io。File;
import java。
io。IOException;
import javax。imageio。ImageIO;
/**
?* 图片工具类, 图片水印,文字水印,缩放,补白等
?* @author Carl He
?*/
public final class ImageUtils {
? ? /**图片格式:JPG*/
? ? private static final String PICTRUE_FORMATE_JPG = "jpg";
? ? private ImageUtils(){}
? ? /**
? ? ?* 添加图片水印
? ? ?* @param targetImg 目标图片路径,如:C://myPictrue//1。
jpg
? ? ?* @param waterImg ?水印图片路径,如:C://myPictrue//logo。png
? ? ?* @param x 水印图片距离目标图片左侧的偏移量,如果x widthDiff){
? ? ? ? ? ? ? ? ? ? x = widthDiff;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(y heightDiff){
? ? ? ? ? ? ? ? ? ? y = heightDiff;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? g。
drawImage(waterImage, x, y, width_1, height_1, null); // 水印文件结束
? ? ? ? ? ? ? ? g。dispose();
? ? ? ? ? ? ? ? ImageIO。
write(bufferedImage, PICTRUE_FORMATE_JPG, file);
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e。
printStackTrace();
? ? ? ? ? ? }
? ? }
? ? /**
? ? ?* 添加文字水印
? ? ?* @param targetImg 目标图片路径,如:C://myPictrue//1。
jpg
? ? ?* @param pressText 水印文字, 如:中国证券网
? ? ?* @param fontName 字体名称, ? ?如:宋体
? ? ?* @param fontStyle 字体样式,如:粗体和斜体(Font。
BOLD|Font。ITALIC)
? ? ?* @param fontSize 字体大小,单位为像素
? ? ?* @param color 字体颜色
? ? ?* @param x 水印文字距离目标图片左侧的偏移量,如果x widthDiff){
? ? ? ? ? ? ? ? x = widthDiff;
? ? ? ? ? ? }
? ? ? ? ? ? if(y heightDiff){
? ? ? ? ? ? ? ? y = heightDiff;
? ? ? ? ? ? }
? ? ? ? ? ? g。
drawString(pressText, x, y height_1);
? ? ? ? ? ? g。dispose();
? ? ? ? ? ? ImageIO。write(bufferedImage, PICTRUE_FORMATE_JPG, file);
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e。
printStackTrace();
? ? ? ? }
? ? }
? ? /**
http://www。qi788。com/info-43。
html
? ? ?* 获取字符长度,一个汉字作为 1 个字符, 一个英文字母作为 0。5 个字符
? ? ?* @param text
? ? ?* @return 字符长度,如:text="中国",返回 2;text="test",返回 2;text="中国ABC",返回 4。
*/
? ? public static int getLength(String text) {
? ? ? ? int textLength = text。length();
? ? ? ? int length = textLength;
? ? ? ? for (int i = 0; i 1) {
? ? ? ? ? ? ? ? length ;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return (length % 2 == 0) ? length / 2 : length / 2 1;
? ? }
? ? /**
? ? ?* 图片缩放
? ? ?* @param filePath 图片路径
? ? ?* @param height 高度
? ? ?* @param width 宽度
? ? ?* @param bb 比例不对时是否需要补白
*/
? ? public static void resize(String filePath, int height, int width, boolean bb) {
? ? ? ? try {
? ? ? ? ? ? double ratio = 0; //缩放比例 ? ?
? ? ? ? ? ? File f = new File(filePath); ?
? ? ? ? ? ? BufferedImage bi = ImageIO。
read(f); ?
? ? ? ? ? ? Image itemp = bi。getScaledInstance(width, height, BufferedImage。SCALE_SMOOTH); ?
? ? ? ? ? ? //计算比例 ?
? ? ? ? ? ? if ((bi。
getHeight() > height) || (bi。getWidth() > width)) { ?
? ? ? ? ? ? ? ? if (bi。getHeight() > bi。getWidth()) { ?
? ? ? ? ? ? ? ? ? ? ratio = (new Integer(height))。
doubleValue() / bi。getHeight(); ?
? ? ? ? ? ? ? ? } else { ?
? ? ? ? ? ? ? ? ? ? ratio = (new Integer(width))。
doubleValue() / bi。getWidth(); ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? AffineTransformOp op = new AffineTransformOp(AffineTransform。
getScaleInstance(ratio, ratio), null); ?
? ? ? ? ? ? ? ? itemp = op。filter(bi, null); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if (bb) { ?
? ? ? ? ? ? ? ? BufferedImage image = new BufferedImage(width, height, BufferedImage。
TYPE_INT_RGB); ?
? ? ? ? ? ? ? ? Graphics2D g = image。createGraphics(); ?
? ? ? ? ? ? ? ? g。setColor(Color。
white); ?
? ? ? ? ? ? ? ? g。fillRect(0, 0, width, height); ?
? ? ? ? ? ? ? ? if (width == itemp。
getWidth(null)) ?
? ? ? ? ? ? ? ? ? ? g。drawImage(itemp, 0, (height - itemp。getHeight(null)) / 2, itemp。getWidth(null), itemp。
getHeight(null), Color。white, null); ?
? ? ? ? ? ? ? ? else ?www。2cto。com
? ? ? ? ? ? ? ? ? ? g。
drawImage(itemp, (width - itemp。getWidth(null)) / 2, 0, itemp。getWidth(null), itemp。getHeight(null), Color。white, null); ?
? ? ? ? ? ? ? ? g。
dispose(); ?
? ? ? ? ? ? ? ? itemp = image; ?
? ? ? ? ? ? }
? ? ? ? ? ? ImageIO。write((BufferedImage) itemp, "jpg", f); ?
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e。
printStackTrace();
? ? ? ? }
? ? }
? ? public static void main(String[] args) throws IOException {
? ? ? pressText("D:/yjf/myworkspace/SimilarImageSearch/images/1。
jpg", "水印测试文字", "宋体", Font。BOLD, 24, Color。red, 50, 50, 0。3f);
? ? }
。
全部