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

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. npm run build 打包后,如何运行在本地查看效果

    目前,使用vue-cli脚手架写了一个前端项目,之前一直是使用npm run dev 在8080端口上进行本地调试.项目已经进行一半了,今天有时间突然想使用npm run build进行上线打包,试试 ...

  2. 【转】Spring Boot Profile使用

    http://blog.csdn.net/he90227/article/details/52981747 摘要: spring Boot使用@Profile注解可以实现不同环境下配置参数的切换,任何 ...

  3. PAT——不吉利的日期(java中date和Calendar使用)

    题目描述 在国外,每月的 13 号和每周的星期 5 都是不吉利的.特别是当 13 号那天恰好是星期 5时,更不吉利. 现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份. 输入描 ...

  4. springboot启动报错:Could not resolve placeholder

    SpringBoot1.5,项目启动报错: Could not resolve placeholder 很明显是找不到配置文件引起的,查看配置文件目录结构如下: 很正常呀. 完全可以加载applica ...

  5. redhat6本地源NBD驱动安装

    安装NBD驱动 一.配置本地yum源 1.挂载系统安装光盘 # mount /dev/cdrom /mnt/cdrom/ # mkdir /mnt/media # cp -rf /mnt/cdrom/ ...

  6. 04.nginx使用

    博客为日常工作学习积累总结: 1.安装依赖包 安装pcre :yum install pcre pcre-devel -y        安装openssl:yum install openssl o ...

  7. HTML中汉字空格占位符

    == 普通的英文半角空格   ==   ==   == no-break space (普通的英文半角空格但不换行)   == 中文全角空格 (一个中文宽度)   ==   == en空格 (半个中文 ...

  8. vue 整体引入 mint-ui 样式失败

    当引入Mint-ui 整体css 时 如果出现了这样的错误, 是指找不到对应的Mint-UI 的css :需要从node_modules里寻找 解决方法是在webpack.config.js(有的项目 ...

  9. JavaScript&jQuery 基本使用

    * 最近连续加班加点三周* 遭不住了 ...* 来点 js / jq 的货* 一个人撸PHP 撸HTML 撸CSS 撸JavaScript 撸jQuery* 不管有没有用记录一下** 1:jQuery ...

  10. 使用Scala开发Apache Kafka的TOP 20大好用实践

    本文作者是一位软件工程师,他对20位开发人员和数据科学家使用Apache Kafka的方式进行了最大限度得深入研究,最终将生产实践环节需要注意的问题总结为本文所列的20条建议. Apache Kafk ...