package filetest;

 import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList; import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
/**
* 文件的迭代输出
* 寻找某文件下以“.jpg”结尾的文件
* 并解析该图片
* */ class MyFilenameFilter implements FilenameFilter{
public boolean accept(File dir, String name){
return name.endsWith(".jpg")
|| new File(name).isDirectory();
}
} public class FileTest {
public static ArrayList<String> fiList = new ArrayList<String>();
public static int count = 0; public static void main(String[] agrs) throws JpegProcessingException, IOException{ File filePath = new File("E://psresource/Root");
String[] nameStrings = filePath.list(new MyFilenameFilter());
for(String name : nameStrings){
count++; File file = new File("E://psresource/Root/" + name);
fiList.add(file.getAbsolutePath());
File jpegFile = new File(file.getAbsolutePath());
try{
Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); for(Directory directory : metadata.getDirectories()){
for(Tag tag : directory.getTags()){ System.out.println(file + "的tag信息为: " +tag);
}
}
}catch(JpegProcessingException e){
System.out.println("%%%%%%%%%%%%%%%%%"+jpegFile.getAbsolutePath());
if(jpegFile.delete()){
System.out.println(jpegFile.getAbsolutePath() + "已经被删除");
} e.printStackTrace();
} //System.out.println(Integer.toString(count) + file.getAbsolutePath()); }
//System.out.println(Integer.toString(count) + "所有的图片的名字:" + fiList.toString());
} } 图片的操作: 解析图片,需要两个包metadata-extractor-2.6.4.jar ,但是修改图片的EXIF信息,还要导入另一个jar包:mediautil-1.0.jar

图片的操作:

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

 package exiftest;

 import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator; import mediautil.image.jpeg.Entry;
import mediautil.image.jpeg.Exif;
import mediautil.image.jpeg.LLJTran;
import mediautil.image.jpeg.LLJTranException;
import net.sf.json.JSONObject; import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag; /**
* 测试用于读取图片的EXIF信息
* @author Winter Lau
*/
public class Exiftest { /**
* 经纬度转换 度分秒转换
* @param point 坐标点
* @return
*/
public static String pointToLatlong (String point ) {
Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());
Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("'")).trim());
Double miao = Double.parseDouble(point.substring(point.indexOf("'")+1, point.indexOf("\"")).trim());
Double duStr = du + fen / 60 + miao / 60 / 60 ;
return duStr.toString();
}
public static void main(String[] args) throws Exception {
//File jpegFile = new File("E:\\psresource\\img\\photos\\images\\20140627_140048.jpg");
File jpegFile = new File("E:\\psresource\\img\\photos\\wwd\\iphone\\20140521.jpg");
Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); JSONObject jsonObject = new JSONObject(); Double lat = null;
Double lon=null;
Date date = null;
for(Directory directory : metadata.getDirectories()){
for(Tag tag : directory.getTags()){
System.out.println(tag); String tagname = tag.getTagName();
if(tagname.equals("GPS Longitude")){
System.out.println(pointToLatlong(tag.getDescription()));
lon = Double.valueOf(pointToLatlong(tag.getDescription()));
jsonObject.accumulate("lon", lon);
}
else if (tagname.equals("GPS Latitude")) {
System.out.println(pointToLatlong(tag.getDescription()));
lat = Double.valueOf(pointToLatlong(tag.getDescription()));
jsonObject.accumulate("lat", lat);
}
if(tagname.equals("Date/Time")){
System.out.println(tag.getDescription());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd hh:mm:ss"); Date date2 = sdf.parse(tag.getDescription());
Long dateLong = date2.getTime();
jsonObject.accumulate("time", dateLong); }
}
System.out.println(jsonObject.toString());
} }
}

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. openstack之horizon源码分析之二

    一.概述: django基础入手: django新建project:#django-admin startproject mysite 生成如下目录: mysite ├── manage.py └── ...

  2. CentOS添加中科大、163 yum源

    首先备份CentOS-Base.repo [root@richard yum.repos.d]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...

  3. FAQ:win7和win8 64位注册ocx控件方法

    win7/win8 问题所在: 64位的系统一般都是可以安装32位程序的, 执行         C:\Windows\SysWOW64\regsvr32.exe 而不是 C:\Windows\Sys ...

  4. js arguments参数说明

    在javascript中,不需要明确指出参数名,就能访问它们.如: function hi(){if(arguments[0]=="andy"){     return;}aler ...

  5. C语言统计运行时间

    clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t. 在MSDN中,查得对clock函数定义如下: clock_t clock(void) ;   简单而言,就是该程序从启动 ...

  6. javascript 动态创建表格

    <html> <head> <script> function createTable(rows,lines){ this.rows=rows; this.line ...

  7. hdu 1695 GCD 容斥+欧拉函数

    题目链接 求 $ x\in[1, a] , y \in [1, b] $ 内 \(gcd(x, y) = k\)的(x, y)的对数. 问题等价于$ x\in[1, a/k] , y \in [1, ...

  8. OpenCV学习 2:播放AVI视频

    原创文章,欢迎转载,转载请注明出处 第二个程序,播放视频.用opencv做起来是如此的简单..哈哈.           学Opencv,只是为了在它的基础上实现工程应用,而它里面高深的理论我等屌丝只 ...

  9. Android 初步

    Android 四大组件: 1.Activity -------构建应用程序界面 /*2.Intent--------程序之间传输数据*/ 2.BroadcastReciever--------用来接 ...

  10. Java String 和 StringBuffer的区别

    1.String类的定义是这样的: public final class String extends Object implements   Serializable, Comparable< ...