/**
*
* 生成水印
*
*/
public class ImageMarkUtil {
/** 水印透明度 */
private static float alpha = 0.5f;
/** 水印图片旋转角度 */
private static double degree = 0f;
private static int interval = 0;
/**
* 设置水印参数,不设置就使用默认值
*
* @param alpha
* 水印透明度
* @param degree
* 水印图片旋转角度 *
* @param interval
* 水印图片间隔
*/
public static void setImageMarkOptions(float alpha, int degree, int interval) {
if (alpha != 0.0f) {
ImageMarkUtil.alpha = alpha;
}
if (degree != 0f) {
ImageMarkUtil.degree = degree;
}
if (interval != 0f) {
ImageMarkUtil.interval = interval;
}
}
/**
* 给图片添加水印图片
*
* @param waterImgPath
* 水印图片路径
* @param srcImgPath
* 源图片路径
* @param targerPath
* 目标图片路径
*/
public static void waterMarkByImg(String waterImgPath, String srcImgPath, String targerPath) throws Exception {
waterMarkByImg(waterImgPath, srcImgPath, targerPath, 0);
}
/**
* 给图片添加水印图片
*
* @param waterImgPath
* 水印图片路径
* @param srcImgPath
* 源图片路径
* @param targerPath
* 目标图片路径
*/
public static void waterMarkByImg(String waterImgPath, String srcImgPath) {
try {
waterMarkByImg(waterImgPath, srcImgPath, srcImgPath, 0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 给图片添加水印图片、可设置水印图片旋转角度
*
* @param waterImgPath
* 水印图片路径
* @param srcImgPath
* 源图片路径
* @param targerPath
* 目标图片路径
* @param degree
* 水印图片旋转角度
*/
public static void waterMarkByImg(String waterImgPath, String srcImgPath, String targerPath, double degree)
throws Exception {
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);
// 1、得到画笔对象
Graphics2D g = buffImg.createGraphics();
// 2、设置对线段的锯齿状边缘处理
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);
// 3、设置水印旋转
if (0 != degree) {
g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);
}
// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度
ImageIcon imgIcon = new ImageIcon(waterImgPath);
// 5、得到Image对象。
Image img = imgIcon.getImage();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 6、水印图片的位置(循环布满整张图片)
for (int height = interval + imgIcon.getIconHeight(); height < buffImg.getHeight(); height = height
+ interval + imgIcon.getIconHeight()) {
for (int weight = interval + imgIcon.getIconWidth(); weight < buffImg.getWidth(); weight = weight
+ interval + imgIcon.getIconWidth()) {
g.drawImage(img, weight - imgIcon.getIconWidth(), height - imgIcon.getIconHeight(), null);
}
}
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 7、释放资源
g.dispose();
// 8、生成图片
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();
}
}
}
public static void main(String[] args) {
//循环遍历(这里是双层循环)
for(int i=0; i<listFiles.length; i++) {
File file = listFiles[i];
System.out.println(listFiles[i].getName());
File[] files = file.listFiles();
stringBuffer.setLength(0);
ImageMarkUtil.waterMarkByImg("F:\\image\\shuiying.png", stringBuffer.toString(), "F:\\imagess\\" + listFiles[i].getName() + "\\" + files[j].getName(), -15);
}
}
}
}
}
*
* 生成水印
*
*/
public class ImageMarkUtil {
/** 水印透明度 */
private static float alpha = 0.5f;
/** 水印图片旋转角度 */
private static double degree = 0f;
private static int interval = 0;
/**
* 设置水印参数,不设置就使用默认值
*
* @param alpha
* 水印透明度
* @param degree
* 水印图片旋转角度 *
* @param interval
* 水印图片间隔
*/
public static void setImageMarkOptions(float alpha, int degree, int interval) {
if (alpha != 0.0f) {
ImageMarkUtil.alpha = alpha;
}
if (degree != 0f) {
ImageMarkUtil.degree = degree;
}
if (interval != 0f) {
ImageMarkUtil.interval = interval;
}
}
/**
* 给图片添加水印图片
*
* @param waterImgPath
* 水印图片路径
* @param srcImgPath
* 源图片路径
* @param targerPath
* 目标图片路径
*/
public static void waterMarkByImg(String waterImgPath, String srcImgPath, String targerPath) throws Exception {
waterMarkByImg(waterImgPath, srcImgPath, targerPath, 0);
}
/**
* 给图片添加水印图片
*
* @param waterImgPath
* 水印图片路径
* @param srcImgPath
* 源图片路径
* @param targerPath
* 目标图片路径
*/
public static void waterMarkByImg(String waterImgPath, String srcImgPath) {
try {
waterMarkByImg(waterImgPath, srcImgPath, srcImgPath, 0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 给图片添加水印图片、可设置水印图片旋转角度
*
* @param waterImgPath
* 水印图片路径
* @param srcImgPath
* 源图片路径
* @param targerPath
* 目标图片路径
* @param degree
* 水印图片旋转角度
*/
public static void waterMarkByImg(String waterImgPath, String srcImgPath, String targerPath, double degree)
throws Exception {
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);
// 1、得到画笔对象
Graphics2D g = buffImg.createGraphics();
// 2、设置对线段的锯齿状边缘处理
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);
// 3、设置水印旋转
if (0 != degree) {
g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);
}
// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度
ImageIcon imgIcon = new ImageIcon(waterImgPath);
// 5、得到Image对象。
Image img = imgIcon.getImage();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 6、水印图片的位置(循环布满整张图片)
for (int height = interval + imgIcon.getIconHeight(); height < buffImg.getHeight(); height = height
+ interval + imgIcon.getIconHeight()) {
for (int weight = interval + imgIcon.getIconWidth(); weight < buffImg.getWidth(); weight = weight
+ interval + imgIcon.getIconWidth()) {
g.drawImage(img, weight - imgIcon.getIconWidth(), height - imgIcon.getIconHeight(), null);
}
}
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 7、释放资源
g.dispose();
// 8、生成图片
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();
}
}
}
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
//file为要批量添加图片水印的路径,此路径为文件夹
//循环遍历(这里是双层循环)
for(int i=0; i<listFiles.length; i++) {
File file = listFiles[i];
System.out.println(listFiles[i].getName());
if (file.isDirectory()) {
//因为是双层循环,所以要创建文件夹目录,来存储添加了水印的图片
File[] files = file.listFiles();
for (int j=0; j<files.length; j++) {
//这里的files全都是图片文件,注:在图片文件中一般都会存在Thumbs.db这个文件,大概是浏览图片产生出来的所以需要排除。
stringBuffer.setLength(0);
stringBuffer.append(files[j].getPath());
//设置水印参数
ImageMarkUtil.setImageMarkOptions(0.5f, 0, 20);
//生成水印图片; 第一个参数为要添加的水印图片的路径(http://www.qt86.com 这个网站可以制作你要的水印图片)
//ImageMarkUtil.waterMarkByImg("F:\\image\\23_200x124.png", stringBuffer.toString()); //这个方法是直接在原图片上加水印ImageMarkUtil.waterMarkByImg("F:\\image\\shuiying.png", stringBuffer.toString(), "F:\\imagess\\" + listFiles[i].getName() + "\\" + files[j].getName(), -15);
}
}
}
}
}
}
//自此批量给图片添加水印完成。