JAVA实训1:图片转Ascii码

1、图片
pic
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、效果
pic2
(备注:运行出来后,ctrl+a全部的结果到记事本,改变字体大小)
这是一个学习的笔记,如果这个对你有帮助,并且你也有CSDN账号的话,欢迎点赞加关注呦!

发布了5 篇原创文章 · 获赞 6 · 访问量 202

猜你喜欢

转载自blog.csdn.net/qq_42652875/article/details/104430771