您当前所在位置: > 实用问答

java实现图片转字符画

时间:2019-06-24 14:04:30  来源:  作者:网络

最近在抖音上特别流行字符画,今天小编就来教大家来使用java语言通过编程来迅速实现图片转字符画。

攻略对象

  • 电脑一台
  • eclipse软件

步骤分解

  1. 1

    首先先不多说,小编这里直接上代码,整体代码比较少,总共也就三十几行,去掉空行更是少得可怜,有兴趣的大家可以试一下,代码如下图:

  2. 2

    接下来小编开始解释一下代码中比较重要的一些代码,

    代码:final String base = "@#&$%*o!;.";// 字符串由复杂到简单

    这里是定义了一个简单的字符串,注意后面的注释,一定要按照注释来,因为这里的顺序和后面灰度值的顺序是相对应的,如下图:

  3. 3

    代码:final BufferedImage image = ImageIO.read(new File(path));

    这里使用java的内置包ImageIO,read方法表示将文件读取进来,如下图:

  4. 4

    代码:for (int y = 0; y < image.getHeight(); y += 8) {           for (int x = 0; x < image.getWidth(); x+=4) {

    上面步骤中读取进来的图像文件image,这里通过两个for循环依次读取image图像文件的每个像素点,getHeight()和getWidth()表示图像文件的高和宽,如下图:

  5. 5

    代码:final int pixel = image.getRGB(x, y);

    这里使用了getRGB()方法,这个方法通过图像中每个像素点的位置得到这个点ARGB像素值,并将ARGB像素值存储到rgbData数组中,rgbData数组中的数据是以0xAARRGGBB格式存储的,也就是十六进制储存,所以这个方法得到的结果是一个8位整数,如下图:

  6. 6

    代码:final int r = (pixel & 0xff0000) >> 16, g = (pixel & 0xff00) >> 8, b = pixel & 0xff;

    上个步骤中pixel为8位整数,r为红色值,pixel & 0xff0000中pixel为八位整数,这个&表示与,又因为rgbData数组中的数据是以0xAARRGGBB格式存储的,所以可以知道r颜色储存在从左往右第3/4位,所以pixel & 0xff0000就是要把第3/4位取出来,其他位变成0,>>表示以为运算,可以知道r颜色的右边还有4位数,又由于是十六进制,所以4位十六进制表示16位二进制,所有>>16,最终得到r值,r的值位0-255,同理可得b,g值,如下图:

  7. 7

    代码:final float gray = 0.299f * r + 0.578f * g + 0.114f * b;

    这里代码是将rgb值转化成灰度值,这里r、g、b之前的常数是固定值,这个公式是rgb转换灰度值的一种加权常用算法,不必太深究,转换成的灰度值gray范围为0-255,如下图:

  8. 8

    代码:final int index = Math.round(gray * (base.length() + 1) / 255);

    这里base我们是自己设置的,长度为10,然后加1,然后灰度值与这个值乘法,然后再做除法,最终得到的index值得范围为0-11,可以知道值越小,颜色越黑,反之越白,如下图:

  9. 9

    代码:System.out.print(index >= base.length() ? " " : String.valueOf(base.charAt(index)));

    这里从上个步骤可以知道index的取值范围为0-11,base的长度为10,所以这句代码的意思就是如果index的值在0-10范围就对应的使用base字符串中对应位置的字符代替,超出范围的用空白代替,如下图:

  10. 10

    下图是小编找到的一张比较可爱的图,如下图:

  11. 11

    然后将上个步骤中的图片位置填写到程序中,然后运行程序,得到运行结果如下图:

  12. 12

    当然也可以复制下来保存在文本文档中,发送给朋友,如下图:

  13. 13

    这个程序的整体思想是:读取图片->读取图片的每个像素点的rgb信息->将每个像素的rgb信息转化成对应的灰度值->将灰度值分成11等分->每份对应一个字符->得到字符画

    END

注意事项

  • 个人观点,仅供参考。
  • 感谢阅读。
相关下载

玩家评论

谷歌将逐步淘汰Chrome中的用户代理字符串

原标题:谷歌将逐步淘汰Chrome中的用户代理字符串 作为“隐私沙箱”项目的一部分,谷歌先是宣布要淘汰 Chrome 对第三方 cookie 的支持,后又表示将逐步详情>>

阅读: 17
日期: 2020-01-15
游戏名字特殊字符

相信大家都知道玩游戏的时候要给自己的游戏角色取名字,许多人都喜欢用一些特殊符号在名字里,下面就给大家分享一些特殊符号吧。 详情>>

阅读: 20
日期: 2019-08-10
在js中如何获取浏览器URL中查询字符串中的参数

在前端的编写的时候我们经常需要获取浏览器URL中查询字符串中的参数,今天小编教大家如何使用js编写一个查询字符串中参数的函数,如下图:攻略对象电脑一台步骤分解1首先小编先将详情>>

阅读: 10
日期: 2019-06-29
Word如何将文字变成带圈字符技巧!

在使用Word处理文字过程中,当想将某些文字变成带圈字符的时候,该如何操作实现呢?攻略对象Word教程以word2013为例步骤分解1教程以新建的word文档为例来介绍将文字变成带圈详情>>

阅读: 9
日期: 2019-06-24
word文档怎样设置字符边框和带圈字符

word文档怎样设置字符边框和带圈字符,word文档是我们学习,办公,工作等最需要的编辑软件,学校,企业,单位等都会用到,有时还是会遇到很多不懂的哦,可以在这里学习得到,每个方法简单实用详情>>

阅读: 6
日期: 2019-06-23
在word 2003中设置字符格式

默认状态下,Word 2013的中文字体为“宋体”,字号为“五号”,颜色为“黑色”。为了使文档更加美观,可以对字符格式进行设置。用户可以设置字符的字体、字号、颜色、加粗、倾斜、详情>>

阅读: 6
日期: 2019-06-22
Word怎么增加或减少字符间的距离

如何增加Word文字之间的距离呢。有时候,为了文档美观或清晰,需要增加文字之间的距离。那么如何操作呢。今天就和朋友们说说吧 ^_^攻略对象Word步骤分解1选中要改变文字间距离详情>>

阅读: 1
日期: 2019-06-17
如何输入带圈字符

在办公软件使用的过程中,我们偶尔会需要输入带圈字符,下面小编就为大家介绍在办公软件中如如输入带圈字符。攻略对象OFFICE步骤分解1首先打开软件,新建工作薄,状态如下,在详情>>

阅读: 5
日期: 2019-06-17
EXCEL如何快速输入带圈字符

在EXCEL表中,我们常常要输入带圈字符,如果是大量的带圈字符要输入,用传统的方法使用鼠标在特殊符号里找会显得非常麻烦,下面小编就为大家介绍在EXCEL表格中如何快速输入带详情>>

阅读: 10
日期: 2019-06-17
梦想世界可用字符

Game234问答中心有网友提出了一个比较有代表性的问题【梦想世界可用字符】,【梦想世界可用字符】具体问题如下:梦想世界可以用字符```急马上开区了`````小编觉得可能对其他网友也有帮助,所以详情>>

阅读: 7
日期: 2019-04-17
teraterm 不能输入命令字符 就是按键盘没显示

Game234问答中心有网友提出了一个比较有代表性的问题【teraterm不能输入命令字符就是按键盘没显示】,小编觉得可能对其他网友也有帮助,所以将此问答整理出来了,希望对您有帮助。小编为您搜罗的详情>>

阅读: 27
日期: 2019-04-14
我玩NBA2K13用键盘老出现字符串怎么办

小编为您搜罗的答案:进游戏后出现这种情况,就把输入法关掉就好了,比如一起按shift和ctrl或者按住ctrl再敲空格小编为您搜罗的答案:把输入法的启动快捷键修改了,比如我的以前是Ctrl+space详情>>

阅读: 15
日期: 2018-09-14
梦幻诛仙角色名字中可以使用哪些特殊字符?

小编为您搜罗的答案:梦幻诛仙只能用全拼里得符号,如下:卪乄丨丶卍?尐????灬卩刂阝肀忄冫丿氵彡丬 小编为您搜罗的答案:你好,梦幻诛仙的名字有不少要求的详情>>

阅读: 3
日期: 2018-09-09
JAVA语言实现字符串排序的代码教程

本文主要向大家介绍了JAVA语言实现字符串排序的代码教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。字符串排序TimeLimit:1000msMemoryLimit:655详情>>

阅读: 5
日期: 2018-09-01
如何修改DEDE CMS提示信息为你想要的字符

在使用DEDECMS建站过程中,有时候会弹出DEDE程序的默认提示信息:DEDECMS提示信息一般情况下,针对具体客户网站,往往会对提示信息中的“DEDECMS”进行更改。如何修改DEDEC详情>>

阅读: 3
日期: 2018-08-30
编程:从字符串s1中删除所有出现在字符串s2中的字符

小编为您搜罗的答案:有个简单的思路:统计S2中出现了哪些不重复的字符在S1中逐个删除。如果允许破坏字串原有结构就更方便了,两个字串先做一排序再用折半查找。小编为您搜罗的答案:用两重循环不停扫描就可以了详情>>

阅读: 6
日期: 2018-08-24
DNF快出盗贼了.哪位哥哥妹妹帮忙给起个有个性的英文名,最好有汉字在加点特殊字符,最好交给我特殊字符怎么打用什么打字法能打的出来。我在这里谢过大家了。

小编为您搜罗的答案:我的名字啊详情>>

阅读: 0
日期: 2018-08-24
为什么浏览器的用户代理字符串以 Mozilla 开头

最早流行的浏览器是NCSAMosaic,它称自己为NCSA_Mosaic/2.0(Windows3.1);后来一个新浏览器出现了,它的名字叫Mozilla,是MosaicKiller详情>>

阅读: 6
日期: 2018-08-23
如何解密下面的字符串 它是什么加密方式

小编为您搜罗的答案:解密为:通过本工具可以快速检测网页的META标签,分析标题、关键词、描述等是否有利于搜索引擎收录小编为您搜罗的答案:楼主是想在WEB.CONFIG文件中加密数据库联接字符串吧?w详情>>

阅读: 5
日期: 2018-08-21
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,

小编为您搜罗的答案:这部分改一下:while(p!=NULL){for(i=0;i详情>>

阅读: 13
日期: 2018-08-20
编写一个函数delchar(char*s1,char s2),从字符串s1中删除与字符s2相同的字符。用main()测试该函数

小编为您搜罗的答案:#includeusingnamespacestd;voiddelchar(char*s1,chars2);intmain(){charmystring[100];详情>>

阅读: 7
日期: 2018-08-20
java如何替换包含html标签的字符串?

小编为您搜罗的答案:可以处理下那个字符串就可以了,主要是用到了replace方法详情>>

阅读: 6
日期: 2018-08-03
在Word中为三位数字设置带圈字符

移动端 网易公开课 付费精品 TED 国际名校...但数字此时未必正好处于圆圈的正中央,其实我们可以... 详情>>

阅读: 5
日期: 2018-08-03
火狐浏览器如何设置默认字符集是utf-8?

小编为您搜罗的答案:如果使用的浏览器菜单栏的查看中有编码设置,可以直接在查看中修改编码格式。如果使用的浏览器菜单栏的查看中没有编码设置。那么,鼠标右键单击浏览器页面的空白处,在出现的菜单中选择编码,找详情>>

阅读: 6
日期: 2018-07-10
地平线黎明时分描述字符全收集地点 描述字符哪里收集

  地平线黎明时分这款游戏十分受欢迎,很多玩家非常的喜欢。今天小编为大家带来地平线黎明时分描述字符全收集地点,感兴趣的朋友快来看看吧!  描述字符全收集详情>>

阅读: 17
日期: 2018-06-09
iOS又曝bug:这个字符会让你的iPhone崩溃

近年来,我们遇到过很多可以让iOS设备崩溃的bug,比如恶意链接、改变日期以及发送特殊文字。苹果的急救方式就是,在下一个系统中修复bug。今天,EverythingAp详情>>

阅读: 1
日期: 2018-05-10
cf手游火字符怎么刷 cf手游线字符获得方法介绍

cf手游火字符怎么获得?线字符怎详情>>

阅读: 17
日期: 2018-04-26
精彩推荐