Java 图片提取RGB数组 RGBOfCharMaps (整理)

简介: 1 package demo; 2 3 /** 4 * Java 图片提取RGB数组 RGBOfCharMaps (整理) 5 * 声明: 6 * 和ImageCombining配合使用的工具,这里是提取图片的R、G、B生成数组,放入文件 7 * 中,给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      * &nbsp &nbsp &nbsp &nbsp
 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
目录
相关文章
|
3月前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
106 4
|
3月前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
76 2
|
3月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
40 4
|
3月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
47 2
|
3月前
|
Java 数据安全/隐私保护
Java ffmpeg 实现视频加文字/图片水印功能
【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
223 1
|
3月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
107 2
|
3月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
33 1
|
3月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
135 1
|
3月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
43 0
|
3月前
|
算法 小程序 Java
java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上
这篇文章介绍了如何使用Java获取微信小程序的二维码,并将其调整大小后合成到海报(另一张图片)上。
63 0