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