生成水印(添加图片,生成文字或图)
问题
1.只能为jpg格式的加水印
2.目标图大小不同写的字怎么控制大小和位置
3.想在右下角加字或图,怎么控制
添加水印
package test;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.*;
import javax.swing.*;
public class Test
{
public static void main(String[]args) throws Exception{
//1.jpg是你的 主图片的路径 , 1.jpg是要存在的
InputStream is = new FileInputStream("d:/test/1.jpg");
//通过JPEG图象流创建JPEG数据流解码器
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
//解码当前JPEG数据流,返回BufferedImage对象
BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
//得到画笔对象
Graphics g = buffImg.getGraphics();
//创建你要附加的图象。
//2.jpg是你的小图片的路径 2.jpg是要存在的
ImageIcon imgIcon = new ImageIcon("d:/test/2.jpg");
//得到Image对象。
Image img = imgIcon.getImage();
//将小图片绘到大图片上。
//5,300 .表示你的小图片在大图片上的位置。
g.drawImage(img,5,330,null);
//设置颜色。
g.setColor(Color.BLACK);
//最后一个参数用来设置字体的大小
Font f = new Font("宋体",Font.BOLD,30);
g.setFont(f);
//10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
g.drawString("默哀555555。。。。。。。",10,30);
g.dispose();
//union.jpg是生成的
OutputStream os = new FileOutputStream("d:/test/union.jpg");
//创键编码器,用于编码内存中的图象数据。
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
en.encode(buffImg);
is.close();
os.close();
System.out.println ("合成结束。。。。。。。。");
}
}
2
package test;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.*;
import javax.swing.*;
public class Test
{
public static void main(String[]args) throws Exception{
//pressImage("d:/test/1.jpg", "d:/test/2.jpg", "d:/test/pp.jpg", 30, 30);
creatText("新华网............","d:/test/1.jpg","d:/test/test.jpg",10, 30,"宋体",1,Color.green,15);
System.out.println ("水印添加结束。。。。。。。。");
}
/* 添加图片水印
* smallImg 附加到目标图片上的小图片 "d:/test/2.jpg"
* targetImag 目标图片(想添加水印的图片) "d:/test/1.jpg"
* waterImg 生成的水印图片 "d:/test/union.jpg"
* x,y偏移
*/
public final static void pressImage(String targetImg,String smallImg,String waterImg,int x, int y) {
try{
InputStream is = new FileInputStream(targetImg);
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
Graphics g = buffImg.getGraphics();
ImageIcon imgIcon = new ImageIcon(smallImg);
Image img = imgIcon.getImage();
g.drawImage(img,x,y,null);
OutputStream os = new FileOutputStream(waterImg);
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
en.encode(buffImg);
is.close();
os.close();
}
catch (Exception e) {
System.out.println(e);
}
}
/* 生成文字水印
* targetImag 目标图片(想添加水印的图片) "d:/test/1.jpg"
* waterImg 生成的水印图片 "d:/test/union.jpg"
* x,y偏移
* font "宋体"
* style Font.Bold
* color Color.BLACK
* size 字体大小
*
* Text 要生成在图片上的水印文字 "默哀555555。。。。。。。"
*/
public final static void creatText(String Text,String targetImg,String waterImg,int x, int y,String font,int style,Color color,int size) {
try{
InputStream is = new FileInputStream(targetImg);
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
Graphics g = buffImg.getGraphics();
g.setColor(color);
Font f = new Font(font,style,size);
g.setFont(f);
g.drawString(Text,x,y);
g.dispose();
OutputStream os = new FileOutputStream(waterImg);
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
en.encode(buffImg);
is.close();
os.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}