javafx图片转字符

图片转字符基本步骤

1.将图片读入内存

2.获得像素点颜色(Color)

  • 获取Color属性:
    • color.getRed()(范围0~1)
    • color.getGreen()(范围0~1)
    • color.getBlue()(范围0~1)
    • color.getBrightness() 亮度(范围0~1)

3.选取亮度作为转换值,指定转换规则。

亮度高的用较为稀疏的字符表示,亮度低的用较为稠密的字符表示

4.缓存存盘

示例:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
使用带字符缩放的软件打开效果更为显著。

代码

public class TestImageToTXT extends Application{

	public static void main(String[] args) {
		launch();
	}
	//图片转字符
	public StringBuffer imageToStringBuffer(String jpg ,int length,int width) {
		Image image=new Image(jpg,length,width,false,false);
		PixelReader pixelReader = image.getPixelReader();
		StringBuffer stringBuffer=new StringBuffer();
		for(int i=0;i<image.getHeight();i++) {
			for(int j=0;j<image.getWidth();j++) {
				Color color=pixelReader.getColor(j, i);
				double tmp = color.getBrightness()*0xff;
				String str = change(tmp);
				stringBuffer.append(str);
			}
			stringBuffer.append("\n");
		}
		return stringBuffer;
	}
	public void start(Stage primaryStage) throws Exception {
		StringBuffer stringBuffer = imageToStringBuffer("file:c:\\bb.jpg",250,150);
		writeToTXT(stringBuffer,"c:/output.txt");
		Platform.exit();
	}
	//存盘
	public void writeToTXT(StringBuffer stringBuffer,String newFile)  {
		File file= new File(newFile);
		FileOutputStream fileOutputStream;
		try {
			fileOutputStream = new FileOutputStream(file);
			OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream);
			BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
			bufferedWriter.write(stringBuffer.toString());
			bufferedWriter.close();
			outputStreamWriter.close();
			fileOutputStream.close();
		} catch (IOException e) {
			System.out.println("error");
		}
	}
	//转换规则
	public String change(double value) {
		if(value<40) {
			return "#";
		}else if(value<60) {
			return "$";
		}else if(value<80) {
			return "@";
		}else if(value<100) {
			return "&";
		}else if(value<120) {
			return "%";
		}else if(value<140) {
			return "?";
		}else if(value<155) {
			return "=";
		}else if(value<165) {
			return "^";
		}else if(value<175) {
			return "+";
		}else if(value<185) {
			return "~";
		}else if(value<200) {
			return "-";
		}else if(value<220) {
			return "\"";
		}else if(value<235) {
			return "\'";
		}else 
			return " ";
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39464369/article/details/89249227