算法及思路
众所周知,我们的计算机在处理图形的时候,实际上是将图形分成N个像素点,对于每个像素点来说,有这个像素点自己的像素值。无数个带有自己特定的像素值的像素点才汇成了我们所见的图片。而在Java中,RGB值以及像素值和灰度又有着一定公式条件下的转化关系。基于此,我们通过遍历一张图片上的每一个像素点,得到RGB值,进而转化为灰度,根据不同灰度的大小来选择相应的复杂程度的符号。

执行步骤

  1. 读取文件。Java中提供了ImageIO.read的方法,返回值为BufferedImage。
  2. 设置字符串基底,由复杂到简单,视觉感官由黑到白,对应的灰度值由低到高。
  3. 遍历所要处理的图片的文件的每一个像素点,并得到R, G, B值,然后通过公式转化为灰度。
  4. 灰度范围为0~255,也就是说在0-255范围内,灰度值越低,图片越偏向黑色;灰度值越高,图片越偏向白色。因此,当灰度值越低的时候,我们选择越复杂的字符;灰度值越高的时候,我们选择越简单的字符。
  5. 最后打印每一个像素点对应的灰度向下对应的字符。

PS:在选择字符的时候,例如字符串基底共有10个字符,对应的灰度范围为0-255,那么0-(255/10)就是最低灰度,选择最复杂的字符串;(255/10)-2*(255/10)就是其次低的灰度,选择次复杂的字符串,以此类推。

这也就是为什么我们在设置字符串基底的时候,要选择由复杂到简单的字符。

PPS:输出结果可以复制到.txt文本中观察效果。

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class myPic {public void drawPic(String picPath) {BufferedImage img;String base = "@&%#M8XOHLTI!)=+;:,^.' ";try {img = ImageIO.read(new File(picPath));int width = img.getWidth();int height = img.getHeight();for(int y = 0; y<height;y+=4) {for (int x = 0;x<width;x+=4) {int pixel = img.getRGB(x, y);int r = (pixel & 0xff0000) >> 16, g = (pixel & 0xff00) >> 8, b = pixel & 0xff;double gray = 0.299f * r + 0.578f * g + 0.114f * b;int index = (int) Math.floor(gray*base.length()/256);char symbol = base.charAt(index);System.out.print(symbol);}System.out.println();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main (String[] args) {myPic picture = new myPic();picture.drawPic("D:\\YY.jpg");}}

最后放上两张字符画效果图:

用Java实现代码字符画效果相关推荐

  1. 基于Java的图片字符画(含动图)

    一.介绍 字符画是一种纯由字符组成,在文本编辑器中行列排开的二维字符矩阵中,整体展示出可识别的图案.特点是无色,画面的最小单元是字符而非像素.可由基本的文本编辑器模拟图像. 字符画的展示: 蜡笔小心表 ...

  2. java字符串包ascii 方法amp;#39_用 Java 生成 ASCII 字符画

    ASCII码艺术是一种技术,它利用ASCII标 准中的可打印字符来产生视觉艺术效果.在历史上它有其存在的目的,当时的打印机还无法打印图片,并且当时在邮件中嵌入图像还无法实现,所以它也用于邮件 中.本文 ...

  3. Java中banner字符画,可生成各种图案

    http://patorjk.com/software/taag http://www.network-science.de/ascii/ http://www.degraeve.com/img2tx ...

  4. c语言将图像转换成字符画,25行Java代码将普通图片转换为字符画图片和文本的实现...

    本文主要介绍了25行Java代码将普通图片转换为字符画图片和文本的实现,分享给大家,具体如下: 原图 生成字符画文本(像素转换字符显示后,打开字符画显示相当于原图的好几倍大,不要用记事本打开,建议用n ...

  5. Python实战1- 图片转字符画

    Python实战系列用于记录实战项目中的思路,代码实现,出现的问题与解决方案 本文为第1篇–图片转字符画 参考教程:https://www.cnblogs.com/MartinLwx/p/914384 ...

  6. html 字符画,字符画

    字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条来构成简单的人物.事物等形象,它一般由人工制作而成:复杂的字符画通常利用占用不同数量像素的字符代替图画上不 ...

  7. python图像转字符画_python图像处理-字符画风格图片

    前言 字符画图片,顾名思义就是由一个个字符组成的图片,下面这张图片很容易帮助你理解,如果我们可以将字符排列好,让他看上去像一个物体的形状,那么最后再将它输出保存为一张图片就可以实现了. 下面的这些形状 ...

  8. 利用 OpenGL ES 给视频播放器和相机做个字符画滤镜

    该原创文章首发于微信公众号:字节流动 最后不少朋友问,"OpenGL ES 入门后怎么学习写一些滤镜?","怎么学习 shader ?". 最近请教了一些大佬, ...

  9. Java 从零开始实现一个画图板、以及图像处理功能,代码可复现

    Java 从零开始实现一个画图板.以及图像处理功能,代码可复现 这是一个学习分享博客,带你从零开始实现一个画图板.图像处理的小项目,为了降低阅读难度,本博客将画图板的一步步迭代优化过程展示给读者,篇幅 ...

  10. Java打印任意字符串的字符画

    首先看一下实现的效果: 注意:字符画的样式会根据选择字体的不同而不同,这里使用的是"幼圆"字体. 基本原理:主要原理是获取系统字库的字模信息,根据字模信息来画字符画. 基本思路:将 ...

最新文章

  1. TensorFlow全家桶的落地开花 | 2019 Google开发者日
  2. 第八篇:Docker镜像结构原理
  3. Modular_exponentiation模幂运算
  4. python 青蛙跳台阶问题
  5. 【最长公共前缀】算法优化笔记
  6. android fragment framelayout,framelayout中fragment的切换
  7. 2019 Java 开发者跳槽指南.pdf (吐血整理)
  8. 简单的动态JavaScript Ajax函数
  9. UVA 1048 Low Cost Air Travel 最短路
  10. 云计算学习笔记:什么是云?云计算是什么?
  11. 【路径规划】基于matlab遗传算法求解同时取送货车辆路径问题【含Matlab源码 1072期】
  12. egret接vivo小游戏
  13. Tomcat下载及安装(Windows)
  14. 武汉理工计算机网络教学平台,武汉理工大学 操作系统
  15. Linux界面和字体大小调整
  16. 16.集合框架(ArrayList,Vector,LinkedList,泛型(Generic),可变参数,增强for循环)
  17. Hacking Team泄露数据表明韩国、哈萨克斯坦针对中国发起网络攻击
  18. 高尔顿与回归分析的起源
  19. MySql 导入和导出数据
  20. 智力题:36匹马,6条跑道,没有计时器,至少需要多少次选出最快的三匹马

热门文章

  1. 找直系亲属——并查集
  2. 百度网址安全中心提醒:该页面可能已被非法篡改!如何去解决?
  3. 前端:让我们做一个快乐的切图仔!
  4. Html5红警源码,现在,你真的可以在网页上玩到原版《红警2》了
  5. 基于ssh的后台新闻管理系统
  6. C语言简单实现世界协调时UTC与北京时间BJT转换
  7. 仓储管理之盘点——SAP盘点方法与流程
  8. 免密登录 蹩脚的“脚本”
  9. 现代软件工程讲义 7 设计阶段 Spec
  10. 虫儿飞简谱用计算机,乐曲简谱(虫儿飞简谱)