给定任意图片,可生成txt文本内容,代码如下:
package com.itcorey.vo;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* <p>
* 根据图片生成字符图案
* 1.图片大小缩放
* 2.遍历图片像素点
* 3.获取图片像素点亮度
* 4.匹配字符
* 5.输出图案
*
* @author corey
*/
public class GeneratorTextImage {
private static final char[] PIXEL = {'@', '#', '8', '&', 'o', ':', '*', '.', ' '};
public static void main(String[] args) throws Exception {
// 图片缩放
BufferedImage bufferedImage = makeSmallImage("/Users/corey/Desktop/WechatIMG229.png");
// 输出
printImage(bufferedImage);
}
public static void printImage(BufferedImage image) throws IOException {
int width = image.getWidth();
int height = image.getHeight();
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int rgb = image.getRGB(j, i);
Color color = new Color(rgb);
int red = color.getRed();
int green = color.getGreen();
int blue = color.getBlue();
// 一个用于计算RGB像素点亮度的公式
Double luminace = 0.2126 * red + 0.7152 * green + 0.0722 * blue;
double index = luminace / (Math.ceil(255 / PIXEL.length) + 0.5);
System.out.print(PIXEL[(int) (Math.floor(index))]);
}
System.out.println();
}
}
public static BufferedImage makeSmallImage(String srcImageName) throws Exception {
File srcImageFile = new File(srcImageName);
if (srcImageFile == null) {
System.out.println("文件不存在");
return null;
}
FileOutputStream fileOutputStream = null;
BufferedImage tagImage = null;
Image srcImage = null;
try {
srcImage = ImageIO.read(srcImageFile);
int srcWidth = srcImage.getWidth(null);// 原图片宽度
int srcHeight = srcImage.getHeight(null);// 原图片高度
int dstMaxSize = 60;// 目标缩略图的最大宽度/高度,宽度与高度将按比例缩写
int dstWidth = srcWidth;// 缩略图宽度
int dstHeight = srcHeight;// 缩略图高度
float scale = 0;
// 计算缩略图的宽和高
if (srcWidth > dstMaxSize) {
dstWidth = dstMaxSize;
scale = (float) srcWidth / (float) dstMaxSize;
dstHeight = Math.round((float) srcHeight / scale);
}
srcHeight = dstHeight;
if (srcHeight > dstMaxSize) {
dstHeight = dstMaxSize;
scale = (float) srcHeight / (float) dstMaxSize;
dstWidth = Math.round((float) dstWidth / scale);
}
// 生成缩略图
tagImage = new BufferedImage(dstWidth, dstHeight, BufferedImage.TYPE_INT_RGB);
tagImage.getGraphics().drawImage(srcImage, 0, 0, dstWidth, dstHeight, null);
return tagImage;
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (Exception e) {
}
fileOutputStream = null;
}
tagImage = null;
srcImage = null;
System.gc();
}
}
}
如生成的txt图像如下
888##888888888888888888&&&&&ooooooo:. . *##@@@######@##8888###8& .....
888#####88888888888#8&&&&&&&&ooooooo: .&##@@@@@####@@#88888###8. .....
#########8888888888888&&&&&&&&oooooo: o##@@@@@####@#8888##8#8& ......
####8###888888888888888&&&&&&&&&oooo:* *##@@@@@@#####88&&88&&88o.......
8888####888888888#88888&&&&&&&&&oooo::* .8#@@###8#####88&&&&&&&&8o......
88########8888888888888&&&&&&&ooo&o&o::*. .#@@@888#8####888&oo:o&&&&&.....
#8######8888888888888888&&&&&&888&ooooo::::*. &@@@888##88##8888&&oo&88##.....
#8#####8888#888888888888888888&&ooooooooooo::::* o#@@8#&8#88#####888&o*......
8####8888888888888######888&&&&&&oooooooooooooo:::::. .@@@@888888######888&o&8#* ....
8##88888#888######@@#&&&&&&&&&&&&&&&ooooooooooooo:o&& o@@@@#8&&8######888&&###& ...
###8ooo&###@@@@@@@@@@@8&&&&&&&&&&&&&&&&ooooooooooo88* .@@@@@############88#@#&.
##o88##8o@@@@@@@@@@@@@@@#8&&&&&&&&&&&&&o&&oooooo&88# *@@@@################8*
@#8#8##@@8@@@@@@@@@@@@@@@@#88&&o&&&&&&&&&o&ooo&8#888 ... *#####################.. ....
@###&8##@#@@@@@@@@@@@@##@@@@@@#88&&&oooooo&&&88888#............****::88&8#########@#######88&*******
@##8888##8#@@@@@@@@@@888###@@@@@@#####888###8#####:::::::::::::&8###@#############@@####@#888&oooooo
@##&8##@#8##@@@@@@@@#888#####@@@@@##8############::::::::::::8@@#888@@#@##########@@@@@@@@@@@8oooooo
@##8#########@@@@@@#888888#######@@#8#&:o#####o::::::::::::o888##@###@@@@##########@@@@@@@@@@&oooooo
@#@&&8#@888#@@@@@@#88888888####88###8o::::::::::::::::::::o88#####@##@@@@@###########@######8ooooooo
@##&8###&&88#@@@@#8888888888###8&##8::::::::::::::::::::::88#######@##@@@@@##888#####8::::oooooooooo
@@8888#@&&88#@@@@#888888&&&8#@##88&o:::::::::::::::::::::88#########@#@@@@@##8888####&::::::oooooooo
@@#8#&##8888##@@###88888&&&&88###8&:::::::::::::::::::::8###########@@#@@@@@#8888888##8&:::ooooooooo
@@@88#&##888########888&&&oo&8&8&&&::::::::::::::::::::o#8#########@@@#@@@@@##888888@####o:ooooooooo
@@@#&&88##88########8888&&oooooo&&&o::::::::::::::ooooo############@@@#@@@@@@888888@@@####o:oooooooo
@@@@8&&88#88######8#8888&&oooooo&&&&*&&&ooo:::::::oo&o&@8##########@@@#@@@@@@#8888#@@@###@&ooooooooo
@@@@@&&&&##888######8888&&oo::oo&&&&oooooo::::::::::::&######@@@@##@@@#@#@@@@@#88&@@@@@@@@8o&888&&&&
@@@@@#8&8##8888#888888888&oo::oo&&&&&*o:ooo:::::::::::8###@##@@@@##@@@@@#@#@@@@#&&@@@#@#@@#&&&&&&&&&
##@@@@#######8#8888888888&&oo:o&8888o*&8888&ooo:::::::####@##@@@@##@@@@@#@@@@@@@@#@@@@@#@@@&&&oo&oo&
###@@@#########8888888888&&ooo&888&&o:oo&&&&&&&oo:::::@##@###@@@@@#@@@@@#@@@@@@@@@#@@@@@@@@&ooo&&&&&
################888888888&&oo&8#8&o&&oo:oo&8&o&&oo:::o###@###@@@@@@#@@@@#@@@@@@@@@#@@@@@@@@&oooo&&&&
################888888888&&&o&&##8#@8ooooo&&&&&&ooooo8##@@####@#@@@#@@@@@@@#@@@@@##@@@@@@@@8ooooo&o&
#######@########888888888&&&&o&&88ooooo&&&&&88&oo::::##@@#####@#@@@#@@@@@@@#@@@@@##@@@@@@@@#oo&&o&oo
########@@######888888888&&&&oo&&oo&8&&&&&o&&88&ooooo@#@#######@@@@@@@@@@@@#@@@@@##@@@@@@@@#oo&&&&&o
########@@@#####8#888888&&&&&oooooo&88888&&&&8888&o:8@#####@###@##@@@@@@@@@@@@@@@##@@@@@@@@@oooooooo
##########@@######8888888&&&&&&o::&&&&&8###8888&&ooo@@#@@@@@@@#@##@@@@@@@@@@@@@@@@#@#@@@@@@#&oo&&ooo
######8###@@@#####8888888&&&#####&88&&&&888###88&o:8@@8&&&888#@#@@#@@@@@@@@@@@@@@@@@o..*........:88&
######88##@@@@#####888888&&&8#@&&ooo&&&&&&&&88&&ooo@@#oo&&&8&&&8###@@@@@@@@@@@@@@@8oo&..*******..o8&
######88##@@@@@#####88888&&o&&&*8&&&88&&&oooooooo&#@@#o&&&&&&oo::##@@@@@@@@@@@ 8&&oo&*.*******..:&&
##########@@@@@@#####88888&&&88&&&&&8888888&ooo&&8@@@#o&&&&&&ooo::#@@@@@@@@@@..*:&&&&&o*:*********8&
###########@@@@@@@####88888&&888&&&&&8&&&&&ooooo&&@@@@&&&&&&&&ooooo@@@@@@@@@.****&&&&&8*:::::***.*&&
###########@@@@@@@@####8888&&&&&&&&&8&oooooo::oo&8@@@#&&&&&&&&oooo&@@@@@@@#*****8888888*oooo::*:**8&
###########@@@@@@@@@####888&&o&&888##8o&&o&oo::oo&@@@#&&&&&&&oooo&8@@@@#88.::***8888888:&&&&o:****88
#############@@@@@@@@@##888&&:&&888##88#8&&&&oooo8@@@#&&&&&&&&&&88##888&& *::**8888####8888&8oo**o&&
################@@o:@@@##88&&o88&&o&&&888&&&o&&&&@@@@@&&&&&&&&8#8&&&&&&&.*:::*o88####8##o. ##8&:*&&&
#################88&oo@@##88&&8&&ooo&oo&&&&oo&&&#@#@@@&&o&&&&##&o&&&&:o*.****:8####8&@@. ..@##&:&&&
#################88&*o&&@###8&&o&&&&&&oooo&oooo8@#@@@@&&o&&8##&&@8@&&****#####@@@# .*:***&8#8&888
#####8############88o:o#8888888&&&&&&o&ooo&&&&&88#@@@@&&&888888&88&#@#@#***8###@@.....:&&:*8&o&&&&88
.8#8#8#8#####@####88&&:*o&&&&&&&&&&oooooo&88&o&8##@@@@o&88#888888@##@#@***&#@.... .:*.o8&:#88oo&&8&&
@*#88#8#8###8@######88oo*:o&&&8#8&&&&&&&&&88&&&@#@@@@@o&8######&#@@##@*****...**.:*:.*&8&:##8oo&&&&&
@@#8888888###@@###@#888&oo*&&&&8&&8888888&o&8&8#@@@@@@o8######*::@@@@@#***.*****&&:.*:&&o####&&88&&8
@@o888888####@@@@#####88&&..88&&&&8888&&&&&&&#@@@@@@@@&8####@.:::#@@@@@********:&8:**o&&o@##8&:#8888
#@#888888@##8@@@@@#@###88o...88&&8&&&&&###88&##@@@@@@@&######.:::@@@@@@******..**8&:*o&o@@#88&oo8888
@@@#8#88@@#&#@@@@@@######**...888##88888###88##@@@@@@@&8#####.::*@@@@@@#*****.*..&8o:8&@###88&o:o&&8
@@@@888@@@#&#@@#@@@#@###:****..##@#####888888##@@@@@@@8888##.***:@@@@@@#******.*.o&&:o&8###88&oo:&&8
##@@@8@@@@#@8@@@@@@@&::****..o&888#####88#@@##@@@@@###8##o**::@@@##@#****.oo**:&&:o&8###888&o:&##
@###@#@@@@8#88@#@@@@@@&oo::*****..&&8#####8oo&&8#@@@@@@#@@@.**::o@@###@*****.8&::o8&:o&#####88&ooo&&
###@###@@@#888@#@@@@@&&&&oo::*****..8######@@###@@@@@@@@@@@.**:*#8@@@o8::****88o:&888###@####8&&o:o&
@###@###8##8##@#@@@@8888&&oo::*******.o##&&o&8#@@@@@@@8&:...:::**:&@@oo*o:*.:&8o*8&##@@@@@@###8&o::o
#8######&8#8##@#@@####8888&&o:::::::::**.*.....*.*.*..*.. **.**::::8&:::::*::&8&*88#@@@@@@@@##88&::&
8########&&8##@#@########88&&&o:o&&o&&:::***::**********.**.***.::o&:::::#oo*:88@@@@@@@@@@###8o:o
888#####@#&88@@#@@@#######888&&&&&8888&oo:ooo:::::::**:::******&o&&&::**:&8&&8#888#@@@@@@@@@@@##8&o:
##888####@8&#@@#@@@#########88888888##8&o&8&&oooo&o::o&*o:o****&&8*::**::888888 88#@@@@@@@@@@@@##&oo
###88#@#8#@@#@@@@###################888888888&ooo&&..oo::***.&&*****::##8#8:888@@@@##@@@@@@@@#8oo
##@##8&88@@8#@@#@@@@######################88888&&&o&8.*:ooo::**..*::***:.8888###88@@@@##@@@@@@@@#:**
#####88&88#8.@@@@@@@###############@@##@##8888&&&888.*:ooo:::***...*.***8##@######@@@@###@@@@@@@oo**
#@####8#&###o@@#&&@@############@#@@@@#####8888&888*::oooo::::*****.***:#@@######@@@@####@@@@@@@&&oo
#@#@###8#8#@8@@8&&&8@@##########@@@@@@#####888##8#**:ooooooo::::::::*:*.@@#######@@@@##@@@@@@@@@8&&o
@#@@###88#8#8@@8&&88&&##########@@@@@@@########## *:oo&&&&ooooo::oo:***:@########@@@##@@@@@@@@@8&&&o
@@####@@#####@@##@@#&&8&8########@@@@@@@#########*ooo&o&&&&&&&&&&o&o::*@@@#######@@@@@@@@@@@@@@&8&&o
@@@##@@@@#88#@@#@@@#888#8&&@####@@@@@@@@#@@#####.*o&&&&&&&8&&&&&&&&&oo:@@#######@@@@@@@@@@@@@@#8&&oo
@@@@@#@##@@88@@#######888#8&&#@@@@@@@@#@@@@@@: .ooo&888&&&&&&&&&&&8888o@@@##@###@@@@@@@@@@@@@@88&&&o
@@@@#####@@@#@@&&88888888&&8&&&@@@@@@@@@@@@@& *.&oo8&88&&&&88888888888:@@@@@@##@@@@@@@@@@@@@@#888&&o
@@@@@@#####@8@@88888888##88888&&8@@@@@@@@@@@:.:**o:88888888888888##88#@@@@@@@##@@@@@@@@@@@@@@#888&&o
@@@@@@@@####@#@888#888####&88##888#@@@@@@@@@::*&88&:88&&&88#8888##@@@@@@@@@@@##@@@@@@@@@@@@@@8&8#8o&
@@@@@@@@@#####@#888888####8#8#888@@#########&&o.8&8:o&#@8######@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@&&@#8o&
@@@@@@@@@@#8#@@#8888#####88888&&####8888888888::.oo8*&#o&8##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&@#8&&