package image.demo;
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.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class ImageDemoOne {
public static void main(String[] args) throws IOException {
String srcImgPath="D:\\images\\1.png"; //a源图片地址
String srcImgPath4="D:\\images\\4.png"; //a源水印图片地址
String tarImgPath="D:\\images\\2.png"; //a待存储的地址
String tarImgPath3="D:\\images\\3.png"; //a待存储的地址
String waterMarkContent="图片来源:http://blog.csdn.net/zjq_1314520"; //a水印内容
Color color=new Color(255,255,255,128); //a水印图片色彩以及透明度
new ImageDemoOne().addWaterMark(srcImgPath, tarImgPath, waterMarkContent, color);
markImgMark(srcImgPath4, srcImgPath, tarImgPath3);
}
/**
* @param srcImgPath 源图片路径
* @param tarImgPath 保存的图片路径
* @param waterMarkContent 水印内容
* @param markContentColor 水印颜色
* @param font 水印字体
*/
public void addWaterMark(String srcImgPath, String tarImgPath,
String waterMarkContent,Color markContentColor) {
try {
// a读取原图片信息
File srcImgFile = new File(srcImgPath);//得到文件
Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
int srcImgHeight = srcImg.getHeight(null);//获取图片的高
// a加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
g.setColor(markContentColor); //a根据图片的背景设置水印颜色
int fontLength = (int) (srcImgWidth*0.055);
Font font2 = new Font("微软雅黑", Font.PLAIN, fontLength);
g.setFont(font2); //a设置字体
//a设置水印的坐标
int x = (int) (srcImgWidth-getWatermarkLength(waterMarkContent,g)-fontLength);
int y = (int) (srcImgHeight*0.96);
g.drawString(waterMarkContent, x, y); //a画出水印
g.dispose();
// a输出图片
FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(bufImg, "png", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
} catch (Exception e) {
// TODO: handle exception
}
}
public int getWatermarkLength(String waterMarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
}
/**
* 为图片添加图片水印
* @param watermarkUrl 原图
* @param source 水印图片
* @param output 制作完成的图片
* @return
* @throws IOException
*/
public static String markImgMark(String watermarkUrl,
String source, String output) throws IOException {
String result = "添加图片水印出错";
File file = new File(source);
Image img = ImageIO.read(file);
int width = img.getWidth(null);//水印宽度
int height = img.getHeight(null);//水印高
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(img.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
ImageIcon imgIcon = new ImageIcon(watermarkUrl);
Image con = imgIcon.getImage();
float clarity = 0.6f;//透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, clarity));
g.drawImage(con, 10, 10, null);//水印的位置
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.dispose();
File sf = new File(output);
ImageIO.write(bi, "png", sf); // 保存图片
System.out.println("添加图片水印成功");
return result;
}
}
java 实现图片上加字 两个图片合并 图片上加一层朦胧字体
原文:https://www.cnblogs.com/csjdaima/p/11320505.html