-
java.imageIo给添加水印
添加时间:2013-7-2 点击量:比来项目在做一个商城项目, 项目上的要添加水印①,添加水印;②:添加文字水印;
一下供给下个办法,大师可以用得着:
package com.blogs.image;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/
水印
/
public class ImageUtil {
/
@param args
/
public static void main(String[] args) {
String srcImgPath = e:/2.png;
String iconPath = e:\\logo.jpg;
String targerPath = e:/3.jpg;
// 给添加水印
ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targerPath, 0, 0,
0, 0.1f);
// 给添加水印,水印扭转-45
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
// targerPath2, -45);
}
/
给添加水印、可设置水印扭转角度
@param iconPath
水印路径
@param srcImgPath
源路径
@param targerPath
目标路径
@param degree
水印扭转角度
@param width
宽度(与左比拟)
@param height
高度(与顶比拟)
@param clarity
透明度(小于1的数)越接近0越透明
/
public static void waterMarkImageByIcon(String iconPath, String srcImgPath,
String targerPath, Integer degree, Integer width, Integer height,
float clarity) {
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
System.out.println(width: + srcImg.getWidth(null));
System.out.println(height: + srcImg.getHeight(null));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 获得画笔对象
// Graphics g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
// 设置对线段的锯齿状边沿处理惩罚
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
if (null != degree) {
// 设置水印扭转
g.rotate(Math.toRadians(degree),
(double) buffImg.getWidth() / 2,
(double) buffImg.getHeight() / 2);
}
// 水印图象的路径 水印一般为gif或者png的,如许可设置透明度
ImageIcon imgIcon = new ImageIcon(iconPath);
// 获得Image对象。
Image img = imgIcon.getImage();
float alpha = clarity; // 透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 默示水印的地位
g.drawImage(img, width, height, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.dispose();
os = new FileOutputStream(targerPath);
// 生成
ImageIO.write(buffImg, JPG, os);
System.out.println(添加水印完成!);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/
给添加水印、可设置水印扭转角度
@param logoText
水印文字
@param srcImgPath
源路径
@param targerPath
目标路径
@param degree
水印扭转角度
@param width
宽度(与左比拟)
@param height
高度(与顶比拟)
@param clarity
透明度(小于1的数)越接近0越透明
/
public static void waterMarkByText(String logoText, String srcImgPath,
String targerPath, Integer degree, Integer width, Integer height,
Float clarity) {
// 主的路径
InputStream is = null;
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 获得画笔对象
// Graphics g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
// 设置对线段的锯齿状边沿处理惩罚
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
if (null != degree) {
// 设置水印扭转
g.rotate(Math.toRadians(degree),
(double) buffImg.getWidth() / 2,
(double) buffImg.getHeight() / 2);
}
// 设置色彩
g.setColor(Color.red);
// 设置 Font
g.setFont(new Font(宋体, Font.BOLD, 30));
float alpha = clarity;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 第一参数->设置的内容,后面两个参数->文字在上的坐标地位(x,y) .
g.drawString(logoText, width, height);
g.dispose();
os = new FileOutputStream(targerPath);
// 生成
ImageIO.write(buffImg, JPG, os);
System.out.println(添加水印文字完成!);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != is)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}还有一个缩放代码:
/
缩放(等比例缩放为指定大小,空白项目组以白色填充)
@param srcPath
源路径
@param destPath
缩放后路径
/
public static void zoomImage(String srcPath, String destPath, int destHeight, int destWidth) {
try {
BufferedImage srcBufferedImage = ImageIO.read(new File(srcPath));
int imgWidth = destWidth;
int imgHeight = destHeight;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
if (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight 1.0 / srcHeight) srcWidth));
} else {
imgHeight = (int) Math.round(((destWidth 1.0 / srcWidth) srcHeight));
}
BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = destBufferedImage.createGraphics();
graphics2D.setBackground(Color.WHITE);
graphics2D.clearRect(0, 0, destWidth, destHeight);
graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
graphics2D.dispose();
ImageIO.write(destBufferedImage, JPEG, new File(destPath));
} catch (IOException e) {
e.printStackTrace();
}
}
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》