java实现图像转码为字符画的方法

本文实例为大家分享了java实现图像转码为字符画的具体代码,供大家参考,具体内容如下

public class ImageProcesser { 

 private static final char[] charset1 = {'M','8','V','|',':','.',' '}; //默认字符素材集
 private char[] charset; //字符画素材集
 private String imgString = ""; //储存转化后的字符串 

 //使用指定字符集构造
 public ImageProcesser(char[] charset){
  this.charset = charset;
 }
 //使用默认字符集构造
 public ImageProcesser(){
  this.charset = charset1;
 } 

 public String getImgString(){
  return imgString;
 } 

 /*将图形文件转化为字符画字符串*/
 public ImageProcesser toBitmapConvert(String imagepath){
  return toBitmapConvert(new File(imagepath));
 }
 public ImageProcesser toBitmapConvert(File imageFile){ 

  StringBuffer sb = new StringBuffer();
  if(!imageFile.exists()){ //当读取的文件不存在时,结束程序
   System.out.println("File is not exists!");
   System.exit(1);
  }
  Color color;
  try{
   BufferedImage buff = ImageIO.read(imageFile); //将图片文件装载如BufferedImage流
   buff = compressImage(buff); 

   int bitmapH = buff.getHeight();
   int bitmapW = buff.getWidth(); 

   //逐行扫描图像的像素点,读取RGB值,取其平均值,并从charset中获取相应的字符素材,并装载到sb中
   for(int y=0; y<bitmapH; y++){
    for(int x=0; x<bitmapW; x++){
     int rgb = buff.getRGB(x,y);
     color = new Color(rgb); 

     int cvalue = (color.getRed()+color.getGreen()+color.getBlue()) / 3;
     sb.append(charset[(int)((cvalue * charset.length - 1)/255)]+" ");
    }
    sb.append("\r\n");
   }
  }catch(IOException ex){
   ex.printStackTrace();
  }
  imgString = sb.toString();
  return this;
 } 

 /*图像文件预处理:将图片压缩到 最长边为 100px*/
 private BufferedImage compressImage(BufferedImage srcImg){
  int h = srcImg.getHeight();
  int w = srcImg.getWidth();
  if(Math.max(h,w)<=100)
   return srcImg;
  int new_H;
  int new_W;
  if(w>h){
   new_W = 100;
   new_H = 100*h/w ;
  }else{
   new_H = 100;
   new_W = 100*w/h;
  }
  BufferedImage smallImg = new BufferedImage(new_W,new_H,srcImg.getType());
  Graphics g = smallImg.getGraphics();
  g.drawImage(srcImg,0,0,new_W,new_H,null);
  g.dispose();
  return smallImg;
 } 

 /*将字符串保存为.txt文件*/
 public void saveAsTxt(String fileName){
  try{
   PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
   for(int i = 0;i<imgString.length();i++){
    out.print(imgString.charAt(i));
   }
   out.close(); 

  }catch(IOException ex){
   ex.printStackTrace();
  }
 } 

 /*批处理图像文件*/
 public static void batchImgFile(String srcfile, String tragetfile){ 

  File folder = new File(tragetfile); //生成图片的文件夹
  File srcfolder = new File(srcfile);
  if(!folder.exists() || !folder.isDirectory())
   folder.mkdirs();
  ImageProcesser processer = new ImageProcesser();
  File[] filelist = srcfolder.listFiles(); 

  for(int i=0;i<filelist.length;i++){
   if(!filelist[i].isFile())
    continue;
   processer.toBitmapConvert(filelist[i]);
   processer.saveAsTxt(tragetfile+"/"+(i+1)+".txt");
   System.out.println(filelist[i].getName()+" is converted!");
  }
  System.out.println("All img were converted!"); 

 } 

}

点击查看:参考链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现gif动画效果(java显示动态图片)

    就是每隔一定的时间显示一张图片,全部图片文件位于:"工作空间\项目名称\bin\动态图\花好月圆\"文件夹下.文件名类似:1001.jpg,1002.jpg,一直到1016.jpg: 复制代码 代码如下: /* * Donttai.java * * Created on __DATE__, __TIME__ */ package 动态图; import java.awt.Graphics;import java.awt.Image;import java.awt.image.Image

  • java 2d画图示例分享(用java画图)

    Java 2D API通过扩展抽象窗口工具箱(AWT),为Java程序提供了二维图像,文本和图形的功能.这个复杂的渲染包支持线形图像,文本和图形,为富用户界面,复杂绘图程序和图像处理器开发者提供灵活的,功能强大的框架.Java 2D对象出现在一个平面中,称为用户坐标系空间,和设备坐标系空间.当对象在屏幕或打印机中渲染时,用户空间坐标系被转换成设备空间坐标系. 复制代码 代码如下: import java.awt.BasicStroke;import java.awt.Color;import j

  • java和matlab画多边形闭合折线图示例讲解

    1.使用matlab作闭合多边形图 没有找到直接画多边形的函数,只能是将各个点的坐标保存在数组中,将一个点与其相邻的点相连,并将最后一个点与第一个点连接.下面是一个示例的.m文件: 复制代码 代码如下: clear;clc;a=[0 2 4 6 8 10 12 14;0 2 1 4 6 6 5 7];  %要连接的点坐标 x;y[n,m]=size(a);for i=1:m-1;    line([a(1,i),a(1,i+1)],[a(2,i),a(2,i+1)]);  %连接节点line([

  • Java画笔的简单实用方法

    Java中提供了画笔,可以使用画笔做出界面上的任何东西,接下来先熟悉一下画笔的使用过程,以画一条线为例. 源码: import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JPanel; /** * 画笔的初始用 * * @author M_WBCG * */ publi

  • Java实现两人五子棋游戏(三) 画出棋子

    上一篇文章讲的是Java实现两人五子棋游戏(二) 画出棋盘,已经画好棋盘,接下来要实现控制功能,主要功能: 1)选择棋子 2)画棋子 3)判断胜负 4)交换行棋方 先实现画棋子PART -------------画棋子代码示例如下-------------- 首先,定义一个棋子类,这个类有两个属性,棋子颜色(0-表示黑色,1-表示白色),是否落子(我计划用一个二维数组才存储棋子的落子信息) Chessman.java package xchen.test.simpleGobang; public

  • Java版画板的实现方法

    Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文章较长,但是代码是逐步递进的,可以按三部分分开来看,实现了当前部分再去看下一部分.)首先是画板的界面实现,因为我没有去找具体的图标,界面上的所有组件都是Swing的自带组件,所以界面略微有点简陋,不过如果想要优化也简单,把界面上的组件都改成自定义的图标即可.界面实现后,就可以考虑给界面的组件加上监听

  • JAVA GUI自定义JPanel画板背景

    自定义JPanel面板背景 一.前言 1.GUI全称是Graphical User Interface,就是图形用户界面.JAVA的GUI应用广泛在我们生活中也很常见.很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体. 一般程序与用户的交互都基于对应程序的运行界面. 2.JPanel面板是SWING下的一个面板容器类.该面板支持嵌套,可设置布局方式,设置不同的布局管理器可添加其他控件像JButton按钮,JTextField文本框等.来设计完善一个程序界面窗体. 作为绘制面板支持s

  • Java实现画线、矩形、椭圆、字符串功能

    本文讲述了Java实现画线.矩形.椭圆.字符串功能的实例代码.分享给大家供大家参考,具体如下: import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; /** * 增加窗口 画线.矩形.椭圆.字符串 * @author Lixiangjian * */ public class BallGame extends Frame{ //Image sun 代表所得到

  • Java实现两人五子棋游戏(二) 画出棋盘

    本文为大家分享了java画出五子棋游戏棋盘的方法,供大家参考,具体内容如下 棋盘模块: 画五子棋棋盘:19条横线.19条竖线 步骤一:显示棋盘 我有一张名为chessboard.png的棋盘,位置为根目录/res/drawable/chessboard/png,现在我要显示这张图片. DrawChessBoard.java package xchen.test.simpleGobang; import java.awt.Graphics; import java.awt.Image; impor

  • Java拖曳鼠标实现画线功能的方法

    本文实例主要实现Java拖曳鼠标画线的功能,为了达到画线的功能,分别用implements MouseListener与MouseMotionListener,并且由mousePressed(),mouseReleased()取得鼠标拖曳的开始与结束坐标.这是一个掌握Java鼠标事件的很好的范例. 具体实现代码如下: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MouseDemo e

随机推荐