package com.dy.common.util; 
 | 
  
 | 
import javax.imageio.ImageIO; 
 | 
import javax.swing.*; 
 | 
import java.awt.*; 
 | 
import java.awt.image.BufferedImage; 
 | 
import java.io.FileInputStream; 
 | 
import java.io.IOException; 
 | 
  
 | 
/** 
 | 
 * 图片转化Ascii 
 | 
 */ 
 | 
public class AsciiPic { 
 | 
  
 | 
    /** 
 | 
     * 将image转换成 BufferedImage 
 | 
     * 
 | 
     */ 
 | 
    public static BufferedImage toBufferedImage(Image image) { 
 | 
        if (image instanceof BufferedImage) { 
 | 
            return (BufferedImage)image; 
 | 
        } 
 | 
  
 | 
        // 加载所有像素 
 | 
        image = new ImageIcon(image).getImage(); 
 | 
        BufferedImage bImage = null; 
 | 
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
 | 
        try { 
 | 
            int transparency = Transparency.OPAQUE; 
 | 
  
 | 
            // 创建buffer图像 
 | 
            GraphicsDevice gs = ge.getDefaultScreenDevice(); 
 | 
            GraphicsConfiguration gc = gs.getDefaultConfiguration(); 
 | 
            bImage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency); 
 | 
        } catch (HeadlessException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        if (bImage == null) { 
 | 
            int type = BufferedImage.TYPE_INT_RGB; 
 | 
            bImage = new BufferedImage(image.getWidth(null), image.getHeight(null), type); 
 | 
        } 
 | 
        // 复制 
 | 
        Graphics g = bImage.createGraphics(); 
 | 
        // 赋值 
 | 
        g.drawImage(image, 0, 0, null); 
 | 
        g.dispose(); 
 | 
        return bImage; 
 | 
    } 
 | 
  
 | 
    public static Image creatImage(String ImgPath) { 
 | 
        Image srcImg = null; 
 | 
        try { 
 | 
            srcImg = ImageIO.read(new FileInputStream(ImgPath)); 
 | 
        } catch (Exception e1) { 
 | 
            e1.printStackTrace(); 
 | 
        } 
 | 
        Image smallImg = null ; 
 | 
        if(srcImg != null){ 
 | 
            //取源图 
 | 
            int width = 60; //假设要缩小到200点像素 
 | 
            int height = srcImg.getHeight(null)*60/srcImg.getWidth(null);//按比例,将高度缩减 
 | 
            smallImg = srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH);//缩小 
 | 
        } 
 | 
        return smallImg; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @param bfImage  图片路径 
 | 
     */ 
 | 
    public static void createAsciiPic(BufferedImage bfImage) throws IOException { 
 | 
        final String base = "@#&$O";// 字符串由复杂到简单 
 | 
        for (int y = 0; y < bfImage.getHeight(); y += 2) { 
 | 
            for (int x = 0; x < bfImage.getWidth(); x++) { 
 | 
                final int pixel = bfImage.getRGB(x, y); 
 | 
                final int r = (pixel & 0xff0000) >> 16, g = (pixel & 0xff00) >> 8, b = pixel & 0xff; 
 | 
                final float gray = 0.299f * r + 0.578f * g + 0.114f * b; 
 | 
                final int index = Math.round(gray * (base.length() + 1) / 255); 
 | 
                System.out.print(index >= base.length() ? " " : String.valueOf(base.charAt(index))); 
 | 
            } 
 | 
            System.out.println(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /* 
 | 
    public static void main(final String[] args) { 
 | 
        try { 
 | 
            AsciiPic.createAsciiPic(toBufferedImage(creatImage("DY.png"))); 
 | 
        } catch (IOException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
    */ 
 | 
} 
 |