首页 > 代码库 > java画图程序_图片用字母画出来_源码发布_版本二

java画图程序_图片用字母画出来_源码发布_版本二

在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中。

项目结构:

运行效果1:

原图:http://image.mamicode.com/info/201407/20180110153956750019.png

运行效果2:

原图:http://image.mamicode.com/info/201407/20180110153956751972.png

===============================================

源码部分:

===============================================

/imageHandler/src/com/b510/image/client/Client.java

 1 /** 2  *  3  */ 4 package com.b510.image.client; 5  6 import java.io.File; 7  8 import com.b510.image.common.Common; 9 import com.b510.image.util.ImageUtil;10 import com.b510.image.util.ScaledImageUtil;11 import com.b510.image.util.TextUtil;12 13 /**14  * This project is a tool for processing the image. <br>Including TWO functions :15  * <li>Color image to converted black and white picture.16  * <li>Imitating the original image to paint into the TXT file with alphabets.17  * You can change the code according to your requirement.18  * 19  * @author Hongten20  * @mail hongtenzone@foxmail.com21  * @created Jul 23, 201422  */23 public class Client {24     25     public static String SCALED_IMAGE = Common.SCALED + Common.FULL_STOP + ScaledImageUtil.getPostfix(Common.ORIGINAL);26 27     public static void main(String[] args) {28         //colorImage2BWPic();29         painting(Common.ORIGINAL, SCALED_IMAGE, 1);30 //        remoteImageHandler("E:/images/ipad/photo"); //NOTE: Provider your folder path, which includ some pictures31     }32 33     /**34      * Continuously review images35      * @param remotePath Other folder path(Including pictures)36      */37     private static void remoteImageHandler(String remotePath) {38         File file = new File(remotePath);39         File[] fileList = file.listFiles();40         for (int i = 0; i < fileList.length; i++) {41             if(fileList[i].isFile()){42                 String originalImagePath = fileList[i].getAbsolutePath();43                 System.out.println("Processing ... " + originalImagePath);44                 SCALED_IMAGE =  Common.SCALED + Common.FULL_STOP + ScaledImageUtil.getPostfix(originalImagePath);45                 painting(originalImagePath, SCALED_IMAGE, 1);46             }47             try {48                 Thread.sleep(4000); // every four seconds49             } catch (InterruptedException e) {50                 e.printStackTrace();51             }52         }53     }54 55     private static void painting(String originalImagePath, String scalImagepath, int scaled) {56         ScaledImageUtil.scaledImage(originalImagePath, scaled, scalImagepath);57         double[][] result = ImageUtil.getImageGRB(scalImagepath);58         StringBuffer stringBuffer = ImageUtil.getCanvas(result);59         TextUtil.write2File(stringBuffer);60     }61 62     /**63      * Color image to converted black and white picture.64      */65     private static void colorImage2BWPic() {66         File input = new File(Common.ORIGINAL_IMAGE);67         File out = new File(Common.PROCESSED_IMAGE);68         ImageUtil.colorImage2BlackAndWhitePicture(input, out);69     }70 }

/imageHandler/src/com/b510/image/common/Common.java

 1 /** 2  *  3  */ 4 package com.b510.image.common; 5  6 /** 7  * @author Hongten 8  * @created Jul 23, 2014 9  */10 public class Common {11     12     public static final String PATH = "src/com/b510/image/resources/";13     14     public static final String ORIGINAL = PATH + "original.jpg";15     public static final String SCALED = PATH + "scaled";16     17     public static final String ORIGINAL_IMAGE = PATH + "original_image.png";18     public static final String PROCESSED_IMAGE =  PATH + "processed_image.png";19     20     public static final String OUTPUT_TXT = PATH + "output.txt";21 22     public static final String PROCESSED_SUCCESS = "Processed successfully...";23     public static final String PROCESS_ERROR = "Processing encounters error!";24 25     public static final String R = "R";26     public static final String A = "A";27     public static final String X = "X";28     public static final String M = "M";29     public static final String W = "W";30     public static final String H = "H";31     public static final String E = "E";32     public static final String J = "J";33     public static final String L = "L";34     public static final String C = "C";35     public static final String V = "V";36     public static final String Z = "Z";37     public static final String Q = "Q";38     public static final String T = "T";39     public static final String r = "r";40     public static final String s = "s";41     public static final String w = "w";42     public static final String u = "u";43     public static final String l = "l";44     public static final String i = "i";45     public static final String e = "e";46     public static final String m = "m";47     public static final String a = "a";48     public static final String COMMA = ",";49     public static final String FULL_STOP = ".";50     public static final String BLANK = " ";51     52     public static final String NEW_LINE = "\n";53 }

/imageHandler/src/com/b510/image/util/ImageUtil.java

  1 /**  2  *   3  */  4 package com.b510.image.util;  5   6 import java.awt.Image;  7 import java.awt.color.ColorSpace;  8 import java.awt.image.BufferedImage;  9 import java.awt.image.ColorConvertOp; 10 import java.io.File; 11 import java.io.FileOutputStream; 12 import java.io.IOException; 13  14 import javax.imageio.ImageIO; 15  16 import com.b510.image.common.Common; 17 import com.sun.image.codec.jpeg.JPEGCodec; 18 import com.sun.image.codec.jpeg.JPEGImageEncoder; 19  20 /** 21  * @author Hongten 22  * @created Jul 23, 2014 23  */ 24 public class ImageUtil { 25  26     private static int height = 0; 27     private static int width = 0; 28  29     /** 30      * Color image is converted to black and white picture. 31      * @param input 32      * @param out 33      */ 34     public static void colorImage2BlackAndWhitePicture(File input, File out) { 35         try { 36             Image image = ImageIO.read(input); 37             int srcH = image.getHeight(null); 38             int srcW = image.getWidth(null); 39             BufferedImage bufferedImage = new BufferedImage(srcW, srcH, BufferedImage.TYPE_3BYTE_BGR); 40             bufferedImage.getGraphics().drawImage(image, 0, 0, srcW, srcH, null); 41             bufferedImage = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null).filter(bufferedImage, null); 42             FileOutputStream fos = new FileOutputStream(out); 43             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); 44             encoder.encode(bufferedImage); 45             fos.close(); 46             System.out.println(Common.PROCESSED_SUCCESS); 47         } catch (Exception e) { 48             throw new IllegalStateException(Common.PROCESS_ERROR, e); 49         } 50     } 51  52     /** 53      * Get the image(*.jpg, *.png.etc) GRB value 54      * @param filePath the original image path 55      * @return 56      */ 57     public static double[][] getImageGRB(String filePath) { 58         File file = new File(filePath); 59         double[][] result = null; 60         if (!file.exists()) { 61             return result; 62         } 63         try { 64             BufferedImage bufImg = readImage(file); 65             result = new double[height][width]; 66             for (int y = 0; y < height; y++) { 67                 for (int x = 0; x < width; x++) { 68                     double temp = Double.valueOf(bufImg.getRGB(x, y) & 0xFFFFFF); 69                     result[y][x] = Math.floor(Math.cbrt(temp)); 70                 } 71             } 72         } catch (IOException e) { 73             e.printStackTrace(); 74         } 75         return result; 76     } 77  78     /** 79      * Read the original image to convert BufferedImage 80      * @param file Original image path 81      * @return 82      * @see BufferedImage 83      * @throws IOException 84      */ 85     private static BufferedImage readImage(File file) throws IOException { 86         BufferedImage bufImg = ImageIO.read(file); 87         height = bufImg.getHeight(); 88         width = bufImg.getWidth(); 89         return bufImg; 90     } 91      92     /** 93      * Get the canvas, which is made up of alphabets. 94      * @param result 95      * @return 96      */ 97     public static StringBuffer getCanvas(double[][] result) { 98         StringBuffer stringBuffer = new StringBuffer(); 99         for (int y = 0; y < height; y++) {100             for (int x = 0; x < width; x++) {101                 fullBlank(result, stringBuffer, y, x);102             }103             stringBuffer.append(Common.NEW_LINE);104         }105         return new StringBuffer(stringBuffer.substring(0, stringBuffer.length() - 1));106     }107 108     /**109      * Full blank110      * @param result111      * @param stringBuffer112      * @param y113      * @param x114      */115     private static void fullBlank(double[][] result, StringBuffer stringBuffer, int y, int x) {116         if (result[y][x] > 0.0 && result[y][x] < 168.0) {117             fullBlackColor(result, stringBuffer, y, x);118         } else if (result[y][x] >= 168.0 && result[y][x] < 212.0) {119             fullGreyColor(result, stringBuffer, y, x);120         } else {121             fullWhiteColor(result, stringBuffer, y, x);122         }123     }124 125     /**126      * Full black color, and you can change the alphabet if you need.127      * @param result128      * @param stringBuffer129      * @param y130      * @param x131      */132     private static void fullBlackColor(double[][] result, StringBuffer stringBuffer, int y, int x) {133         if (result[y][x] > 0.0 && result[y][x] < 25.0) {134             stringBuffer.append(Common.R);135         } else if (result[y][x] >= 25.0 && result[y][x] < 50.0) {136             stringBuffer.append(Common.R);137         } else if (result[y][x] >= 50.0 && result[y][x] < 75.0) {138             stringBuffer.append(Common.A);139         } else if (result[y][x] >= 75.0 && result[y][x] < 100.0) {140             stringBuffer.append(Common.X);141         } else if (result[y][x] >= 100.0 && result[y][x] < 125.0) {142             stringBuffer.append(Common.R);143         } else if (result[y][x] >= 125.0 && result[y][x] < 150.0) {144             stringBuffer.append(Common.A);145         } else if (result[y][x] >= 150.0 && result[y][x] < 154.0) {146             stringBuffer.append(Common.X);147         } else if (result[y][x] >= 154.0 && result[y][x] < 158.0) {148             stringBuffer.append(Common.M);149         } else if (result[y][x] >= 158.0 && result[y][x] < 162.0) {150             stringBuffer.append(Common.W);151         } else if (result[y][x] >= 162.0 && result[y][x] < 168.0) {152             stringBuffer.append(Common.M);153         }154     }155 156     /**157      * Full grey color158      * @param result159      * @param stringBuffer160      * @param y161      * @param x162      */163     private static void fullGreyColor(double[][] result, StringBuffer stringBuffer, int y, int x) {164         if (result[y][x] >= 168.0 && result[y][x] < 172.0) {165             stringBuffer.append(Common.H);166         } else if (result[y][x] >= 172.0 && result[y][x] < 176.0) {167             stringBuffer.append(Common.E);168         } else if (result[y][x] >= 176.0 && result[y][x] < 180.0) {169             stringBuffer.append(Common.H);170         } else if (result[y][x] >= 180.0 && result[y][x] < 184.0) {171             stringBuffer.append(Common.H);172         } else if (result[y][x] >= 184.0 && result[y][x] < 188.0) {173             stringBuffer.append(Common.J);174         } else if (result[y][x] >= 188.0 && result[y][x] < 192.0) {175             stringBuffer.append(Common.L);176         } else if (result[y][x] >= 192.0 && result[y][x] < 196.0) {177             stringBuffer.append(Common.C);178         } else if (result[y][x] >= 196.0 && result[y][x] < 200.0) {179             stringBuffer.append(Common.V);180         } else if (result[y][x] >= 200.0 && result[y][x] < 204.0) {181             stringBuffer.append(Common.Z);182         } else if (result[y][x] >= 204.0 && result[y][x] < 208.0) {183             stringBuffer.append(Common.Q);184         } else if (result[y][x] >= 208.0 && result[y][x] < 212.0) {185             stringBuffer.append(Common.T);186         }187     }188 189     /**190      * Full white color191      * @param result192      * @param stringBuffer193      * @param y194      * @param x195      */196     private static void fullWhiteColor(double[][] result, StringBuffer stringBuffer, int y, int x) {197         if (result[y][x] >= 212.0 && result[y][x] < 216.0) {198             stringBuffer.append(Common.r);199         } else if (result[y][x] >= 216.0 && result[y][x] < 220.0) {200             stringBuffer.append(Common.s);201         } else if (result[y][x] >= 220.0 && result[y][x] < 224.0) {202             stringBuffer.append(Common.w);203         } else if (result[y][x] >= 224.0 && result[y][x] < 228.0) {204             stringBuffer.append(Common.u);205         } else if (result[y][x] >= 228.0 && result[y][x] < 232.0) {206             stringBuffer.append(Common.l);207         } else if (result[y][x] >= 232.0 && result[y][x] < 236.0) {208             stringBuffer.append(Common.i);209         } else if (result[y][x] >= 236.0 && result[y][x] < 240.0) {210             stringBuffer.append(Common.e);211         } else if (result[y][x] >= 240.0 && result[y][x] < 244.0) {212             stringBuffer.append(Common.COMMA);213         } else if (result[y][x] >= 244.0 && result[y][x] < 248.0) {214             stringBuffer.append(Common.m);215         } else if (result[y][x] >= 248.0 && result[y][x] < 252.0) {216             stringBuffer.append(Common.a);217         } else if (result[y][x] >= 252.0 && result[y][x] < 257.0) {218             stringBuffer.append(Common.BLANK);219         }220     }221 }

/imageHandler/src/com/b510/image/util/ScaledImageUtil.java

 1 /** 2  *  3  */ 4 package com.b510.image.util; 5  6 import java.awt.Graphics2D; 7 import java.awt.Image; 8 import java.awt.RenderingHints; 9 import java.awt.image.BufferedImage;10 import java.io.File;11 import java.io.IOException;12 13 import javax.imageio.ImageIO;14 import javax.swing.ImageIcon;15 16 import com.b510.image.common.Common;17 18 /**19  * @author Hongten20  * @created 2014-7-2621  */22 public class ScaledImageUtil {23 24     public static int snapHeightMax = 196;25     public static int snapWidthMax = 200;26     27     public static void scaledImage(String originalImagePath, int scaled, String scaledImagePath) {28         try {29             ImageIcon icon = getImage(ImageIO.read(new File(originalImagePath)), 5);30             BufferedImage savedImage = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_3BYTE_BGR);31             savedImage.createGraphics().drawImage(icon.getImage(), 0, 0, null);32             ImageIO.write(savedImage, getPostfix(originalImagePath), new File(scaledImagePath));33             System.out.println(Common.PROCESSED_SUCCESS);34         } catch (IOException e) {35             e.printStackTrace();36         }37     }38     39     public static String getPostfix(String inputFilePath) {40         return inputFilePath.substring(inputFilePath.lastIndexOf(Common.FULL_STOP) + 1);41     }42     43     public static ImageIcon getImage(Image img, int scaled) {44         ImageIcon icon = new ImageIcon(getImages(img, scaled));45         return icon;46     }47 48     public static Image getImages(Image img, int scaled) {49         int heigth = 0;50         int width = 0;51 52         if (scaled < 25) {53             scaled = 25;54         }55 56         String sScaled = String.valueOf(Math.ceil((double) scaled / 25));57         int indexX = sScaled.indexOf(".");58         scaled = Integer.parseInt(sScaled.substring(0, indexX));59 60         double scaleds = getScaling(img.getWidth(null), img.getHeight(null), scaled);61 62         try {63             heigth = (int) (img.getHeight(null) * scaleds);64             width = (int) (img.getWidth(null) * scaleds);65         } catch (Exception e) {66             e.printStackTrace();67         }68 69         return getScaledImage(img, width, heigth);70     }71 72     public static Image getScaledImage(Image srcImg, int width, int heigth) {73         BufferedImage resizedImg = new BufferedImage(width, heigth, BufferedImage.TYPE_INT_RGB);74         Graphics2D g2 = resizedImg.createGraphics();75         g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);76         g2.drawImage(srcImg, 0, 0, width, heigth, null);77         g2.dispose();78 79         Image image = srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_DEFAULT);80 81         return resizedImg;82     }83 84     /**85      * Get the image zoom ratio86      * @param sourceWidth 87      * @param sourceHeight88      * @return scaled 89      */90     public static double getScaling(int sourceWidth, int sourceHeight, int scaled) {91         double widthScaling = ((double) snapWidthMax * (double) scaled) / (double) sourceWidth;92         double heightScaling = ((double) snapHeightMax * (double) scaled) / (double) sourceHeight;93 94         double scaling = (widthScaling < heightScaling) ? widthScaling : heightScaling;95 96         return scaling;97     }98 }

/imageHandler/src/com/b510/image/util/TextUtil.java

 1 /** 2  *  3  */ 4 package com.b510.image.util; 5  6 import java.io.BufferedWriter; 7 import java.io.File; 8 import java.io.FileWriter; 9 import java.io.IOException;10 11 import com.b510.image.common.Common;12 13 /**14  * @author Hongten15  * @created Jul 23, 201416  */17 /**18  * @author Hongten19  * @created 2014-7-2620  */21 public class TextUtil {22 23     /**24      * Write the string to file.25      * @param stringBuffer26      */27     public static void write2File(StringBuffer stringBuffer) {28         File f = new File(Common.OUTPUT_TXT);29         BufferedWriter output = null;30         try {31             output = new BufferedWriter(new FileWriter(f));32             output.write(stringBuffer.toString());33             output.close();34         } catch (IOException e) {35             e.printStackTrace();36         }37     }38 }

源码下载:http://files.cnblogs.com/hongten/imageHandler_v1.2.rar

========================================================

More reading,and english is important.

I‘m Hongten

hongten

========================================================

java画图程序_图片用字母画出来_源码发布_版本二