和ImageCombining配合使用的工具,这里是提取图片的R、G、B生成数组,放入文件中,给ImageCombining进行图片合成。
1 package demo;
2
3 /**
4 * Java 图片提取RGB数组 RGBOfCharMaps (整理)
5 * 声明:
6 * 和ImageCombining配合使用的工具,这里是提取图片的R、G、B生成数组,放入文件
7 * 中,给ImageCombining进行图片合成。
8 *
9 * 2016-1-2 深圳 南山平山村 曾剑锋
10 */
11
12 import java.awt.image.BufferedImage;
13 import java.io.BufferedOutputStream;
14 import java.io.File;
15 import java.io.FileOutputStream;
16 import java.io.IOException;
17 import java.util.regex.Matcher;
18 import java.util.regex.Pattern;
19 import javax.imageio.ImageIO;
20 import javax.swing.JFileChooser;
21 import javax.swing.filechooser.FileNameExtensionFilter;
22
23 public class RGBOfCharMaps{
24 /** 声明一个文件选择器引用 */
25 static JFileChooser jFileChooser = null;
26 /** 用于保存您选择的单个或者多个文件路径集合, 初始化为null */
27 static File filePath = null;
28 /** 保存图片的宽、高 */
29 static int imageWidth = 0;
30 static int imageHeight = 0;
31 /** 图像缓冲引用 */
32 static BufferedImage bufferedImage = null;
33 /**
34 * main()函数,完成任务如下:<br><ol>
35 * <li>对文件选择器进行初始化;<br>
36 * <li>保存转换好的文件;<br>
37 * <li>如果出现异常,给出提示信息。<br></ol>
38 */
39 public static void main(String[] args) {
40 try {
41 filesSelectInit();
42 System.out.println(1);
43 if (getImageFile()) {
44 fileSave();
45 System.out.println(imageHeight);
46 System.out.println(imageWidth);
47 };
48
49 } catch (Exception e) {
50 //System.out.println("请选择后缀为png/PNG/jpeg/jpe/JPEG的文件");
51 System.out.println(e);
52 }
53 }
54
55
56 private static boolean getImageFile() throws IOException {
57 if (jFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
58 filePath = jFileChooser.getSelectedFile();
59 if (fileSuffixCheck(filePath)) {
60 bufferedImage = ImageIO.read(filePath);
61 imageWidth = bufferedImage.getWidth();
62 imageHeight = bufferedImage.getHeight();
63 return true;
64 }
65 }
66 return false;
67 }
68
69
70 /**
71 * 文件后缀检查函数,完成任务如下:<br>
72 *        
73 * 采用正则表达式对文件进行匹配。<br>
74 */
75 private static boolean fileSuffixCheck(File filePath) {
76 //使用正则表达式来防止选择目前不支持的文件,目前只支持png/PNG/jpeg/jpe/JPEG格式图片
77 Pattern pattern = Pattern.compile(".+[.][pPJj][nNpP][eEgGpP][gG]?");
78 Matcher matcher = pattern.matcher(filePath.getName());
79 if (matcher.matches() == false) {
80 return false;
81 }
82 return true;
83 }
84 /**
85 * 文件保存函数,完成任务如下:<br><ol>
86 * <li>设置一个文件保存的路径,这个路径可以自己修改;<br>
87 * <li>创建文件路径下的文件缓冲区;<br>
88 * <li>将charMaps中的字符写好文件中,忽略在上、下、左、右边界之外的部分,只将边界内的字符输出;<br>
89 * <li>每写完一行字符,进行换行;<br>
90 * <li>最后关闭文件缓冲区,如果不关闭,文件缓冲区内的字符可能不会写到文件中,请注意;<br>
91 * <li>提示完成以及提示文件路径。<br><ol>
92 */
93 private static void fileSave() {
94 File[] saveFilePath = new File[3];
95 saveFilePath[0] = new File("/home/soft1/B.txt");
96 saveFilePath[1] = new File("/home/soft1/G.txt");
97 saveFilePath[2] = new File("/home/soft1/R.txt");
98 try {
99 SaveRGB(saveFilePath);
100 } catch (IOException e1) {
101 e1.printStackTrace();
102 }
103 }
104
105 private static void SaveRGB(File[] saveFilePath) throws IOException {
106 String[] RGB = {"Blue","Green","Red"};
107 StringBuilder stringBuilder = new StringBuilder();
108 for (int i = 0; i < saveFilePath.length; i++) {
109 BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(saveFilePath[i]));
110 singleColorSave(stringBuilder,bufferedOutputStream,i);
111 System.out.println("CharMaps已完成颜色"+RGB[i]+"工作,请到"+saveFilePath[i].getPath()+"中查看结果 ^_^\n");
112 }
113 }
114 private static void singleColorSave(StringBuilder stringBuilder,
115 BufferedOutputStream bufferedOutputStream, int i) throws IOException {
116 stringBuilder.append('{');
117 for (int row = 0; row < imageHeight; row++) {
118 stringBuilder.append('{');
119 for (int col = 0; col < imageWidth; col++) {
120 int rgb = bufferedImage.getRGB(col, row);
121 int singleColor = ((rgb >> (8*i))&0xff);
122 stringBuilder.append(singleColor);
123 stringBuilder.append(',');
124 }
125 stringBuilder.append('}');
126 if (row == imageHeight-1) {
127 stringBuilder.append('}');
128 }else {
129 stringBuilder.append(',');
130 }
131 byte[] byteWrite = (byte[])stringBuilder.toString().getBytes();
132 bufferedOutputStream.write(byteWrite, 0, stringBuilder.length());
133 bufferedOutputStream.write('\n');
134 bufferedOutputStream.flush();
135 stringBuilder.delete(0, stringBuilder.length());
136 }
137 bufferedOutputStream.close();
138 }
139
140
141 /**
142 * 文件选择对话框初始化函数,Init是初始化的英文单词缩写,完成任务如下:<br><ol>
143 * <li>提示欢迎使用CharMaps;<br>
144 * <li>创建文件选择对话框;<br>
145 * <li>创建文件选择过滤器;<br>
146 * <li>将文件选择过滤器添加进入文件对话框,还句话说是:使文件选择过滤器有效;<br>
147 * <li>将文件选择对话框设置为可以多选;<br>
148 * <li>提示完成初始化。<br></ol>
149 */
150 private static void filesSelectInit() {
151 System.out.println("\n\t欢迎使用RGBOfCharMaps");
152 jFileChooser = new JFileChooser();
153 FileNameExtensionFilter filter = new FileNameExtensionFilter(
154 "Images", "jpg", "png","PNG","JPG","jpe","JPE");
155 jFileChooser.setFileFilter(filter);
156 System.out.println("1、完成文件选择初始化");
157 }
158 }
RGBOfCharMaps