Java图片转字符
很久都没有更新博客了,昨天下午一个朋友问我能不能将一张图片转换成字符画,然后我想我这个朋友不知道,也许有的朋友以不知道,我就简单的分享一下
package com.xsl.zhuanhuan;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.Buffer;
import javax.imageio.ImageIO;
/***
* 图片转换为字符
* @author Administrator
*/
public class ImgChar {
public static void main(String[] args) throws Exception {
//获取图片路径
String path="F:/image/1.jpg";
//将path放入缓冲区
File file=new File(path);
//放到缓冲区图片
BufferedImage image=ImageIO.read(file);
//通过下标来实现替换图片中的每个像素
String base="@#&$%*!;.";
//图片都有一个个像素点组成的
//用两个for循环进行遍历
for(int y=0;y<image.getHeight();y+=2){
for(int x=0;x<image.getWidth();x++){
int ps=image.getRGB(y, x);
//System.out.println(pixe);//输出图片像素输出的值
/**
* 该像素位置RGB颜色的一个整数形式(RGB颜色:黄绿蓝)
* 0XABCDEF
* 0X:代表声明进制
* AB:代表R
* CD:代表G
* EF:代表B
*
* getRGB调用一个colorMode(颜色模型).getRGB()
* | 反推 &
* 16 --》 8 ---》 0
*
* getRGB的源码的实现方法
* public int getRGB(int x,int y){
* return colorModel.getRGB(raster.getDataElement(x,y,null));
* }
* 可以按Ctrl+鼠标左键继续进行看它的底层源码(有兴趣的可以继续去了解)
* */
int r=(ps & 0xff0000)>>16;
int g=(ps & 0xff00)>>8;
int b=(ps & 0xff);
//计算灰度值 r g b 乘以相应的灰度值
float gray=r * 0.4f + g * 0.6f + b * 0.1f;
//计算下标的公式
int index=Math.round(gray*(base.length()+1)/255);
//判断下标和上面的字符去比较
if(index>=base.length()){
//如果下标比上面的字符要长的话就不填充
System.out.print(" ");
}else{
//选择相应下标的字符进行填充
System.out.print(base.charAt(index));
}
}
System.out.println();
}
}
}
运行结果:部分截图

Java图片转字符的更多相关文章
- Java 图片转换为字符图 CharMaps (整理)
/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...
- java 字节流和字符流的区别 转载
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- Java 图片提取RGB数组 RGBOfCharMaps (整理)
package demo; /** * Java 图片提取RGB数组 RGBOfCharMaps (整理) * 声明: * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成 ...
- Java进阶(四十五)java 字节流与字符流的区别
java 字节流与字符流的区别(转载) 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...
- Springboot 系列(八)动态Banner与图片转字符图案的手动实现
使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号.查看官方文档可以找到关于 banner 的描述 The banner tha ...
- 32. Springboot 系列(八)动态Banner与图片转字符图案的手动实现
使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号.查看官方文档可以找到关于 banner 的描述 The banner tha ...
- Java 字节流和字符流
程序中都是以流的形式进行数据的传输和保存,在java.io包中数据流操作的两大类是字节流和字符流. 1. 字节流 InputStream和OutputStream是所有表示字节流的类的父类,它们都是抽 ...
- java字节流和字符流,以及java文件操作
A.首先说字节流:1.字节流在操作的时候不会用到缓冲区(也就是内存)2.字节流可用于任何类型的对象,包括二进制对象3.字节流处理单元为1个字节,操作字节和字节数组.InputStream是所有字节输入 ...
随机推荐
- BZOJ2654:tree(最小生成树,二分)
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- BZOJ2179:FFT快速傅立叶(FFT)
Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ...
- 【Hankson 的趣味题】
可能我只适合这道题的50分 但还是要争取一下的 我们知道对于\(gcd\)和\(lcm\)有这样的定义 \(a=\prod _{i=1}^{\pi(a)}p_i^{d_{i}}\) \(b=\prod ...
- 关于mysql 出现 1264 Out of range value for column 错误的解决办法
今天给客服恢复mysql数据的时候.本来测试好的数据.但是到了客户那里却死活不干活了.老报错! INSERT INTO ka_tan4 set num='716641385999', username ...
- iOS中的应用启动原理
iOS中的应用启动原理 来源: http://m.blog.csdn.net/article/details?id=50530090 http://m.warting.com/program/2016 ...
- maven 环境变量 设置
Maven安装与配置 一.需要准备的东西 1. JDK 2. Eclipse 3. Maven程序包 二.下载与安装 1. 前往https://maven.apache.org/download. ...
- JSP Cookie 处理
Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持. 通常有三个步骤来识别回头客: 服务器脚本发送一系列cook ...
- 360极速浏览器用ie8模式打开网页(360浏览器同理)
在访问年代久远的的网页时经常会遇到兼容性的问题,用360浏览器(或360极速浏览器)中通过设置可解决. 在360极速浏览器中分别依次选择:选项->高级设置->内核模式->内核切换设置 ...
- html 让table表格中的td单元格内容过长显示为固定长度,多余部分用省略号代替?
<th class="wrap">商品名</th> .wrap{ width: 150px; //设置需要固定的宽度 white-space: nowrap ...
- 第一课、安装登录CentOS7
一.学习之初 1.学习这个课程的目的是,高薪就业,搞运维. 2.应该在宁波发展. 3.大概给自己定的计划是4个月能学习2遍. 4.学好之后就跳槽. 5.2年左右的时间要达到1.5W争取. 学习方法: ...