package
com.longtop.core.tools.file;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.AlphaComposite;
/** */ /**
* 给图片加水印公共类
*
* @author liqiang4j
*/
public class WaterMarkImage ... {
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fileDest:文字水印图片保存位置
* @param alpha:透明度(0.0-1.0f)
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,String fileDest,float alpha,
String fontName,int fontStyle,Color fontColor,int fontSize,int x,int y)...{
ImageIcon imgIcon = new ImageIcon(filePath);
Image theImg = imgIcon.getImage();
int width = theImg.getWidth(null);
int height = theImg.getHeight(null);
BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
g.drawImage(theImg, 0, 0, width, height, null);
g.setColor(fontColor);
g.setFont(new Font(fontName, fontStyle, fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawString(markContent, x, height - y);
g.dispose();
FileOutputStream out = null;
try ...{
out = new FileOutputStream(fileDest);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
// encoder.encode(bimage, param);
encoder.encode(bimage);
out.close();
}
catch (Exception e) ...{
return false;
}
return true;
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fileDest:文字水印图片保存位置
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,String fileDest,int x,int y)...{
return createStringMark(filePath, markContent, fileDest, 1f, "宋体", Font.PLAIN, Color.BLACK, 36, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param alpha:透明度(0.0-1.0f)
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,float alpha,String fontName,
int fontStyle,Color fontColor,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, filePath, alpha, fontName, fontStyle, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,String fontName,int fontStyle,
Color fontColor,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, filePath, 1.0f, fontName, fontStyle, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,int fontStyle,Color fontColor,
int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, "宋体", fontStyle, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,Color fontColor,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, Font.PLAIN, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, Color.BLACK, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,int x,int y)...{
return createStringMark(filePath, markContent, 36, x, y);
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param fileDest:添加水印后的图片保存路径
* @param alpha:透明度
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,String fileDest,float alpha,int x,int y)...{
// 要处理的原始图片
ImageIcon icoInput = new ImageIcon(filePath);
Image imgInput = icoInput.getImage();
int width = imgInput.getWidth(null);
int height = imgInput.getHeight(null);
BufferedImage buffInput = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 要添加上来的水印
ImageIcon icoADD = new ImageIcon(imgPath);
Image imgADD = icoADD.getImage();
int w = imgADD.getWidth(null);
int h = imgADD.getHeight(null);
// 绘图
Graphics2D g = buffInput.createGraphics();
g.drawImage(imgInput, 0, 0, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 下面代码的前面五个参数:图片,x坐标,y坐标,图片宽度,图片高度
g.drawImage(imgADD, x, y, w, h, null); // 靠左上绘制,x和y都是10
g.dispose();
try ...{
FileOutputStream out = new FileOutputStream(fileDest);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(buffInput);
// encoder.encode(buffInput, param);
encoder.encode(buffInput);
out.close();
}
catch (Exception e) ...{
return false;
}
return true;
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param alpha:透明度
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,float alpha,int x,int y)...{
return createImageMark(filePath, imgPath, filePath, alpha, x, y);
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,int x,int y)...{
return createImageMark(filePath, imgPath, filePath, 1.0f, x, y);
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param fileDest:添加水印后的图片保存路径
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,String fileDest,int x,int y)...{
return createImageMark(filePath, imgPath, fileDest, 1.0f, x, y);
}
// main方法:程序入口
public static void main(String args[])...{
// 文字水印
WaterMarkImage.createStringMark("F:/waterMark/source.jpg", "生成图像例子。。。。。。", 10,10);
WaterMarkImage.createImageMark("F:/waterMark/source.JPG", "F:/waterMark/mark.JPG", "F:/waterMark/source2.JPG",0.5f, 20, 20);
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.AlphaComposite;
/** */ /**
* 给图片加水印公共类
*
* @author liqiang4j
*/
public class WaterMarkImage ... {
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fileDest:文字水印图片保存位置
* @param alpha:透明度(0.0-1.0f)
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,String fileDest,float alpha,
String fontName,int fontStyle,Color fontColor,int fontSize,int x,int y)...{
ImageIcon imgIcon = new ImageIcon(filePath);
Image theImg = imgIcon.getImage();
int width = theImg.getWidth(null);
int height = theImg.getHeight(null);
BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
g.drawImage(theImg, 0, 0, width, height, null);
g.setColor(fontColor);
g.setFont(new Font(fontName, fontStyle, fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawString(markContent, x, height - y);
g.dispose();
FileOutputStream out = null;
try ...{
out = new FileOutputStream(fileDest);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
// encoder.encode(bimage, param);
encoder.encode(bimage);
out.close();
}
catch (Exception e) ...{
return false;
}
return true;
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fileDest:文字水印图片保存位置
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,String fileDest,int x,int y)...{
return createStringMark(filePath, markContent, fileDest, 1f, "宋体", Font.PLAIN, Color.BLACK, 36, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param alpha:透明度(0.0-1.0f)
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,float alpha,String fontName,
int fontStyle,Color fontColor,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, filePath, alpha, fontName, fontStyle, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontName:字体名称
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,String fontName,int fontStyle,
Color fontColor,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, filePath, 1.0f, fontName, fontStyle, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontStyle:字型
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,int fontStyle,Color fontColor,
int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, "宋体", fontStyle, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontColor:字体颜色
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,Color fontColor,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, Font.PLAIN, fontColor, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param fontSize:字体大小
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,int fontSize,int x,int y)...{
return createStringMark(filePath, markContent, Color.BLACK, fontSize, x, y);
}
/** *//**
* 给图片添加文字水印
*
* @param filePath:需要添加水印的图片的路径
* @param markContent:水印的文字
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createStringMark(String filePath,String markContent,int x,int y)...{
return createStringMark(filePath, markContent, 36, x, y);
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param fileDest:添加水印后的图片保存路径
* @param alpha:透明度
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,String fileDest,float alpha,int x,int y)...{
// 要处理的原始图片
ImageIcon icoInput = new ImageIcon(filePath);
Image imgInput = icoInput.getImage();
int width = imgInput.getWidth(null);
int height = imgInput.getHeight(null);
BufferedImage buffInput = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 要添加上来的水印
ImageIcon icoADD = new ImageIcon(imgPath);
Image imgADD = icoADD.getImage();
int w = imgADD.getWidth(null);
int h = imgADD.getHeight(null);
// 绘图
Graphics2D g = buffInput.createGraphics();
g.drawImage(imgInput, 0, 0, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
// 下面代码的前面五个参数:图片,x坐标,y坐标,图片宽度,图片高度
g.drawImage(imgADD, x, y, w, h, null); // 靠左上绘制,x和y都是10
g.dispose();
try ...{
FileOutputStream out = new FileOutputStream(fileDest);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(buffInput);
// encoder.encode(buffInput, param);
encoder.encode(buffInput);
out.close();
}
catch (Exception e) ...{
return false;
}
return true;
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param alpha:透明度
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,float alpha,int x,int y)...{
return createImageMark(filePath, imgPath, filePath, alpha, x, y);
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,int x,int y)...{
return createImageMark(filePath, imgPath, filePath, 1.0f, x, y);
}
/** *//**
* 给图片添加图像水印
*
* @param filePath:需要添加水印的图片的路径
* @param imgPath:水印图片路径
* @param fileDest:添加水印后的图片保存路径
* @param x:横坐标
* @param y:竖坐标
* @return true:成功;false:失败
*/
public static boolean createImageMark(String filePath,String imgPath,String fileDest,int x,int y)...{
return createImageMark(filePath, imgPath, fileDest, 1.0f, x, y);
}
// main方法:程序入口
public static void main(String args[])...{
// 文字水印
WaterMarkImage.createStringMark("F:/waterMark/source.jpg", "生成图像例子。。。。。。", 10,10);
WaterMarkImage.createImageMark("F:/waterMark/source.JPG", "F:/waterMark/mark.JPG", "F:/waterMark/source2.JPG",0.5f, 20, 20);
}
}