1、图片
2、代码
package xunlian;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class AscII {
//通过ASC码进行转换
//在国际上有一套认可并且已经推广开来使用的标准来进行把控
//创建一个读取图片的自定义方法。
//通过参数传导的方式,讲图片的路径传递到我们自定的方法当中来
public static void createAscIIPic(final String path){
/*
* String:字符串数据类型
* final:不可变的。固定。
*/
final String str = "!@#$%^&*";//用字符串来显示效果
//通过Image类的子类,进行图片的缓冲加载
try {
final BufferedImage image = ImageIO.read(new File(path));//IO:流的类
/*通过读取到的图片获取每一个像素点上的颜色,
* 然后将有颜色(内容)的地方替换成指定的内容
*/
for (int y=0; y < image.getHeight(); y++) {//X轴,也就图片的宽度
for(int x=0;x<image.getWidth();x++){//Y轴坐标
final int RGB = image.getRGB(x, y);//红,绿,蓝
//将三者区分开
final int r = (RGB & 0xff0000) >> 16;//&与运算符,>>位运算符
final int g = (RGB & 0xff00) >>8;
final int b = (RGB & 0xff);
final float gray = 0.299f*r + 0.578f*g + 0.114f*b;
//获取要修改的点
final int index = Math.round(gray * (str.length()+1)/255);
//根据要修改的点进行判断是否修改
String newStr = (index>=str.length()?" ":String.valueOf(str.charAt(index)));
/*
* index>=str.length()?" ":String.valueOf(str.charAt(index))
* 三目表达式。理解为是if语句中的一类变形
* 三目表达式更贴近于if…else语句
* String.valueOf():讲参数转换成字符串
* str.charAt():讲字符串转换成字符
*/
System.out.print(newStr);
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//static:静态的
//静态方法只能调用静态方法。
public static void main(String[] args) {
//调用自定义的方法,将图片加载到转换方法当中去
AscII.createAscIIPic("C:\\Users\\Administrator\\Desktop\\pic.jpg");
}
}
3、效果
(备注:运行出来后,ctrl+a全部的结果到记事本,改变字体大小)
这是一个学习的笔记,如果这个对你有帮助,并且你也有CSDN账号的话,欢迎点赞加关注呦!