【Java】灰度阶输出代码图片
依照这个原理,可以吧视频变成代码视频/**
* 将图片转换成字符图
* @param inPath 原始图片
* @param outPath 输出图片
* @author HBK 3243430237@qq.com
*/
public static void reverse(File inPath, File outPath) {
// 图片放大倍数,一个像素点无法容纳一个汉字,所以需要放大
int scale = 12;
// 这里的字应该按笔画从少到多排序,笔画越少越黑,越多则越白。
String[] digits = "天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰馀".split("");
try {
// 读取源图片
BufferedImage image = ImageIO.read(inPath);
// 获取图片的尺寸
int width = image.getWidth();
int height = image.getHeight();
// 灰度值
int gray;
// 创建新图片,放大一定的倍数
BufferedImage outImg = new BufferedImage(
width * scale,
height * scale,
BufferedImage.TYPE_INT_RGB
);
// 创建图形处理器
Graphics2D graphics = outImg.createGraphics();
// 设置字体
Font font = new Font(null, Font.PLAIN, 12);
graphics.setFont(font);
// 设置默认的背景颜色
graphics.setBackground(Color.WHITE);
// 遍历图片的像素点
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
// 获取当前像素点的RGB颜色
int rgb = image.getRGB(i, j);
int r = (rgb & 0xff0000) >> 16;
int g = (rgb & 0xff00) >> 8;
int b = (rgb & 0xff);
// 计算出灰度值,这个公式可以百度到
gray = (int) (r * 0.299f + g * 0.587f + b * 0.114f);
System.out.printf("R: %d, G: %d, B: %d, Gray: %d, String: %s\n", r, g, b, gray, digits);
// 设置好现在的颜色,不设置则是黑白图片
graphics.setColor(new Color(r, g, b));
// 依据灰度把相关的字画上去
graphics.drawString(digits, i * scale, j * scale);
}
}
// 输出图片
ImageIO.write(outImg, "jpg", outPath);
} catch (IOException e) {
e.printStackTrace();
}
}
页:
[1]