「java怎么生成字符画」java字符怎么定义
本篇文章给大家谈谈java怎么生成字符画,以及java字符怎么定义对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Java随机产生字符串
java生成随机字符串,主要是先建立一个26字符的字符串,然后使用random类来随机选择,拼接成一个新的字符串,如下代码:
package com.qiu.lin.he; import java.util.Random; public class Ceshi { public static void main(String[] args) { System.out.println(getRandomString(10));//调用随机生成字符串的方法,并打印出来 } public static String getRandomString(int length) { String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//含有字符和数字的字符串 Random random = new Random();//随机类初始化 StringBuffer sb = new StringBuffer();//StringBuffer类生成,为了拼接字符串 for (int i = 0; i length; ++i) { int number = random.nextInt(62);// [0,62) sb.append(str.charAt(number)); } return sb.toString(); }}
怎么样用Java实现将一张图片转成字符画
#首先在D盘写一个文件"temp.html",如下内容 图片转文本 body { font-family: 宋体; line-height: 0.8em; letter-spacing: 0px; font-size: 8px; } ${content} #在D盘放一个图片(放小一点的)"a.jpg"
java怎么随机生成一个字符串?
/**
* 产生随机字符串
* */
private static Random randGen = null;
private static char[] numbersAndLetters = null;
public static final String randomString(int length) {
if (length 1) {
return null;
}
if (randGen == null) {
randGen = new Random();
numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" +
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
//numbersAndLetters = ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
}
char [] randBuffer = new char[length];
for (int i=0; irandBuffer.length; i++) {
randBuffer[i] = numbersAndLetters[randGen.nextInt(71)];
//randBuffer[i] = numbersAndLetters[randGen.nextInt(35)];
}
return new String(randBuffer);
}
//调用此方法randomString(int),int是字符串的长度,即可产生指定长度的随机字符串。
java图片转字符画
你有几个地方错了
for (int y = 0; y image.getHeight(); y += 8) {
for (int x = 0; x image.getHeight(); x += 4) {
final int pixel = image.getRGB(x, y);
final int r = (pixel 0xff0000) 16, g = (pixel 0xff00) 8, b = pixel 0xff;
final float gray = 0.299f * r + 0.578f * g + 0.114f * b;
final int index = Math.round(gray * (base.length() + 1) / 255);
System.out.println(index = base.length() ? " " : String.valueOf(base.charAt(index)));
}
System.out.println();
}
改为:
for (int y = 0; y image.getHeight(); y += 8) {
for (int x = 0; x image.getWidth(); x += 4) {
final int pixel = image.getRGB(x, y);
final int r = (pixel 0xff0000) 16, g = (pixel 0xff00) 8, b = pixel 0xff;
final float gray = 0.299f * r + 0.578f * g + 0.114f * b;
final int index = Math.round(gray * (base.length() + 1) / 255);
System.out.print(index = base.length() ? " " : String.valueOf(base.charAt(index)));
}
System.out.println();
}
注意第二行使用image.getWidth(),第七行的println写成print,否则每个字符都会换行。
这个图片字符画怎么转换?
方法/步骤
1
首先先不多说,小编这里直接上代码,整体代码比较少,总共也就三十几行,去掉空行更是少得可怜,有兴趣的大家可以试一下,代码如下图:
请点击输入图片描述
2
接下来小编开始解释一下代码中比较重要的一些代码,
代码:final String base = "@#$%*o!;.";// 字符串由复杂到简单
这里是定义了一个简单的字符串,注意后面的注释,一定要按照注释来,因为这里的顺序和后面灰度值的顺序是相对应的,如下图:
请点击输入图片描述
代码:final BufferedImage image = ImageIO.read(new File(path));
这里使用java的内置包ImageIO,read方法表示将文件读取进来,如下图:
请点击输入图片描述
代码:for (int y = 0; y image.getHeight(); y += 8) { for (int x = 0; x image.getWidth(); x+=4) {
上面步骤中读取进来的图像文件image,这里通过两个for循环依次读取image图像文件的每个像素点,getHeight()和getWidth()表示图像文件的高和宽,如下图:
请点击输入图片描述
代码:final int pixel = image.getRGB(x, y);
这里使用了getRGB()方法,这个方法通过图像中每个像素点的位置得到这个点ARGB像素值,并将ARGB像素值存储到rgbData数组中,rgbData数组中的数据是以0xAARRGGBB格式存储的,也就是十六进制储存,所以这个方法得到的结果是一个8位整数,如下图:
请点击输入图片描述
代码: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值,如下图:
请点击输入图片描述
代码:final float gray = 0.299f * r + 0.578f * g + 0.114f * b;
这里代码是将rgb值转化成灰度值,这里r、g、b之前的常数是固定值,这个公式是rgb转换灰度值的一种加权常用算法,不必太深究,转换成的灰度值gray范围为0-255,如下图:
请点击输入图片描述
代码:final int index = Math.round(gray * (base.length() + 1) / 255);
这里base我们是自己设置的,长度为10,然后加1,然后灰度值与这个值乘法,然后再做除法,最终得到的index值得范围为0-11,可以知道值越小,颜色越黑,反之越白,如下图:
请点击输入图片描述
代码:System.out.print(index = base.length() ? " " : String.valueOf(base.charAt(index)));
这里从上个步骤可以知道index的取值范围为0-11,base的长度为10,所以这句代码的意思就是如果index的值在0-10范围就对应的使用base字符串中对应位置的字符代替,超出范围的用空白代替,如下图:
请点击输入图片描述
下图是小编找到的一张比较可爱的图,如下图:
请点击输入图片描述
然后将上个步骤中的图片位置填写到程序中,然后运行程序,得到运行结果如下图:
请点击输入图片描述
当然也可以复制下来保存在文本文档中,发送给朋友,如下图:
请点击输入图片描述
13
这个程序的整体思想是:读取图片-读取图片的每个像素点的rgb信息-将每个像素的rgb信息转化成对应的灰度值-将灰度值分成11等分-每份对应一个字符-得到字符画
java怎么生成字符画的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java字符怎么定义、java怎么生成字符画的信息别忘了在本站进行查找喔。