1.  
  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. public class FileTest {
  27. public static ArrayList<String> fiList = new ArrayList<String>();
  28. public static int count = 0;
  29.  
  30. public static void main(String[] agrs) throws JpegProcessingException, IOException{
  31.  
  32. File filePath = new File("E://psresource/Root");
  33. String[] nameStrings = filePath.list(new MyFilenameFilter());
  34. for(String name : nameStrings){
  35. count++;
  36.  
  37. File file = new File("E://psresource/Root/" + name);
  38. fiList.add(file.getAbsolutePath());
  39. File jpegFile = new File(file.getAbsolutePath());
  40. try{
  41. Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
  42.  
  43. for(Directory directory : metadata.getDirectories()){
  44. for(Tag tag : directory.getTags()){
  45.  
  46. System.out.println(file + "的tag信息为: " +tag);
  47. }
  48. }
  49. }catch(JpegProcessingException e){
  50. System.out.println("%%%%%%%%%%%%%%%%%"+jpegFile.getAbsolutePath());
  51. if(jpegFile.delete()){
  52. System.out.println(jpegFile.getAbsolutePath() + "已经被删除");
  53. }
  54.  
  55. e.printStackTrace();
  56. }
  57.  
  58. //System.out.println(Integer.toString(count) + file.getAbsolutePath());
  59.  
  60. }
  61. //System.out.println(Integer.toString(count) + "所有的图片的名字:" + fiList.toString());
  62. }
  63.  
  64. }
  65.  
  66. 图片的操作:
  67.  
  68. 解析图片,需要两个包metadata-extractor-2.6.4.jar ,但是修改图片的EXIF信息,还要导入另一个jar包:mediautil-1.0.jar

图片的操作:

解析图片,需要两个包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. import mediautil.image.jpeg.Entry;
  16. import mediautil.image.jpeg.Exif;
  17. import mediautil.image.jpeg.LLJTran;
  18. import mediautil.image.jpeg.LLJTranException;
  19. import net.sf.json.JSONObject;
  20.  
  21. import com.drew.imaging.jpeg.JpegMetadataReader;
  22. import com.drew.metadata.Directory;
  23. import com.drew.metadata.Metadata;
  24. import com.drew.metadata.Tag;
  25.  
  26. /**
  27. * 测试用于读取图片的EXIF信息
  28. * @author Winter Lau
  29. */
  30. public class Exiftest {
  31.  
  32. /**
  33. * 经纬度转换 度分秒转换
  34. * @param point 坐标点
  35. * @return
  36. */
  37. public static String pointToLatlong (String point ) {
  38. Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());
  39. Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("'")).trim());
  40. Double miao = Double.parseDouble(point.substring(point.indexOf("'")+1, point.indexOf("\"")).trim());
  41. Double duStr = du + fen / 60 + miao / 60 / 60 ;
  42. return duStr.toString();
  43. }
  44. public static void main(String[] args) throws Exception {
  45. //File jpegFile = new File("E:\\psresource\\img\\photos\\images\\20140627_140048.jpg");
  46. File jpegFile = new File("E:\\psresource\\img\\photos\\wwd\\iphone\\20140521.jpg");
  47. Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
  48.  
  49. JSONObject jsonObject = new JSONObject();
  50.  
  51. Double lat = null;
  52. Double lon=null;
  53. Date date = null;
  54. for(Directory directory : metadata.getDirectories()){
  55. for(Tag tag : directory.getTags()){
  56. System.out.println(tag);
  57.  
  58. String tagname = tag.getTagName();
  59. if(tagname.equals("GPS Longitude")){
  60. System.out.println(pointToLatlong(tag.getDescription()));
  61. lon = Double.valueOf(pointToLatlong(tag.getDescription()));
  62. jsonObject.accumulate("lon", lon);
  63. }
  64. else if (tagname.equals("GPS Latitude")) {
  65. System.out.println(pointToLatlong(tag.getDescription()));
  66. lat = Double.valueOf(pointToLatlong(tag.getDescription()));
  67. jsonObject.accumulate("lat", lat);
  68. }
  69. if(tagname.equals("Date/Time")){
  70. System.out.println(tag.getDescription());
  71. SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
  72.  
  73. Date date2 = sdf.parse(tag.getDescription());
  74. Long dateLong = date2.getTime();
  75. jsonObject.accumulate("time", dateLong);
  76.  
  77. }
  78. }
  79. System.out.println(jsonObject.toString());
  80. }
  81.  
  82. }
  83. }

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

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

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

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

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  3. java 遍历文件夹里的文件

    Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...

  4. PHP遍历目录下的文件夹和文件 以及遍历文件下内容

    1.遍历目录下的文件夹和文件: public function bianli1($dir) { $files = array(); if($head = opendir($dir)) { while( ...

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

    利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...

  6. Java遍历目录下全部文件并替换指定字符串

    应用场景:比方有一个深层次的文件目录结构,如:javaAPI 每一个文件中面都有同样的内容,而我们要统一改动为其它内容.上千个文件假设一个个改动显得太不明智. import java.io.Buffe ...

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

    package file; import java.io.File; public class Test1 { public static void main(String[] args) { Str ...

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

    周末因为一些原因,需要批量更改一些文件的名称,使其随机,就随手写了点代码. 增加一个随机字母: public static void changeName(String path){ File fil ...

  9. Java 遍历文件夹里面的全部文件、指定文件

    Java 手册 listFiles public File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件 ...

随机推荐

  1. 最受欢迎的8位Java大师

    面是8位Java牛人,他们为Java社区编写框架.产品.工具或撰写书籍改变了Java编程的方式. P.S 以下排名纯属个人喜好. 1. Tomcat & Ant创始人 James Duncan ...

  2. 图片延迟加载技术-Lazyload的应用

    我们在浏览图片量非常大的页面时,像淘宝商城商品展示.必应图片搜索这类网站,图片的加载非常流畅,其中就应用了图片延迟加载技术.本文讲解Lazyload图片加载插件,当我们打开页面时,首先在屏幕可视区域加 ...

  3. JAVA装饰器模式

    Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式. 一.定义: Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样 ...

  4. js 小练习之indexOf

    闲来无事~ 写点小练习 function zz(arr, item) { var a=arr.join("") var b=a.indexOf(item) alert(b) } z ...

  5. javascript事件:获取事件对象getEvent函数

    在javascript开发中我们会经常获取页面中的事件对象,然后来处理这些事件,例如下面的getEvent函数就是获取javascript下的页面事件对象. function getEvent(eve ...

  6. org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session

    出错原因很简单:数据库服务没开,自然就打不开Session了.

  7. HTTP POST和GET的区别[转]

    http://www.cppblog.com/woaidongmao/archive/2008/05/29/51476.aspx 1.HTTP 只有POST和GET 两种命令模式: 2.POST是被设 ...

  8. 项目中怎么去掉tomcat的猫

    其实很简单,需要在登录页和显示内容的主页,将自己的favicon.ico 导入,并在登录页和主页将其引入即可. 例如: 接着在登录页引入  <link rel="shortcut ic ...

  9. Selenium自动化测试(java语言)

    Selenium介绍 Selenium 1.0 包含 core. IDE. RC. grid 四部分,  selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化( OOPP) 和便于 ...

  10. MFC CArchive实现保存到二进制文件

    先看一下效果图 BOOL Save2File() { BOOL bOpenFileDialog = FALSE; ---------------------------------- ① BOOL b ...