package com.lsw.commons.utils;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageZipUtil {
	/**
	 * 根据设置的宽高等比例压缩图片文件<br>
	 * 先保存原文件,再压缩、上传
	 * 
	 * @param oldFile
	 *            要进行压缩的文件
	 * @param newFile
	 *            新文件
	 * @return 返回压缩后的文件的全路径
	 */
	public static String zipImageFile(File oldFile, File newFile) {
		if (oldFile == null) {
			return null;
		}
		try {
			/** 对服务器上的临时文件进行处理 */
			Image srcFile = ImageIO.read(oldFile);
			int w = srcFile.getWidth(null);
			int h = srcFile.getHeight(null);
			int w1=w;
			int h1=h;
			if(w<800&&w>200){
				w1=(int) (w-w*0.3);
				h1=(int) (h-h*0.3);
			}else if (w<1600&&w>800) {
				w1=(int) (w-w*0.4);
				h1=(int) (h-h*0.4);
			}else if (w<2500&&w>1600) {
				w1=(int) (w-w*0.45);
				h1=(int) (h-h*0.45);
			}else if (w<4100&&w>2500) {
				w1=(int) (w-w*0.5);
				h1=(int) (h-h*0.5);
			}
			String srcImgPath = newFile.getAbsoluteFile().toString();
			String subfix = "jpg";
			subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length());

			BufferedImage buffImg = null;
			if (subfix.equals("png")) {
				buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB);
			} else {
				buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB);
			}
			Graphics2D graphics = buffImg.createGraphics();
			graphics.setBackground(new Color(255, 255, 255));
			graphics.setColor(new Color(255, 255, 255));
			graphics.fillRect(0, 0, w1, h1);
			graphics.drawImage(srcFile.getScaledInstance(w1, h1, Image.SCALE_SMOOTH), 0, 0, null);
			ImageIO.write(buffImg, subfix, new File(srcImgPath));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return newFile.getAbsolutePath();
	}

	/**
	 * 根据设置的宽高等比例压缩图片文件<br>
	 * 先保存原文件,再压缩、上传
	 *
	 * @param oldFile
	 *            要进行压缩的文件
	 * @param newFile
	 *            新文件
	 * @return 返回压缩后的文件的全路径
	 */
	public static String zipImageFile(File oldFile, File newFile,double display) {
		if (oldFile == null) {
			return null;
		}
		try {
			/** 对服务器上的临时文件进行处理 */
			Image srcFile = ImageIO.read(oldFile);
			int w = srcFile.getWidth(null);
			int h = srcFile.getHeight(null);
			int w1=w;
			int h1=h;
			w1=(int) (w-w*display);
			h1=(int) (h-h*display);
			String srcImgPath = newFile.getAbsoluteFile().toString();
			String subfix = "jpg";
			subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length());

			BufferedImage buffImg = null;
			if (subfix.equals("png")) {
				buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB);
			} else {
				buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB);
			}
			Graphics2D graphics = buffImg.createGraphics();
			graphics.setBackground(new Color(255, 255, 255));
			graphics.setColor(new Color(255, 255, 255));
			graphics.fillRect(0, 0, w1, h1);
			graphics.drawImage(srcFile.getScaledInstance(w1, h1, Image.SCALE_SMOOTH), 0, 0, null);
			ImageIO.write(buffImg, subfix, new File(srcImgPath));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return newFile.getAbsolutePath();
	}

	/**
	 * 按设置的宽度高度压缩图片文件<br>
	 * 先保存原文件,再压缩、上传
	 * 
	 * @param oldFile
	 *            要进行压缩的文件全路径
	 * @param newFile
	 *            新文件
	 * @param width
	 *            宽度
	 * @param height
	 *            高度
	 * @param quality
	 *            质量
	 * @return 返回压缩后的文件的全路径
	 */
	public static String zipWidthHeightImageFile(File oldFile, File newFile, int width, int height, float quality) {
		if (oldFile == null) {
			return null;
		}
		String newImage = null;
		try {
			/** 对服务器上的临时文件进行处理 */
			Image srcFile = ImageIO.read(oldFile);

			String srcImgPath = newFile.getAbsoluteFile().toString();
			System.out.println(srcImgPath);
			String subfix = "jpg";
			subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length());

			BufferedImage buffImg = null;
			if (subfix.equals("png")) {
				buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
			} else {
				buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
			}

			Graphics2D graphics = buffImg.createGraphics();
			graphics.setBackground(new Color(255, 255, 255));
			graphics.setColor(new Color(255, 255, 255));
			graphics.fillRect(0, 0, width, height);
			graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

			ImageIO.write(buffImg, subfix, new File(srcImgPath));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return newImage;
	}
}