package net.loyin.util.image;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
/**
* 缩放
*
*/
public class ZoomImage {
private int LOGO_H;
private int LOGO_W;
private AddWatermark addWatermark = null;
private String saveas;
/**
* 初始化
*
* @param saveas 保存的地址
* @param logon 水印图片地址
* @param image 原图片地址
* @throws Exception
*/
public void init(String saveas, String logon, String image)
throws Exception {
this.saveas = saveas;
addWatermark = new AddWatermark(image, logon);// image是图片地址,logo是添加水印图片的地址
addWatermark.readAppendImage();
addWatermark.readOriginalImage();
}
/**
* 计算图片大小并在原图上添加水印
*
* @param postion
* 位置 1左上角2正上方9右下角 按照九宫格的位置定位
* @throws Exception
*/
public void account(int postion) throws Exception {
// 原图
int originality_W = this.addWatermark.getOriginalWidth();
int originality_H = this.addWatermark.getOriginalHeigth();
// 水印的logo
LOGO_H = this.addWatermark.getAppendHeigth();
LOGO_W = this.addWatermark.getAppendWidth();
if (LOGO_H >= originality_H)// 高度
{
originality_H = LOGO_H;
}
if (LOGO_W >= originality_W)// 宽度
{
originality_W = LOGO_W;
}
BufferedImage originalImage = new BufferedImage(originality_W,
originality_H, BufferedImage.TYPE_INT_RGB);
Graphics graphics = originalImage.getGraphics();
Color color = new Color(255, 255, 255);
graphics.setColor(color);
graphics.fillRect(0, 0, originality_W, originality_H);
graphics.drawImage(this.addWatermark.getOriginalImage(), 0, 0,
originality_W, originality_H, null);
graphics.dispose();
addWatermark.setOriginalImage(originalImage);
addWatermark.setCoordinate(postion);
addWatermark.Merger(saveas);
}
/**
* 创建小图
* @param showall true:全部缩略
* @param minisaveas 图片缩略图文件名
* @throws Exception
*/
public void CreateSmal(int w, int h,boolean showall,String minisaveas) throws Exception {
BufferedImage image = this.addWatermark.getOriginalImage();
BufferedImage small = new BufferedImage(w, h,
BufferedImage.TYPE_INT_RGB);// 创建一个新图片
Graphics graphics = small.getGraphics();
if(showall==true){
graphics.drawImage(image, 0, 0, w, h, null);
}else{
int oldw1=0;
int oldh1=0;
int oldw=image.getWidth();
int oldh=image.getHeight();
float m=(float)w/(float)h;
if(oldw>oldh){
if(m>1){//
oldw1=oldw;
oldh1=oldw*h/w;
if(oldh1>oldh){
oldh1=oldh;
oldw1=oldh*w/h;
}
}else if(m<1){
oldh1=oldh;
oldw1=oldh*w/h;
}else{//
oldw1=oldh;
oldh1=oldh;
}
}else if(oldw<oldh){
if(m>1){
oldw1=oldw;
oldh1=oldw*h/w;
if(oldh1>oldh){
oldh1=oldh;
oldw1=oldh*w/h;
}
}else if(m<1){
oldh1=oldh;
oldw1=oldh*w/h;
}else{
oldw1=oldw;
oldh1=oldw;
}
}else{
if(m>1){
oldw1=oldw;
oldh1=oldw*h/w;
}else if(m<1){
oldh1=oldh;
oldw1=oldh*w/h;
}else{
oldw1=oldw;
oldh1=oldh;
}
}
graphics.drawImage(image, 0, 0, w, h,0,0,oldw1,oldh1, null);
}
graphics.dispose();
// String filetype = this.getFileType(saveas);
// this.saveas = this.saveas.replaceAll(filetype + "$", px + filetype);
// this.addWatermark.setSaveas(saveas);
this.addWatermark.setSaveas(minisaveas);
this.addWatermark.save(small, w, h);
}
public void zoom(int w, int h,String oldfile,String savefile) throws Exception{
BufferedImage image =ImageIO.read(new File(oldfile));
int width=image.getWidth();
int height=image.getHeight();
int oldw1=width;
int oldh1=height;
if ( width > w || height > h )
{
if ( width > height){
height = height*w/width;
width = w;
} else{
width = width*h/height;
height = h;
}
}
BufferedImage small = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 创建一个新图片
Graphics graphics = small.getGraphics();
graphics.drawImage(image, 0, 0, width, height,0,0,oldw1,oldh1, null);
graphics.dispose();
this.addWatermark.setSaveas(savefile);
this.addWatermark.save(small, w, h);
}
private void setFix(int x, int y) {
if (this.LOGO_W / this.LOGO_H > x / y) {
this.setX(x);
} else {
this.setY(y);
}
}
private void setX(int x) {
this.LOGO_W = (int) (this.LOGO_W * x / this.LOGO_H);
}
private void setY(int y) {
this.LOGO_H = (int) (this.LOGO_H * y / this.LOGO_W);
}
/**
* 获得文件的类型
*/
private String getFileType(String file) {
Pattern pattern = Pattern.compile("[.\\\\]\\w++$");
Matcher matcher = pattern.matcher(file);
if (matcher.find())
file = matcher.group();
return file;
}
}