「java字符画」java中的字符
今天给各位分享java字符画的知识,其中也会对java中的字符进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、怎么样用Java实现将一张图片转成字符画
- 2、如何用Java打印史努比?
- 3、怎么样用Java实现将一张图片转成字符画??
- 4、java图片转字符画
- 5、java 绘图时如何用特定画笔字符绘画一个矩形
- 6、这个图片字符画怎么转换?
怎么样用Java实现将一张图片转成字符画
#首先在D盘写一个文件"temp.html",如下内容 图片转文本 body { font-family: 宋体; line-height: 0.8em; letter-spacing: 0px; font-size: 8px; } ${content} #在D盘放一个图片(放小一点的)"a.jpg"
如何用Java打印史努比?
1、首先你需要有一个史努比的图片,具体像素和大小根据自己的喜好。
2、找一个ASCII image transfer的网站我个人建议text-image和ascii-art。
3、将转换后的字符画copy到notepad中,然后插入到System.out.println(“”);的双引号内,注意一行对应一行。
4、使用编程法打印,适用于简笔画,用简单的符号勾勒出史努比的图像,然后每行打印的字符图形和位置记录好,编写算法控制每行打印的个数和位置,使用空格填充空白。
5、可以将字符画保存为文本文件,在你的代码中使用File包中的工具读该文件,然后逐行打印即可。
以上祝好!
怎么样用Java实现将一张图片转成字符画??
#首先在D盘写一个文件"temp.html",如下内容
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
html
head
title图片转文本/title
meta http-equiv="content-type" content="text/html; charset=gbk"
style type="text/css"
body {
font-family: 宋体; line-height: 0.8em; letter-spacing: 0px; font-size: 8px;
}
/style
/head
body
${content}
/body
/html
#在D盘放一个图片(放小一点的)"a.jpg"
#运行如下JAVA代码:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
public class Test {
/** 此处设置灰度字符,此处只用十个字符,可以设置更多 */
private static char[] cs = new char[] { '.', ',', '*', '+', '=', '', '$', '@', '#', ' ' };
public static void main(String[] args) throws IOException {
// 读取图片
BufferedImage bfedimage = ImageIO.read(new File("D:\\a.jpg"));
// 图片转字符串后的数组
char[][] css = new char[bfedimage.getWidth()][bfedimage.getHeight()];
for (int x = 0; x bfedimage.getWidth(); x++) {
for (int y = 0; y bfedimage.getHeight(); y++) {
int rgb = bfedimage.getRGB(x, y);
Color c = new Color(rgb);
// 得到灰度值
int cc = (c.getRed() + c.getGreen() + c.getBlue()) / 3;
css[x][y] = cs[(int) ((cc * 10 - 1) / 255)];
}
}
// 取得模板HTML
String temp = readFile(new File("D:\\temp.html"),"gbk");
StringBuffer sb = new StringBuffer();
// 开始拼接内容
for (int y = 0; y css[0].length; y++) {
for (int x = 0; x css.length; x++) {
sb.append(css[x][y]);
}
sb.append("\r\n");
}
System.out.println(sb.toString());
// 生成文件
String content = toHTML(sb.toString());
String filecontent = replaceStrAllNotBack(temp, "${content}", content);
writeFile(new File("D:\\content.html"), filecontent, "gbk");
}
public static String toHTML(String s) {
s = s.replaceAll("", "");
s = s.replaceAll(" ", " ");
s = s.replaceAll("", "");
s = s.replaceAll("", "");
s = s.replaceAll("\"", """);
s = s.replaceAll("\\\r\\\n", "br/");
s = s.replaceAll("\\\r", "br/");
s = s.replaceAll("\\\n", "br/");
return s;
}
public static String replaceStrAllNotBack(String str, String strSrc, String strDes) {
StringBuffer sb = new StringBuffer(str);
int index = 0;
while ((index = sb.indexOf(strSrc, index)) != -1) {
sb.replace(index, index + strSrc.length(), strDes);
index += strDes.length();
}
return sb.toString();
}
/**
* 读文件(使用默认编码)
*
* @param file
* @return 文件内容
* @throws IOException
*/
public static String readFile(File file, String charset) throws IOException {
InputStreamReader fr = new InputStreamReader(new FileInputStream(file), charset);
StringBuffer sb = new StringBuffer();
char[] bs = new char[1024];
int i = 0;
while ((i = fr.read(bs)) != -1) {
sb.append(bs, 0, i);
}
fr.close();
return sb.toString();
}
/**
* 写文件
*
* @param file
* @param string
* 字符串
* @param encoding
* 编码
* @return 文件大小
* @throws IOException
*/
public static int writeFile(File file, String string, String encoding) throws IOException {
FileOutputStream fos = new FileOutputStream(file);
try {
byte[] bs = string.getBytes(encoding);
fos.write(bs);
return bs.length;
} finally {
fos.close();
}
}
}
#打开"D:\content.html"文件看效果吧。
有什么问题可以联系我。
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,否则每个字符都会换行。
java 绘图时如何用特定画笔字符绘画一个矩形
public class Yugi{
public static void main(String[] args){
int c = 10;
int k = 5;
for(int i = 0; i k; i++){
for(int j = 0; j c; j++){
System.out.print("*");
}
System.out.println();
}
}
}
这个图片字符画怎么转换?
方法/步骤
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中的字符的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。