登录  | 立即注册

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

查看: 1114|回复: 0

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

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-30 22:24:07 来自手机 | 显示全部楼层 |阅读模式 来自:
  1.     依照这个原理,可以吧视频变成代码视频
    ( G$ c. u& `9 i+ t+ A; l# t- D- F( J  j3 I
  2. /**- W6 x! ?- o3 `9 s
  3.      * 将图片转换成字符图5 v: n0 x* H7 V6 c7 K
  4.      * @param inPath 原始图片! L. ~/ T6 u9 W
  5.      * @param outPath 输出图片
    3 v7 X: S6 W3 s7 X* M/ T
  6.      * @author HBK 3243430237@qq.com
    ' ?9 D6 w$ z! W- I4 O$ b9 W. X5 c1 u. b
  7.      */
    , \& {' [. c0 G. ?' p3 `( U
  8.     public static void reverse(File inPath, File outPath) {' L" l, z" o1 Y! s
  9.         // 图片放大倍数,一个像素点无法容纳一个汉字,所以需要放大" T; R2 U7 \$ T9 ]0 H; H; ?
  10.         int scale = 12;5 V: R. W* ~( r5 h6 r
  11.         // 这里的字应该按笔画从少到多排序,笔画越少越黑,越多则越白。
    + @0 J+ u8 `4 r+ Y) g) `' _6 h
  12.         String[] digits = "天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰馀".split("");
    * N6 ~' d9 k1 Y3 a! S& g/ v
  13.         try {
    + D0 \( F/ P5 @# s
  14.             // 读取源图片
    ) I, F% Y# F3 t4 r  l: c+ r
  15.             BufferedImage image = ImageIO.read(inPath);' }' t! b, w) y* Y  N. b% t- z
  16.             // 获取图片的尺寸
    5 j& u$ b0 P% t7 X( m: M
  17.             int width = image.getWidth();+ r, q' L$ r" m* W2 G7 X" r
  18.             int height = image.getHeight();
    2 D9 G- q/ B5 L
  19.             // 灰度值
      J) q8 I% z& A  U! f6 T# M  v
  20.             int gray;3 D' b, O* t1 K! e2 r- x
  21.             // 创建新图片,放大一定的倍数
    * ~1 z2 t( H7 g6 r, ]6 H/ Q% z
  22.             BufferedImage outImg = new BufferedImage(+ p* i- B$ W2 O0 V0 m7 m
  23.                     width * scale,
    4 l, b+ J7 m2 Y
  24.                     height * scale,
    + l( y- z1 k5 ]1 s" F
  25.                     BufferedImage.TYPE_INT_RGB, Y$ i2 X  o2 q# l# t) S+ Q( M
  26.             );; s- A0 c( L6 P7 u( O
  27.             // 创建图形处理器
    2 {2 I$ r& n+ a# c, }9 M2 k5 t
  28.             Graphics2D graphics = outImg.createGraphics();+ F- }% _8 j- g3 s4 a/ |
  29.             // 设置字体" c# t' ?; ~! P' p
  30.             Font font = new Font(null, Font.PLAIN, 12);
    & L% W3 W9 S2 o  F; K& [, G
  31.             graphics.setFont(font);
    - W7 k' N5 W2 ^/ ?6 t9 J; h
  32.             // 设置默认的背景颜色
    * R( U9 J5 c/ P0 ^
  33.             graphics.setBackground(Color.WHITE);4 F3 s5 b) z* u* x
  34.             // 遍历图片的像素点
    - j- `! E* c& r; m. W
  35.             for (int i = 0; i < width; i++) {! L8 d" O7 v1 k3 H
  36.                 for (int j = 0; j < height; j++) {# R) `! ~) X# G3 W8 _
  37.                     // 获取当前像素点的RGB颜色
    % d2 r' G  w, H; X0 \& n7 O) |
  38.                     int rgb = image.getRGB(i, j);
    / {/ \  v, Z+ \' w
  39.                     int r = (rgb & 0xff0000) >> 16;
    # U% `2 u9 c: o; B7 A+ N
  40.                     int g = (rgb & 0xff00) >> 8;! ?+ }( ]# U" z; v% |" |9 t
  41.                     int b = (rgb & 0xff);( ?+ I4 p3 j4 W4 N* n/ K4 ~: o7 r
  42.                     // 计算出灰度值,这个公式可以百度到8 J. o; ?8 y- b# u& ]+ v
  43.                     gray = (int) (r * 0.299f + g * 0.587f + b * 0.114f);
    $ u3 M6 L3 G, P' U' q5 W: m
  44.                     System.out.printf("R: %d, G: %d, B: %d, Gray: %d, String: %s\n", r, g, b, gray, digits[gray / 10]);0 K7 t: ~# w/ l0 Y* ~% S
  45.                     // 设置好现在的颜色,不设置则是黑白图片
    ; @3 P9 y! w9 I" i2 V
  46.                     graphics.setColor(new Color(r, g, b));, N8 g! |) f& X1 U- L4 _; X
  47.                     // 依据灰度把相关的字画上去# O9 P7 U, Z6 E' K
  48.                     graphics.drawString(digits[gray / 10], i * scale, j * scale);2 ]3 |9 @1 ]7 Q6 `* P( ]
  49.                 }( g( L1 y3 m: w9 Y. }' Y# ]: j
  50.             }
    ; k. `* u3 U: t# P3 [3 r: B7 q
  51.             // 输出图片
    * {  i+ M" D# [( ]# Q. s- h
  52.             ImageIO.write(outImg, "jpg", outPath);
    + V' q6 y5 f1 V  H/ k
  53.         } catch (IOException e) {0 w- g7 c& f. P$ L1 v/ e
  54.             e.printStackTrace();
    . ^: {5 w" ~+ ]  ]3 f: ]
  55.         }
    ; b1 ^+ N) |- y' A/ d
  56.     }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-4-27 07:05 , Processed in 0.052082 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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