溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在java中將圖像轉換為字符畫

發(fā)布時間:2021-02-22 15:45:51 來源:億速云 閱讀:291 作者:Leah 欄目:編程語言

如何在java中將圖像轉換為字符畫?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Java是什么

Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應用程序。

具體內(nèi)容如下

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中將圖像轉換為字符畫問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI