java 图片转换字符码图片
原图:
效果图:
挺像的。。
代码:
package com.gx.image;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import javax.imageio.ImageIO;
/**
* @ClassName: CharImgUtil
* @Description: 图片转字符图片工具类
* @author zhoujie
* @date 2018年7月26日 下午10:11:03
* @version V1.0
*/
public class CharImgUtil {
public static void main(String[] args) throws Exception {
String imgPath = CharImgUtil.class.getResource("test.jpg").getFile();
String fileUrl = "C:\\Users\\zj\\Desktop\\char.jpg";
System.out.println(imgPath);
createCharImg(imgPath, fileUrl);
}
/**
* @Title: createCharImg
* @Description: 生成字符码图片
* @param @param imgPath
* @param @param fileUrl 设定文件
* @return void 返回类型
* @throws
*/
public static void createCharImg(String imgPath, String fileUrl){
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream(imgPath);
BufferedImage image = ImageIO.read(fileInputStream);
//生成字符图片
int w = image.getWidth();
int h = image.getHeight();
int more = 5; //图片放大倍数
BufferedImage newbufferedImage = new BufferedImage(w*more, h*more, 1);;
Graphics g = newbufferedImage.getGraphics();
g.setColor(Color.white);// 画笔颜色
g.fillRect(0, 0, w*more, h*more);// 填充图形背景
// 设置字体
g.setFont(new Font("宋体", Font.ITALIC, more*2)); //more*2:字体高度
g.setColor(Color.black);// 画笔颜色
// 绘制字符
for (int i = 0; i < h; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < w; j++) {
int rgb = image.getRGB(j, i);
int R = (rgb & 0xff0000) >> 16;
int G = (rgb & 0x00ff00) >> 8;
int B = rgb & 0x0000ff;
int gray = (R * 30 + G * 59 + B * 11 + 50) / 100;
int index = 31 * gray / 255;
sb.append(asc[index] + ""); //添加每个字符
}
g.drawString(sb.toString(), 0, (i+1)*more); //绘制每行字体位置,主要y轴改变
}
g.dispose();
ImageIO.write(newbufferedImage, "jpg", new File(fileUrl)); //输出图片
System.out.println("图片生成");
} catch (Exception e) {
e.printStackTrace();
}
}
//三十二位颜色对应字符
private final static char[] asc = {' ','`', '.', '^', ',', ':', '~', '"',
'<', '!', 'c', 't', '+', '{', 'i', '7', '?', 'u', '3', '0', 'p', 'w',
'4', 'A', '8', 'D', 'X', '%', '#', 'H', 'W', 'M'};
}
就这样啦。