zoukankan      html  css  js  c++  java
  • 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核心(七):this和super的区别
    Java核心(六):==和equals()的区别;重写equals()方法
    java核心(五):堆内存、栈内存;String赋值时,内存变化
    Java核心(四):Java中的装箱和拆箱
    Java核心(三):代码块的作用
    从数据库中导出.csv文件
    mongodb中数据类型的坑
    return 和 echo 的小坑
    对数据库中初始的数据在后台进行翻译
    SQL语句执行效率及分析
  • 原文地址:https://www.cnblogs.com/xslbk/p/7718239.html
Copyright © 2011-2022 走看看