wangy 发表于 2021-6-30 22:24:07

【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]
查看完整版本: 【Java】灰度阶输出代码图片