package com.tarena.dang.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Random; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public final class ImageUtil { //private static final String[] chars = { "0", "1", "2", "3", "4", "5", "6", // "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "东", // "南", "西", "北", "中", "发", "白" }; private static final String[] chars = { "0", "1", "2", "3", "4", "5", "6","7", "8", "9"}; private static final String[] cals = {"+", "-", "*", "/", "%"}; private static final int SIZE = 4;//显示字符个数 private static final int NUM = 2;//显示字符中的数字个数 private static final int NUM1 = 1;//显示字符中的运算符个数 private static final int LINES = 20;//干扰线数量 private static final int WIDTH = 160;//图片宽度 private static final int HEIGHT = 40;//图片高度 private static final int FONT_SIZE = 40;//字体大小 public static Map<Integer,BufferedImage> createImage() { BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics graphic = image.getGraphics(); graphic.setColor(Color.LIGHT_GRAY); graphic.fillRect(0, 0, WIDTH, HEIGHT); Random ran = new Random(); //记录字符中的数字 int[] num = new int[NUM]; int index = 0; //记录运算符号 String[] cals1 = new String[NUM1]; int index1 = 0; //画随机字符 for(int i=1;i<SIZE;i++){ //数字 if(i%2==1) { int r = ran.nextInt(chars.length); graphic.setColor(getRandomColor()); graphic.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE)); graphic.drawString(chars[r],(i-1)*WIDTH/SIZE , 7*HEIGHT/8); num[index++] = Integer.parseInt(chars[r]); } else { //画符号 int r = ran.nextInt(cals.length); graphic.setColor(new Color(0,0,0)); graphic.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE)); graphic.drawString(cals[r],(i-1)*WIDTH/SIZE , 7*HEIGHT/8); cals1[index1++] = cals[r]; } if(i==SIZE-1) { graphic.setColor(new Color(0,0,0)); graphic.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE)); graphic.drawString("=",i*WIDTH/SIZE , 7*HEIGHT/8); } } //计算字符运算结果 int result = cal(num,cals1); //画干扰线 for(int i=1;i<=LINES;i++){ graphic.setColor(getRandomColor()); graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT), ran.nextInt(WIDTH),ran.nextInt(HEIGHT)); } Map<Integer,BufferedImage> map = new HashMap<Integer,BufferedImage>(); //结果和图片成键值对 map.put(result, image); return map; } private static int cal(int[] num, String[] cals1) { int result = 0; if("+".equals(cals1[0])) { result = num[0] + num[1]; } else if("-".equals(cals1[0])) { result = num[0] - num[1]; } else if("*".equals(cals1[0])) { result = num[0] * num[1]; } else if("/".equals(cals1[0])) { result = num[0] / num[1]; } else if("%".equals(cals1[0])) { result = num[0] % num[1]; } return result; } public static InputStream change(BufferedImage image) throws Exception{ //将image图片压缩成JPEG ByteArrayOutputStream bos = new ByteArrayOutputStream(); JPEGImageEncoder encode = JPEGCodec.createJPEGEncoder(bos); encode.encode(image); //将bos中存储的JPEG格式图片字节取出 byte[] bytes = bos.toByteArray(); return new ByteArrayInputStream(bytes); } private static Color getRandomColor(){ Random ran = new Random(); Color color = new Color(ran.nextInt(256),ran.nextInt(256),ran.nextInt(256)); return color; } }
最近下载更多
blueskyroof LV9
2019年11月26日
zhouyunfei LV3
2019年5月17日
skystory LV11
2019年4月27日
123123zxl LV11
2018年6月25日
罗明飞 LV4
2018年6月22日
Fdaxiong LV1
2018年6月10日
yxw0707 LV3
2018年5月21日
1335203 LV10
2018年2月28日
乞丐哥哥 LV23
2018年2月11日
vipsers森林 LV2
2017年12月5日
最近浏览更多
EFWAGGFAWGR
2023年10月19日
暂无贡献等级
3174233007
2022年12月19日
暂无贡献等级
double_AI LV1
2022年11月12日
wwww11112222
2022年7月19日
暂无贡献等级
芮坎尚 LV1
2022年5月11日
Jeasonchan898 LV2
2022年4月26日
杨豫川 LV12
2022年4月19日
10816599
2021年9月15日
暂无贡献等级
zhaoxu123123 LV10
2021年9月9日
zzy94269664 LV11
2021年3月16日