很久都没有更新博客了,昨天下午一个朋友问我能不能将一张图片转换成字符画,然后我想我这个朋友不知道,也许有的朋友以不知道,我就简单的分享一下

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图片转字符的更多相关文章

  1. Java 图片转换为字符图 CharMaps (整理)

      /* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...

  2. java 字节流和字符流的区别 转载

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

  3. java 字节流和字符流的区别

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

  4. Java 图片提取RGB数组 RGBOfCharMaps (整理)

    package demo; /** * Java 图片提取RGB数组 RGBOfCharMaps (整理) * 声明: * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成 ...

  5. Java进阶(四十五)java 字节流与字符流的区别

    java 字节流与字符流的区别(转载)   字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?   实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...

  6. Springboot 系列(八)动态Banner与图片转字符图案的手动实现

    使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号.查看官方文档可以找到关于 banner 的描述 The banner tha ...

  7. 32. Springboot 系列(八)动态Banner与图片转字符图案的手动实现

    使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号.查看官方文档可以找到关于 banner 的描述 The banner tha ...

  8. Java 字节流和字符流

    程序中都是以流的形式进行数据的传输和保存,在java.io包中数据流操作的两大类是字节流和字符流. 1. 字节流 InputStream和OutputStream是所有表示字节流的类的父类,它们都是抽 ...

  9. java字节流和字符流,以及java文件操作

    A.首先说字节流:1.字节流在操作的时候不会用到缓冲区(也就是内存)2.字节流可用于任何类型的对象,包括二进制对象3.字节流处理单元为1个字节,操作字节和字节数组.InputStream是所有字节输入 ...

随机推荐

  1. AtCoder Grand Contest

    一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...

  2. 使用ITextSharper小结

    用到了生成PDF版的合同,上网研究了一圈,发现不需要服务器端安装插件的,比较好用的就是这个ITextSharper了,于是便开始了研究. 1.解决汉字不显示的问题,指定一下字体,默认的字体好像不支持中 ...

  3. C++备忘知识整理

    一.设置字体颜色 C++控制台程序运行时输出框默认的文字颜色是白色,所以我常称其输出框为黑白框.但是这个文字样式不是固定不变的,是可以改变颜色的字体的.方法有两种: 1.设置输出框的框体属性.在运行时 ...

  4. 课时8.HTML作用(掌握)

    什么是HTML? HTML其实是HyperText Markup Language的缩写,超文本标记语言 如何重命名文件? 点击右键重命名 点击F2 首先利用记事本保存了一个标题和两段描述,然后修改纯 ...

  5. 【译】2分钟介绍Rx

    原文地址:https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877 翻译去掉了一些口水话(⊙o⊙) 诸位应该已经 ...

  6. React Native开发中自动打包脚本

    React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...

  7. JAVA基础之控制台输入输出

    ---恢复内容开始--- 输入需要用scanner机制 代码: 启用scanner机制 Scanner input = new Scanner(System.in); //String x= inpu ...

  8. 常用Sql server 自定义函数

    /****** 对象: UserDefinedFunction [dbo].[fun_get_LowerFirst] 脚本日期: 08/04/2012 13:03:56 ******/ IF EXIS ...

  9. laravel 5.7 resources 本地化 简体中文

    使用方法: 新建目录[项目目录/resources/lang/zh] 按以下内容创建文件,并将内容复制到文件中 修改 config/app.php 'locale' => 'zh', 'fall ...

  10. 10.安装使用jenkins及其插件

    持续集成 1.安装jenkins 安装依赖 [root@git ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel rpm包下载: ...