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是所有字节输入 ...
随机推荐
- Css3 实现关键帧动画
<div class="person"> </div> <script> var str1 = "@keyframes move{&q ...
- [转]Asp.Net url中文乱码
一般有3种方法: 1.设置web.config文件 2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码. 传递 string Name = "中文参数"; Resp ...
- 19-3-4 Python进制转换;bool str int三者之间的转换;字符串的索引,切片;for循环的使用
进制转换: 二进制转十进制: 0010 1111 = 1*2**0+1*2**1+1*2**2+1*2**3+1*2**5 十进制转换二进制: 用十进制数除2逆序取余 --->101010 布 ...
- git获取步骤
$ git init $ git config --global user.name "[name]" $ git config --global user.email [emai ...
- 鸟哥私房菜笔记-1 (S0_S3)
学新东西,总感觉还是看书来的实在,直接看教程上手太慢且没有目的, 接下来先啃鸟哥这本吧,买的第三版,内容在鸟哥站上都有: 鸟哥的 Linux 私房菜 -- 基础学习篇目录 (繁体) http://cn ...
- 新人成长之入门Vue.js弹窗Dialog介绍(二)
前言 在上一篇博文中介绍了Vue.js的常用指令,今天总结归纳一下弹窗Dialog的使用,弹窗经常被使用在一些表单的增删改查啊,或者弹出一些提示信息等等,在保留当前页面状态的情况下,告知用户并承载相关 ...
- 用Head方法获得百度搜索结果的真实地址
用Head方法获得百度搜索结果的真实地址 在百度中搜索"Java",第一条结果的链接为: https://www.baidu.com/link?url=HBOOMbhPKH4SfI ...
- django的render的特殊用法
以前都是将模板渲染好, 传输到前端, 但是现在前后端分离了, 模板渲染引擎还有用, 而且很好用. 比如在渲染一个表格的时候, 每一行都有两个操作按钮, 并且这个按钮上是有a标签的 你可以使用字符串拼接 ...
- Java : Netty 入门案例
接收端代码: public class IOServer { public static void main(String[] args) throws IOException, Interrupte ...
- 【laravel】同一代码段内,先更新数据,后查询修改的数据,查询结果错误的问题
如标题所言,是什么意思呢?举个栗子,需求如下: 你是一个电话销售人员,手头有一些待call电话单,每个电话单上有N个不同的电话号码,需要你每打一个电话就标记为”已打“.当一个电话单上的号码都标记为”已 ...