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

 更新时间:2018年03月31日 10:14:21   作者:Al_assad  
这篇文章主要为大家详细介绍了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!"); 
   
 } 
 
} 

点击查看:参考链接

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

相关文章

  • java与js代码互调示例代码

    java与js代码互调示例代码

    用到java和js方法互调,在用HTML5做跨平台应用开发时经常会用到,在这里分享一些自己在实际开发过程中的用法,希望对初学者有所帮助
    2013-07-07
  • SpringBoot项目中建议关闭Open-EntityManager-in-view原因

    SpringBoot项目中建议关闭Open-EntityManager-in-view原因

    这篇文章主要为大家解析了在Spring Boot项目中建议关闭Open-EntityManager-in-view的原因示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • 一文详解Java中的可变对象(Mutable)与不可变对象(Immutable)

    一文详解Java中的可变对象(Mutable)与不可变对象(Immutable)

    如何在 Java 中创建不可变对象?我以前以为所有对象都是不可变的,因为如果你改变一个 String 实例的内容,它总是会创建一个新的 String 对象并指向该对象,在本文中,我不仅将分享在 Java 中Immutable的步骤,还将讨论可变对象与不可变对象及其优缺点
    2023-11-11
  • SpringBoot使用MyBatis-Flex实现灵活的数据库访问

    SpringBoot使用MyBatis-Flex实现灵活的数据库访问

    MyBatisFlex是一款优秀的持久层框架,本文主要介绍了SpringBoot使用MyBatis-Flex实现灵活的数据库访问,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • BeanUtils.copyProperties复制对象结果为空的原因分析

    BeanUtils.copyProperties复制对象结果为空的原因分析

    这篇文章主要介绍了BeanUtils.copyProperties复制对象结果为空的原因分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 在SSM中配置了事务控制但没生效的问题

    在SSM中配置了事务控制但没生效的问题

    这篇文章主要介绍了在SSM中配置了事务控制但没生效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java多线程(单例模式,堵塞队列,定时器)详解

    Java多线程(单例模式,堵塞队列,定时器)详解

    这篇文章主要介绍了java多线程的(单例模式,堵塞队列,定时器),具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下
    2021-08-08
  • Spring Framework常用面试题及答案汇总

    Spring Framework常用面试题及答案汇总

    这篇文章主要介绍了Spring Framework常用面试题及答案汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java 数据交换 Json 和 异步请求 Ajax详解

    Java 数据交换 Json 和 异步请求 Ajax详解

    Json(JavaScript Object Notation)是一种轻量级的数据交换格式,采用键值对的形式来表示数据,它广泛应用于Web开发中,特别适合于前后端数据传输和存储,这篇文章主要介绍了Java数据交换Json和异步请求Ajax,需要的朋友可以参考下
    2023-09-09
  • java dom4j解析xml用到的几个方法

    java dom4j解析xml用到的几个方法

    这篇文章主要介绍了java dom4j解析xml用到的几个方法,有需要的朋友可以参考一下
    2013-12-12

最新评论