「java字符画」java中的字符

博主:adminadmin 2023-01-08 15:21:10 824

今天给各位分享java字符画的知识,其中也会对java中的字符进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

怎么样用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中的字符的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。