您的位置:首页 > 编程语言 > Java开发

java给图片添加水印

2016-10-28 11:02 260 查看

package utils;

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 java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.imageio.ImageIO;

public class ImageMarkLogoUtil {
// 水印透明度
private static float alpha = 0.95f;
// 水印横向位置
private static int positionWidth = 82;
// 水印纵向位置
private static int positionHeight = 545;

public static void main(String[] args) {
//底层图片
String srcImgPath = "H:/123.jpg";
//保存位置
String targerTextPath = "h:/qie_texst.jpg";
//设置文字坐标key与 testValue()的key对应
Map<String, String[]> position = new HashMap<String, String[]>();
// x y
String sstr[] = { "100", "50" };
position.put("name", sstr);
String sstr2[] = { "225", "50" };
position.put("two", sstr2);
String sstr3[] = { "225", "100" };
position.put("three", sstr3);
String sstr4[] = { "225", "150" };
position.put("four", sstr4);
String sstr5[] = { "515", "150" };
position.put("five", sstr5);
String sstr6[] = { "225", "200" };
position.put("sixe", sstr6);
String sstr7[] = { "515", "200" };
position.put("seven", sstr7);

Map<String, String> value = new HashMap<String, String>();
value.put("name", "姓名: 测试");
value.put("two", "内科-->内分泌科 诉求:测试测试");
value.put("three", "提交资料日期:2016年10月1日 反馈日期 :2016年10月2日");
value.put("four", "国内医院:新华医院");
value.put("five", "医生:XXX 手机:186xxxxxxxx");
value.put("sixe", "国外医院:约翰霍普金斯");
value.put("seven", "医生:XXX");
String s = "这种情况可以诊断为结节性甲状腺肿,但这是早期表现,至少可以说不是甲状腺癌。你可以去查一下FT3 FT4TSH,看看甲状腺功能如何。治疗:1.吃左旋甲状腺素片,50ug(即一片)一天一次。2.定期检查甲状腺,包括甲状腺B超,FT3 FT4 TSH。3.多吃点海带等海货,以增加体内的碘含量。不用担心,这不是大毛病,祝您早日康复。";
System.out.println(s.trim().length());
System.out.println(s.length());
int index = s.trim().length()/51;
if(s.length()%51!=0){
index +=1;
}
for(int i=0;i<index;i++){
if(i==index-1){
value.put("nigth"+i, s.trim().substring(0+(51*i), s.length() ));
}else{
value.put("nigth"+i, s.trim().substring(0+(51*i), 51+(51*i) ));
}
int n = 250+(i*28) ;
String str[] = { "100", ""+n };
position.put("nigth"+i, str);
}

ImageMarkLogoUtil.markImageByTexts(value, position, srcImgPath, targerTextPath);
}

/**
* 给图片添加水印文字、可设置水印文字的旋转角度
*
* @param logoText
* @param srcImgPath
* @param targerPath
* @param degree
*/
public static void markImageByTexts(Map<String, String> value, Map<String, String[]> position, String srcImgPath,
String targerPath) {

InputStream is = null;
OutputStream os = null;

try {
// 1、源图片
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null),
BufferedImage.TYPE_INT_RGB);

// 2、得到画笔对象

Iterator<String> positionIter = position.keySet().iterator();
String key = "";
String logotext = "";
String[] xy;

Graphics2D g = buffImg.createGraphics();
g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

// 水印文字字体
Font font = new Font("宋体", Font.PLAIN, 19);
// 水印文字颜色
Color color = null;

while (positionIter.hasNext()) {
key = positionIter.next();
xy = position.get(key);
logotext = value.get(key);
if(key.lastIndexOf("nigth")==-1){
color = Color.blue;
}else{
color = new Color(128, 0, 128);
}
System.out.println("key:" + key + ",value:" + logotext);
if (xy != null && xy.length == 2)

// 5、设置水印文字颜色
g.setColor(color);

// 6、设置水印文字Font
g.setFont(font);

// 7、设置水印文字透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));

// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
g.drawString(logotext, Integer.valueOf(xy[0]), Integer.valueOf(xy[1]));
}
// 9、释放资源
g.dispose();
// 10、生成图片
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();
}
}
}

}

原文地址    我把他的问题给修复了,把新代码贴上



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 水印