This is a blog about how to get the image file(s) some informations.Including the Make,Model,Date/Tiime,etc.
while,how can do it? I should use a tool which name is :Exif,writed by Java,and now its version is 2.6.4.
and you can get more from the here. or osChina
How does it work?
while,I hava a demo and I will show the complete code to you.
1 /**
2 *
3 */
4 package com.b510.test;
5
6 import java.io.File;
7 import java.io.IOException;
8 import java.util.ArrayList;
9 import java.util.Collection;
10 import java.util.HashMap;
11 import java.util.Iterator;
12 import java.util.List;
13 import java.util.Map;
14
15 import com.drew.imaging.jpeg.JpegMetadataReader;
16 import com.drew.imaging.jpeg.JpegProcessingException;
17 import com.drew.metadata.Directory;
18 import com.drew.metadata.Metadata;
19 import com.drew.metadata.Tag;
20 import com.drew.metadata.exif.ExifIFD0Directory;
21 /**
22 * only handle the "jpeg" format image file(s)<br>
23 * <a href="https://drewnoakes.com/code/exif/">Get more about the Exif>></a>
24 * @author Hongten
25 * @date 2013-12-20
26 */
27 public class ExifTester {
28
29 //separating character
30 public static final String LINE = "-";
31 public static final String RIGHT_PARENTHESES = "]";
32
33
34 public static void main(String[] args) throws Exception {
35 //if you want to run this code.you should be rewrite the following array of String.
36 //and be sure the correct path of the image file
37 String[] pathNames = {
38 "C:/2013-02-08_12-24-54_100.jpg",//motorola ME865
39 "C:/20022013011.jpg",//nokia 6700s
40 "C:/IMG_0018.JPG",//download from web site
41 "C:/IMG_0697.JPG", //ipad4
42 "C:/P1080402.JPG"//Panasonic DMC-LX5
43 };
44 List<File> files = new ArrayList<File>();
45 for (String pathname : pathNames) {
46 File file = new File(pathname);
47 files.add(file);
48 }
49 List<Map<String, String>> imagesInfo = getImageInfoOfExif(files);
50 printImagesInfo(imagesInfo);
51 //Get the image file informations
52 File file = new File("C:/IMG_0697.JPG");
53 Map<String, String> map = getImageInfoOfExif(file);
54 System.out.println("##### the image file informations");
55 HandleMap(map);
56 }
57
58 /**
59 * print the abstracts of image file
60 * @param imagesInfo
61 */
62 private static void printImagesInfo(List<Map<String, String>> imagesInfo) {
63 if(!imagesInfo.isEmpty()){
64 for(Map<String, String> map: imagesInfo){
65 HandleMap(map);
66 System.out.println("======================================");
67 }
68 }
69 }
70
71 /**
72 * @param map
73 */
74 private static void HandleMap(Map<String, String> map) {
75 Iterator<String> iterator = map.keySet().iterator();
76 while (iterator.hasNext()) {
77 String name = iterator.next();
78 String value = map.get(name);
79 printInfo(name, value);
80 }
81 }
82
83 /**
84 * @param name
85 * @param value
86 */
87 private static void printInfo(String name, String value) {
88 System.out.println(name + " : " + value);
89 }
90
91 /**
92 * get the abstracts of the image file
93 * @param jpegFile
94 * @return
95 * @throws JpegProcessingException
96 * @throws IOException
97 */
98 @SuppressWarnings("unchecked")
99 private static Map<String, String> getImageInfoOfExif(File jpegFile) throws JpegProcessingException, IOException {
100 Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
101 Directory exifDirectory = metadata.getDirectory(ExifIFD0Directory.class);
102 Collection tags = exifDirectory.getTags();
103 Iterator iterator = tags.iterator();
104 Map<String, String> abstractsMap = new HashMap<String, String>();
105 while (iterator.hasNext()) {
106 Tag tag = (Tag) iterator.next();
107 String[] tagArrays = tag.toString().split(LINE);
108 String[] abstracts = tagArrays[0].trim().split(RIGHT_PARENTHESES);
109 abstractsMap.put(abstracts[1].trim(), tagArrays[1].trim());
110 }
111 return abstractsMap;
112 }
113
114 /**
115 * handle more than one image files
116 * @param files
117 * @return
118 * @throws JpegProcessingException
119 * @throws IOException
120 */
121 private static List<Map<String, String>> getImageInfoOfExif(List<File> files) throws JpegProcessingException, IOException{
122 if(files == null)return null;
123 List<Map<String, String>> list = new ArrayList<Map<String,String>>();
124 if(files.size() > 0){
125 for(File file: files){
126 Map<String, String> map = getImageInfoOfExif(file);
127 list.add(map);
128 }
129 }
130 return list;
131 }
132 }
and the output as following:
Date/Time : 2013:02:08 12:24:53
Model : ME865
X Resolution : 72 dots per inch
YCbCr Positioning : Center of pixel array
Resolution Unit : Inch
Y Resolution : 72 dots per inch
Make : Motorola
======================================
Orientation : Top, left side (Horizontal / normal)
Model : 6700s
X Resolution : 300 dots per inch
YCbCr Positioning : Center of pixel array
Resolution Unit : Inch
Y Resolution : 300 dots per inch
Make : Nokia
======================================
Orientation : Top, left side (Horizontal / normal)
X Resolution : 72 dots per inch
YCbCr Positioning : Center of pixel array
Resolution Unit : Inch
Y Resolution : 72 dots per inch
======================================
Software : 6.1.3
Date/Time : 2013:06:27 23:31:19
Orientation : Right side, top (Rotate 90 CW)
Model : iPad
X Resolution : 72 dots per inch
YCbCr Positioning : Center of pixel array
Resolution Unit : Inch
Y Resolution : 72 dots per inch
Make : Apple
======================================
Software : Ver.1.0
Unknown tag (0xc4a5) : [208 bytes]
Model : DMC
Orientation : Top, left side (Horizontal / normal)
YCbCr Positioning : Datum point
Unknown tag (0xc6d3) : [128 bytes]
Date/Time : 2013:01:04 00:01:06
X Resolution : 180 dots per inch
Unknown tag (0xc6d2) : [64 bytes]
Resolution Unit : Inch
Artist :
Y Resolution : 180 dots per inch
Make : Panasonic
======================================
##### the image file informations
Software : 6.1.3
Date/Time : 2013:06:27 23:31:19
Orientation : Right side, top (Rotate 90 CW)
Model : iPad
X Resolution : 72 dots per inch
YCbCr Positioning : Center of pixel array
Resolution Unit : Inch
Y Resolution : 72 dots per inch
Make : Apple
it work and the output is so cool.
then, you should have a try!