package com.teny.utils.p_w_picpath;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.p_w_picpath.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.ServletActionContext;

import com.sun.p_w_picpath.codec.jpeg.JPEGCodec;
import com.sun.p_w_picpath.codec.jpeg.JPEGEncodeParam;
import com.sun.p_w_picpath.codec.jpeg.JPEGImageEncoder;
import com.teny.utils.string.Constants;

/**
 * 功能描述:根据提供的文字生成jpg图片
 * 
 * @author : Teny_lu 刘鹰
 * @ProjectName : b2b_new
 * @FileName : CreateImageUtils.java
 * @E_Mail : liuying5590@163.com
 * @CreatedTime : 2015年2月10日-上午11:24:55
 */
public class CreateImageUtils {
	
	/**
	 * 功能描述:根据提供的文字生成jpg图片
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年2月10日-上午10:19:50
	 * @param text
	 *            String 文字
	 * @param high
	 *            int 每个字的宽度和高度是一样的
	 * @param bgcolor
	 *            Color 背景色
	 * @param fontcolor
	 *            Color 字色
	 * @param fontPath
	 *            String 字体文件
	 * @param jpgname
	 *            String jpg图片名
	 * @return
	 */
	private String createJpgByFont(String text, int high, Color bgcolor, Color fontcolor, String fontPath, String jpgname) {
		try {
			// 宽度 高度
			int width = text.length() * high;
			BufferedImage bp_w_picpath = new BufferedImage(width / 2, high, BufferedImage.TYPE_INT_RGB);
			Graphics2D g = bp_w_picpath.createGraphics();
			g.setColor(bgcolor); // 背景色
			g.fillRect(0, 0, width, high); // 画一个矩形
			System.out.println("文本长度:" + text.length() + " ,高度:" + high);
			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
			// 去除锯齿(当设置的字体过大的时候,会出现锯齿)
			g.setColor(fontcolor); // 字的颜色
			File file = new File(fontPath); // 字体文件
			Font font = Font.createFont(Font.TRUETYPE_FONT, file);
			// 根据字体文件所在位置,创建新的字体对象(此语句在jdk1.5以上才支持)
			// g.setFont(font.deriveFont((float) smallWidth));
			// font.deriveFont(float f)复制当前 Font 对象并应用新设置字体的大小
			g.setFont(new Font("Times New Roman", Font.PLAIN, Integer.valueOf(StringUtils.substringBeforeLast(String.valueOf(high * 0.66), "."))));
			
			int sort = text.length();
			if (sort >= 1 && sort <= 9) {
				g.drawString(text, Integer.valueOf(StringUtils.substringBeforeLast(String.valueOf(high * 0.1 * sort), ".")),
						Integer.valueOf(StringUtils.substringBeforeLast(String.valueOf(high * 0.75), ".")));// 控制文字的坐标 (文字,x轴,y轴)
			} else if (text.length() > 9 && text.length() < 16) {
				g.drawString(text, high, Integer.valueOf(StringUtils.substringBeforeLast(String.valueOf(high * 0.75), ".")));// 控制文字的坐标 (文字,x轴,y轴)
			} else {
				g.drawString(text, Integer.valueOf(StringUtils.substringBeforeLast(String.valueOf(high * 1.2), ".")),
						Integer.valueOf(StringUtils.substringBeforeLast(String.valueOf(high * 0.75), ".")));// 控制文字的坐标 (文字,x轴,y轴
			}
			
			// 在指定坐标除添加文字
			g.dispose();
			FileOutputStream out = new FileOutputStream(jpgname); // 指定输出文件
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bp_w_picpath);
			param.setQuality(50f, true);
			encoder.encode(bp_w_picpath, param); // 存盘
			out.flush();
			out.close();
		} catch (Exception e) {
			System.out.println("创建文字图片jpg失败!");
			e.printStackTrace();
		}
		return "made in Teny_Lu";
	}
	
	public String getRandomNumber(Integer val) {// 取随机数字符串
		double num = 0;
		switch (val) {
			case 1:
				num = Math.random() * 10;
				break;
			case 2:
				num = Math.random() * 100;
				break;
			case 3:
				num = Math.random() * 1000;
				break;
			case 4:
				num = Math.random() * 10000;
				break;
			case 5:
				num = Math.random() * 100000;
				break;
			case 6:
				num = Math.random() * 1000000;
				break;
			case 7:
				num = Math.random() * 10000000;
				break;
			case 8:
				num = Math.random() * 100000000;
				break;
			case 9:
				num = Math.random() * 1000000000;
				break;
		}
		long t = Math.round(num);
		String st = new Long(t).toString();
		return st;
	}
	
	protected HttpServletRequest getRequest() {
		return ServletActionContext.getRequest();
	}
	
	/**
	 * 功能描述:创建一张数字图片(固定文件为:.ttf后缀的文字说明)
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年2月10日-上午11:38:04
	 * @param val
	 *            几位数(1-9)
	 * @param bgColor
	 *            背景色
	 * @param textColor
	 *            文字颜色
	 * @return
	 * @return
	 */
	public static String create(Integer val, Color bgColor, Color textColor) {
		CreateImageUtils tt = new CreateImageUtils();
		String num = tt.getRandomNumber(val);
		tt.createJpgByFont(num, 120, bgColor, textColor, "D:/times.ttf", "D:/" + Constants.getSimpleDateFormat2() + "_" + num + ".jpg");
		return num;
	}
	
	public static String create(String text, Color bgColor, Color textColor) {
		CreateImageUtils tt = new CreateImageUtils();
		tt.createJpgByFont(text, 120, bgColor, textColor, "D:/times.ttf", "D:/" + Constants.getSimpleDateFormat2() + "_" + text + ".jpg");
		return text;
	}
	
	/**
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年2月10日-下午2:58:39
	 * @param val
	 *            几位数(1-9)
	 * @param bgColor
	 *            背景色
	 * @param textColor
	 *            文字颜色
	 * @param high
	 *            高度
	 * @return
	 * @return
	 */
	public static String create(Integer val, Color bgColor, Color textColor, int high) {
		CreateImageUtils tt = new CreateImageUtils();
		String num = tt.getRandomNumber(val);
		tt.createJpgByFont(num, high, bgColor, textColor, "D:/times.ttf", "D:/" + Constants.getSimpleDateFormat2() + "_" + num + ".jpg");
		return num;
	}
	
	public static String create(String text, Color bgColor, Color textColor, int high) {
		CreateImageUtils tt = new CreateImageUtils();
		tt.createJpgByFont(text, high, bgColor, textColor, "D:/times.ttf", "D:/" + Constants.getSimpleDateFormat2() + "_" + text + ".jpg");
		return text;
	}
}