请选择 进入手机版 | 继续访问电脑版

登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 360|回复: 0

【Java】灰度阶输出代码图片

[复制链接]

441

主题

506

帖子

1944

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1944

荣誉管理论坛元老

发表于 2021-6-30 22:24:07 来自手机 | 显示全部楼层 |阅读模式 来自:
  1.     依照这个原理,可以吧视频变成代码视频# r1 H* h% g$ Q: }
  2. /**
    9 E. ^3 L/ ]. H" p
  3.      * 将图片转换成字符图
    : @7 T6 z: R) m7 e% `: Q9 q
  4.      * @param inPath 原始图片
    5 R! t8 |6 y0 O
  5.      * @param outPath 输出图片% {: g) j9 Z" h1 b7 I( L4 t! V
  6.      * @author HBK 3243430237@qq.com
    ' M6 J7 e& \0 P
  7.      */4 s7 z+ a5 ~- g+ j, H% C* `
  8.     public static void reverse(File inPath, File outPath) {; Y& [" H8 m1 k9 e/ x% r$ x' G( M
  9.         // 图片放大倍数,一个像素点无法容纳一个汉字,所以需要放大
      R' S# y0 h1 h$ }
  10.         int scale = 12;- l9 j& t) K; u$ ~5 P8 E9 z
  11.         // 这里的字应该按笔画从少到多排序,笔画越少越黑,越多则越白。
    0 h+ c4 e* H* L8 l% H5 A# D
  12.         String[] digits = "天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰馀".split("");" `. `6 v: m7 w( \7 B2 l
  13.         try {
    " ]- m: o3 j. E6 g5 j
  14.             // 读取源图片; g/ C' O8 H" L* f9 @3 l
  15.             BufferedImage image = ImageIO.read(inPath);
    ) `4 [3 Y) U9 _7 o/ x
  16.             // 获取图片的尺寸
    6 O% e7 I/ b2 g* h, w
  17.             int width = image.getWidth();
    7 R9 b# w" V: ?8 X; l+ n1 {- b
  18.             int height = image.getHeight();5 G0 U( c# z$ ?7 q( ~% Q
  19.             // 灰度值
    8 @& M" u# v" i2 }! ?- N8 q) C
  20.             int gray;& B5 I# s, F0 m3 P" V) G! v
  21.             // 创建新图片,放大一定的倍数+ E& c" n! o! F4 C
  22.             BufferedImage outImg = new BufferedImage(
    / Y) n4 j0 s" k2 ^& j4 z
  23.                     width * scale,
    . {' J' o( p- p( E
  24.                     height * scale,5 U% O; Y+ r! D
  25.                     BufferedImage.TYPE_INT_RGB) |* j' S6 E; j# I. {! S6 \2 P
  26.             );
    # C+ p- ^$ ~' G' F+ ]. R
  27.             // 创建图形处理器
    8 e/ o0 b% k5 h, E4 }4 {1 C
  28.             Graphics2D graphics = outImg.createGraphics();
    0 G7 @! W+ V7 O) m
  29.             // 设置字体1 s, U7 ^0 _' D) d; t, v, @
  30.             Font font = new Font(null, Font.PLAIN, 12);
    - r# T! N2 e) K
  31.             graphics.setFont(font);) o  ]& _/ s6 v3 B
  32.             // 设置默认的背景颜色
      v: h; h. t3 @; Q! _
  33.             graphics.setBackground(Color.WHITE);. Z# c9 O5 F# T3 o" R5 I
  34.             // 遍历图片的像素点& h; x# C. d9 Y: h' {
  35.             for (int i = 0; i < width; i++) {
      x  d3 Q" ?( {- N% ^
  36.                 for (int j = 0; j < height; j++) {; s  s; h4 }1 g5 F
  37.                     // 获取当前像素点的RGB颜色" P' X% M* S+ T
  38.                     int rgb = image.getRGB(i, j);, \" O8 @' T% z
  39.                     int r = (rgb & 0xff0000) >> 16;
    5 [) v1 L; S$ A# Y% {
  40.                     int g = (rgb & 0xff00) >> 8;
    % D% G3 }' m0 Q4 M/ h+ z5 i
  41.                     int b = (rgb & 0xff);
      S1 M% H8 g! s1 ]8 n
  42.                     // 计算出灰度值,这个公式可以百度到: b4 X" z7 T% d# R3 {' T
  43.                     gray = (int) (r * 0.299f + g * 0.587f + b * 0.114f);
    5 b  w" d2 W  _2 \/ o
  44.                     System.out.printf("R: %d, G: %d, B: %d, Gray: %d, String: %s\n", r, g, b, gray, digits[gray / 10]);
    ) A7 n/ {( [* N1 p* h6 ~8 E
  45.                     // 设置好现在的颜色,不设置则是黑白图片8 Q" z" f& k+ b; E  i/ ?0 W
  46.                     graphics.setColor(new Color(r, g, b));
    4 Y' }) H  H8 Q# k6 E
  47.                     // 依据灰度把相关的字画上去6 x( @7 j% F0 ?/ x% A6 k
  48.                     graphics.drawString(digits[gray / 10], i * scale, j * scale);
    : V5 `& j  x& f  G7 ~; n3 v4 V. [
  49.                 }" n  l( J! C" q, X0 ^
  50.             }
    , ]0 {7 s& I; Q" g7 S3 t: l* ?" {
  51.             // 输出图片* ?. H5 {! k, K
  52.             ImageIO.write(outImg, "jpg", outPath);+ h$ j3 k7 \& c9 I  l
  53.         } catch (IOException e) {
    1 N$ O; \6 W" r4 b; o
  54.             e.printStackTrace();/ _3 O3 ~/ A" }# w8 k6 ]4 x" [: k
  55.         }
    ( i# ~2 p1 N$ z4 l
  56.     }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区

GMT+8, 2022-8-11 23:45 , Processed in 0.061913 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表