Java 遍历文件下jpg图片并解析图片

 

 1 package filetest;
 2
 3 import java.io.File;
 4 import java.io.FilenameFilter;
 5 import java.io.IOException;
 6 import java.util.ArrayList;
 7
 8 import com.drew.imaging.jpeg.JpegMetadataReader;
 9 import com.drew.imaging.jpeg.JpegProcessingException;
10 import com.drew.metadata.Directory;
11 import com.drew.metadata.Metadata;
12 import com.drew.metadata.Tag;
13 /**
14  * 文件的迭代输出
15  * 寻找某文件下以“.jpg”结尾的文件
16  * 并解析该图片
17  * */
18
19 class MyFilenameFilter implements FilenameFilter{
20     public boolean accept(File dir, String name){
21         return name.endsWith(".jpg")
22                 || new File(name).isDirectory();
23     }
24 }
25
26
27 public class FileTest {
28     public static ArrayList<String> fiList = new ArrayList<String>();
29     public static int count = 0;
30
31
32
33     public static void main(String[] agrs) throws JpegProcessingException, IOException{
34
35         File filePath = new File("E://psresource/Root");
36         String[] nameStrings = filePath.list(new MyFilenameFilter());
37         for(String name : nameStrings){
38             count++;
39
40             File file = new File("E://psresource/Root/" + name);
41             fiList.add(file.getAbsolutePath());
42             File jpegFile = new File(file.getAbsolutePath());
43             try{
44                  Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
45
46                  for(Directory directory : metadata.getDirectories()){
47                      for(Tag tag : directory.getTags()){
48
49                          System.out.println(file + "的tag信息为: " +tag);
50                      }
51                  }
52             }catch(JpegProcessingException e){
53                 System.out.println("%%%%%%%%%%%%%%%%%"+jpegFile.getAbsolutePath());
54                 if(jpegFile.delete()){
55                     System.out.println(jpegFile.getAbsolutePath() + "已经被删除");
56                 }
57
58                 e.printStackTrace();
59             }
60
61              //System.out.println(Integer.toString(count) + file.getAbsolutePath());
62
63         }
64         //System.out.println(Integer.toString(count) + "所有的图片的名字:" + fiList.toString());
65     }
66
67
68
69
70 }
71
72
73 图片的操作:
74
75
76
77 解析图片,需要两个包metadata-extractor-2.6.4.jar ,但是修改图片的EXIF信息,还要导入另一个jar包:mediautil-1.0.jar
78
79 

图片的操作:

解析图片,需要两个包metadata-extractor-2.6.4.jar ,但是修改图片的EXIF信息,还要导入另一个jar包:mediautil-1.0.jar

  1 package exiftest;
  2
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.File;
  6 import java.io.FileInputStream;
  7 import java.io.FileOutputStream;
  8 import java.io.InputStream;
  9 import java.io.InputStreamReader;
 10 import java.io.OutputStream;
 11 import java.text.SimpleDateFormat;
 12 import java.util.Date;
 13 import java.util.Iterator;
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30 import mediautil.image.jpeg.Entry;
 31 import mediautil.image.jpeg.Exif;
 32 import mediautil.image.jpeg.LLJTran;
 33 import mediautil.image.jpeg.LLJTranException;
 34 import net.sf.json.JSONObject;
 35
 36 import com.drew.imaging.jpeg.JpegMetadataReader;
 37 import com.drew.metadata.Directory;
 38 import com.drew.metadata.Metadata;
 39 import com.drew.metadata.Tag;
 40
 41 /**
 42  * 测试用于读取图片的EXIF信息
 43  * @author Winter Lau
 44  */
 45 public class Exiftest {
 46
 47      /**
 48      * 经纬度转换  度分秒转换
 49      * @param point 坐标点
 50      * @return
 51      */
 52     public static String pointToLatlong (String point ) {
 53         Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());
 54         Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("‘")).trim());
 55         Double miao = Double.parseDouble(point.substring(point.indexOf("‘")+1, point.indexOf("\"")).trim());
 56         Double duStr = du + fen / 60 + miao / 60 / 60 ;
 57         return duStr.toString();
 58     }
 59      public static void main(String[] args) throws Exception {
 60         //File jpegFile = new File("E:\\psresource\\img\\photos\\images\\20140627_140048.jpg");
 61          File jpegFile = new File("E:\\psresource\\img\\photos\\wwd\\iphone\\20140521.jpg");
 62          Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
 63
 64
 65
 66          JSONObject jsonObject = new JSONObject();
 67
 68          Double lat = null;
 69         Double lon=null;
 70         Date date = null;
 71          for(Directory directory : metadata.getDirectories()){
 72              for(Tag tag : directory.getTags()){
 73                 System.out.println(tag);
 74
 75                 String tagname = tag.getTagName();
 76                 if(tagname.equals("GPS Longitude")){
 77                     System.out.println(pointToLatlong(tag.getDescription()));
 78                     lon = Double.valueOf(pointToLatlong(tag.getDescription()));
 79                     jsonObject.accumulate("lon", lon);
 80                 }
 81                 else if (tagname.equals("GPS Latitude")) {
 82                     System.out.println(pointToLatlong(tag.getDescription()));
 83                     lat = Double.valueOf(pointToLatlong(tag.getDescription()));
 84                     jsonObject.accumulate("lat", lat);
 85                 }
 86                  if(tagname.equals("Date/Time")){
 87                      System.out.println(tag.getDescription());
 88                      SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
 89
 90                     Date date2 = sdf.parse(tag.getDescription());
 91                     Long dateLong = date2.getTime();
 92                      jsonObject.accumulate("time", dateLong);
 93
 94                  }
 95              }
 96             System.out.println(jsonObject.toString());
 97          }
 98
 99
100      }
101 }

时间: 2024-07-31 21:56:39

Java 遍历文件下jpg图片并解析图片的相关文章

JAVA 遍历文件夹下的所有文件

JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = 0, folderNum = 0; File file = new File(path); if (file.exists()) { LinkedList<File> list = new LinkedList<File>(); File[] files = file.listFile

java 遍历文件夹里的文件

Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { public static void main(String[] args) { long a = System.currentTimeMillis(); LinkedList list = new LinkedList(); File dir = new File("c:\\java\\&quo

java遍历文件夹

使用递归: import java.io.File; import java.util.ArrayList; public class FileSystem1 { private static ArrayList filelist = new ArrayList(); public static void main(String[] args) { long a = System.currentTimeMillis(); refreshFileList("C:/Users/shibin/Desk

遍历文件下所有文件

1 _finddata_t file; 2 3 char* szFilePack="F:\\RTMFP\\measurement data\\ME4\\recursive2\\lossbyte\\*.txt"; 4 long lf; 5 if ((lf=_findfirst(szFilePack,&file))==-1)//==优先级较高所以要加括号,找到文件夹下面第一个符合的文件 6 { 7 cout<<"cannot find file"&l

Java遍历文件夹下所有文件并替换指定字符串

应用场景:比如有一个深层次的文件目录结构,如:javaAPI 每个文件里面都有相同的内容,而我们要统一修改为其他内容.上千个文件如果一个个修改显得太不明智. import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; public class Test { /** *

Java遍历文件夹下的所以文件

利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重命名操作 1 package com.zhang.test; 2 3 import java.io.File; 4 5 public class getfilepath { 6 7 public static void main(String[] args) { 8 getDirectory(new

Java遍历文件夹及图像缩放批处理

记得我以前写过图像处理的文章是用大学里教的数字图像处理来操作,用个Matlab,不过最近实习中和一妹纸起了一点小冲突,双方都没多少时间处理这些资源,然后我是静下心来去思考了,妹纸怎么会花这么多的时间在这一工作上. 然后跑过去沟通,了解她整个工作的流程,果然有所发现,她修改图片大小是用美图来一张一张改的,整个过程花了1个小时,心里灵机一动,批量处理肯定能写,以前做过类似的,但是妹纸没有Matlab.为了解放生产力,我还是晚上时间把东西赶了出来. 首先说一下文件的规定,有多个文件,每个文件有jpg和

JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = 0, folderNum = 0; File file = new File(path); if (file.exists()) { LinkedList<File> list = new LinkedList<File>(); File[] files = file.listFiles(); for (File file2 : files)

JAVA 遍历文件夹下文件并更改文件名称

周末因为一些原因,需要批量更改一些文件的名称,使其随机,就随手写了点代码. 增加一个随机字母: public static void changeName(String path){ File file = new File(path); File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if(files[i].isDirectory()){ changeName(files[i].toString