| New file | 
|  |  |  | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|