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

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. ResNet 修改

    https://github.com/tornadomeet/ResNet apache 开源项目 修改如下: 训练模块 import argparse,logging,os import mxnet ...

  2. Linux学习总结(一) windos环境vmware安装centos7

    一.在这里我先简单介绍下虚拟化技术[即在一台电脑上虚拟出子系统,而且可能需要多台服务器进行工作,一般都是linux系统做服务器或者学习研究之用], 二来我们可以有效利用一台pc的资源模拟出终端远程访问 ...

  3. springboot+mybatis+shiro——登录认证和权限控制

    转载:https://z77z.oschina.io/ 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring ...

  4. java的foreach,后台弹框

    for (String string : list) { if(string.equals(ids)){ int res = JOptionPane.showConfirmDialog(null, & ...

  5. win8安装wampserver报403错误解决方法

    看着别人开始体验win8了,前几天我也安装了win8系统,总体来说还不错,但是今天安装完Wampserver后,浏览器输入localhost,竟然报了403错误,我以为我安装出错了,后来研究了半天,发 ...

  6. iOS 8及以后版本 如何创建UIAlertView?

    1. Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated. ...

  7. Java 分支结构

    Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java 有两种分支结构: if 语句 switch 语句 if 语句 一个 i ...

  8. 利用python 传输文件

    最近在学python3 发现了一个很有用的功能,该功能可以将安装python 的机器作为一台http 服务器来分享本机的文件, 具体的使用记录如下 python3 的使用方法 直接在windows 的 ...

  9. 关于swing界面label和button的动态设置文字

    在引入发送验证码功能后,想让button的文本动态变化,发现如下方法并不能做到: int limitSec=10; while(limitSec>0){ sendyzhm.setEnabled( ...

  10. oracle计算某个表中数据所占表空间的比例

    要求计算某个表所占表空间的大小,网上查了些资料用到了oracle的3个视图.具体sql如下 select segment_name as tablename, round(bytes / (selec ...