package net.loyin.util.image;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* 图片合并
*/
public class AddWatermark
{
/**
* 获得原始图片的Image对象
*/
private BufferedImage OriginalImage=null;
private String Original;
private String Append;
private int OriginalWidth;//原始图片宽
private int OriginalHeigth;//原始图片的高
private int AppendWidth;//添加图片的宽
private int AppendHeigth;//添加图片的高
private int X;//添加图片的位X位置
private int Y;//添加图片的位Y位置
private String saveas;//保存路径
/**
* @param saveas the saveas to set
*/
public void setSaveas(String saveas) {
this.saveas = saveas;
}
private BufferedImage AppendImage=null;
/**
* 坐标
* 上左(默认)
* <pre>
* # * *
* * * *
* * * *
* </pre>
*/
public static final int COORDINATE_UP_LEFT=1;
/**
* 坐标
* 上中
* <pre>
* * # *
* * * *
* * * *
* </pre>
*/
public static final int COORDINATE_UP_MIDDLE=2;
/**
* 坐标
* 中左
* <pre>
* * * *
* # * *
* * * *
* </pre>
*/
public static final int COORDINATE_UP_RIGHT=3;
/**
* 坐标
* 上右
* <pre>
* * * #
* * * *
* * * *
* </pre>
*/
public static final int COORDINATE_MIDDLE_LEFT=4;
/**
* 坐标
* X居中Y居中
* <pre>
* * * *
* * # *
* * * *
* </pre>
*/
public static final int COORDINATE_MIDDLE_MIDDLE=5;
/**
* 坐标
* 中右
* <pre>
* * * *
* * * #
* * * *
* </pre>
*/
public static final int COORDINATE_MIDDLE_RIGHT=6;
/**
* 坐标
* 下左
* <pre>
* * * *
* * * *
* # * *
* </pre>
*/
public static final int COORDINATE_DOWN_LEFT=7;
/**
* 坐标
* 下中
* <pre>
* * * *
* * * *
* * # *
* </pre>
*/
public static final int COORDINATE_DOWN_MIDDLE=8;
/**
* 坐标
* 下右
* <pre>
* * * *
* * * *
* * * #
* </pre>
*/
public static final int COORDINATE_DOWN_RIGHT=9;
public AddWatermark(){}
/**
* @param originalWidth the originalWidth to set
*/
protected void setOriginalWidth(int originalWidth) {
OriginalWidth = originalWidth;
}
/**
* @param appendWidth the appendWidth to set
*/
protected void setAppendWidth(int appendWidth) {
AppendWidth = appendWidth;
}
/**
* @param appendHeigth the appendHeigth to set
*/
protected void setAppendHeigth(int appendHeigth) {
AppendHeigth = appendHeigth;
}
public AddWatermark(String Original, String Append)
{
this.Original=Original;
this.Append=Append;
}
/**
* @param originalImage the originalImage to set
*/
protected void setOriginalImage(BufferedImage originalImage) {
OriginalImage = originalImage;
}
/**
* @param originalHeigth the originalHeigth to set
*/
protected void setOriginalHeigth(int originalHeigth) {
OriginalHeigth = originalHeigth;
}
/**
* @param appendImage the appendImage to set
*/
protected void setAppendImage(BufferedImage appendImage) {
AppendImage = appendImage;
}
/**原始图片的高
* @return the originalHeigth
*/
protected int getOriginalHeigth() {
return OriginalHeigth;
}
/**添加图片的宽
* @return the appendWidth
*/
protected int getAppendWidth() {
return AppendWidth;
}
/**添加图片的高
* @return the appendHeigth
*/
protected int getAppendHeigth() {
return AppendHeigth;
}
/**
* 原始图片的宽
* @return
*/
protected int getOriginalWidth()
{
return OriginalWidth;
}
/**
* 获得添加图片的信息
* @return
*/
protected BufferedImage getAppendImage()
{
return this.AppendImage;
}
/**
* 获得原始图片的Image对象
* @return
*/
public BufferedImage getOriginalImage()
{
return this.OriginalImage;
}
/**
* 获得原始图片的地址
* @return
*/
public String getOriginal() {
return Original;
}
/**
* 设置原始图片的路径
* @param originalImage
*/
public void setOriginalImage(String originalImage) {
Original = originalImage;
}
/**
* 获得追加的图片路径
* @return
*/
public String getAppend() {
return Append;
}
/**
* 设置追加的图片路径
* @param appendImage
*/
public void setAppendImage(String appendImage)
{
Append = appendImage;
}
/**
*获得原始图片信息
* @return 成功返回true 否则返回false
*/
protected void readOriginalImage() throws Exception
{
if(this.OriginalImage==null)
this.OriginalImage=ImageIO.read(new File(this.Original));
if(OriginalImage!=null)
{
this.OriginalWidth=this.OriginalImage.getWidth();
this.OriginalHeigth=this.OriginalImage.getHeight();
}
}
/**
* 获得添加图片的信息
* @return 成功返回true 否则返回false
*/
protected boolean readAppendImage()
{
boolean succeedread=false;
try
{
if(this.AppendImage==null)
this.AppendImage=ImageIO.read(new File(this.Append));
if(AppendImage!=null)
{
this.AppendHeigth=this.AppendImage.getHeight();
this.AppendWidth=this.AppendImage.getWidth();
succeedread=true;
}
}
catch (IOException e)
{
succeedread=false;
e.printStackTrace();
}
return succeedread;
}
/**
* 合并图片
* <pre>
* 也就是说把原始图片和追加图片合并处理并写生成一个新的图片
* </pre>
* @param x 添加到图片会放到x坐标指定的原始图片的位置上
* @param y 添加到图片会放到y坐标指定的原始图片的位置上
* @param saveas 将合并好的文件保存到saveas指定的路径下
* @throws Exception
*/
public void Merger(int x,int y,String saveas) throws Exception
{
this.X=x;
this.Y=y;
MergerImage(saveas);
}
/**
* 合并图片
* <pre>
* 也就是说把原始图片和追加图片合并处理并写生成一个新的图片
* </pre>
* @param saveas 合并图片的保存地址
* @return
*/
public void Merger(String saveas) throws Exception
{
MergerImage(saveas);
}
/**
* 合并图片
* <pre>
* 也就是说把原始图片和追加图片合并处理并写生成一个新的图片
* </pre>
* @param saveas
*/
private void MergerImage(String saveas)throws Exception
{
this.saveas=saveas;
if(this.AppendImage==null)
this.readAppendImage();
if(this.OriginalImage==null)
this.readOriginalImage();
this.OriginalImage.getGraphics().drawImage(this.AppendImage, X, Y, null);
save(null,0,0);
}
/**
* 保存
* @param image
* @param x
* @param y
* @throws Exception
*/
protected void save(BufferedImage image,int x,int y)throws Exception
{
if(image!=null)
OriginalImage=image;
if(x>0)
X=x;
if(y>0)
Y=y;
BufferedOutputStream outputStream=null;
try
{
FileOutputStream stream=new FileOutputStream(saveas);
outputStream=new BufferedOutputStream(stream);
ImageIO.write(OriginalImage, "jpg", outputStream);
}
catch (Exception e)
{
e.printStackTrace();
throw new Exception(e.getMessage());
}
finally
{
if(outputStream!=null)
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 设置坐标位置
*/
public void setCoordinate(int parm) throws Exception
{
this.readAppendImage();
this.readOriginalImage();
switch(parm)
{
case 1://上左
this.X=0;
this.Y=0;
break;
case 2://上中
this.X=(this.OriginalWidth-this.AppendWidth)/2;
this.Y=0;
break;
case 3://上右
this.X=(this.OriginalWidth-this.AppendWidth);
this.Y=0;
break;
case 4://中左
this.X=0;
this.Y=(this.OriginalHeigth-this.AppendHeigth)/2;
break;
case 5://居中
this.X=(this.OriginalWidth-this.AppendWidth)/2;
this.Y=(this.OriginalHeigth-this.AppendHeigth)/2;
break;
case 6://中右
this.X=(this.OriginalWidth-this.AppendWidth);
this.Y=(this.OriginalHeigth-this.AppendHeigth)/2;
break;
case 7://下左
this.X=0;
this.Y=(this.OriginalHeigth-this.AppendHeigth);
break;
case 8://下中
this.X=(this.OriginalWidth-this.AppendWidth)/2;
this.Y=(this.OriginalHeigth-this.AppendHeigth);
break;
case 9://下右
this.X=this.OriginalWidth-this.AppendWidth;
this.Y=this.OriginalHeigth-this.AppendHeigth;
break;
}
X=Math.abs(X)-10;
Y=Math.abs(Y)-10;
}
}