Java 遍历文件下jpg图片并解析图片
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图片并解析图片的更多相关文章
- JAVA 遍历文件夹下的所有文件
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- java 遍历文件夹里的文件
Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...
- PHP遍历目录下的文件夹和文件 以及遍历文件下内容
1.遍历目录下的文件夹和文件: public function bianli1($dir) { $files = array(); if($head = opendir($dir)) { while( ...
- Java遍历文件夹下的所以文件
利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...
- Java遍历目录下全部文件并替换指定字符串
应用场景:比方有一个深层次的文件目录结构,如:javaAPI 每一个文件中面都有同样的内容,而我们要统一改动为其它内容.上千个文件假设一个个改动显得太不明智. import java.io.Buffe ...
- JAVA 遍历文件夹下的所有文件(递归调用)
package file; import java.io.File; public class Test1 { public static void main(String[] args) { Str ...
- JAVA 遍历文件夹下文件并更改文件名称
周末因为一些原因,需要批量更改一些文件的名称,使其随机,就随手写了点代码. 增加一个随机字母: public static void changeName(String path){ File fil ...
- Java 遍历文件夹里面的全部文件、指定文件
Java 手册 listFiles public File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件 ...
随机推荐
- JavaScript 工作必知(九)function 说起 闭包问题
大纲 Function Caller 返回函数调用者 Callee 调用自身 作用域 闭包 function 函数格式 function getPrototyNames(o,/*optional*/ ...
- js实现网页打印分页打印
web打印思路:html页面本身带有打印功能window.print() 但是在打印时又不能word模板的要求来打印不能满足打印需求.同时我们打印的数据有时候是动态变化的需要按模板来打印我的处理方式是 ...
- vs2010打开设计器出现错误
vs2010打开设计器出现此界面, 错误多种,还有“未将对象引用设置到对象的实例” ,我项目用到了第三方控件(没有安装,bin文件夹导入DLL文件,项目直接引用的DLL文件),看下面的堆栈信息,显 ...
- 加密传输SSL协议6_验证公钥
如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...
- 移动端使用rem方法
(function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...
- docker 数据映射方案
docker run -itd -v /data/:/data1 centos bash // -v 用来指定挂载目录, :前面的/data为本地目录,:后面的/data1 为容器里的目录: dock ...
- poj2070简单题
#include <stdio.h> #include <stdlib.h> int main() { float sped; int wei,sth; while(scanf ...
- 【HDU】4908 (杭电 BC #3 1002题)BestCoder Sequence ——哈希
BestCoder Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- PHP 面向对象:设计模式之单例模式
单例模式要解决的问题就是“如何让这个类只有一个实例”. 我们的web应用中,大量使用了数据库连接,如果反复建立与数据库的连接必然消耗更多的系统资源. 我们如何解决这个问题,建立唯一的数据库连接是必要的 ...
- paip.c++ qt messagebox用法
paip.c++ qt messagebox用法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net ...