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) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件 ...
随机推荐
- java代码如何快速添加作者描述的注释最好能有详细的图解
MyEclipse 中自动插入作者.注释日期等de快捷键方法依次打开然后找到 Window -->Preferences->Java->Editor->Templates,在这 ...
- Python核心编程读笔 2
第三章 python基础 一.语句和语法 \n 标准的行分隔符 \ 继续上一行 ; 将两个语句连接在一行 : 分开代码块的头和体 代码块以缩进块的形式体现 python文件以模块的形式组织 二.变量赋 ...
- Ubuntu密码忘记了怎么办(转载)
版本:Ubuntu 11.10 思路是进入root中,然后使用passwd修改自己的密码. 假设用户名:quietheart 经过网上查询,如果安装系统之后没有设root密码,那么,Ubuntu 11 ...
- leetcode Invert Binary Tree python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = ...
- 微博发布效果jq版
大家都看过新浪微博的发状态功能,我模拟了一下类似的效果,包括发布时间,删除效果等.代码如下: <!DOCTYPE HTML> <html> <head> <m ...
- threadid=1: thread exiting with uncaught exception (group=0x40db8930)
异常信息如下: 07-26 17:23:49.521: W/dalvikvm(29229): threadid=1: thread exiting with uncaught exception (g ...
- WebRTC 音视频开发
WebRTC 音视频开发 webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...
- IZ65534: 'JAVA.LANG.CLASSFORMATERROR' ERROR FOR A VALID IDENTIFIER
PAR status Closed as program error. Error description Error Message: The java class could not be loa ...
- 内核级HOOK的几种实现与应用
实现内核级 HOOK 对于拦截.分析.跟踪系统内核起着致关重要的作用.实现的方法不同意味着应用侧重点的不同.如想要拦截 NATIVE API 那么可能常用的就是 HOOK SERVICE TABLE ...
- 快速美眉(FastMM)使用手记
今天在SourceForge下到了FastMM (Fast Memory Manager),听说比官方的内存管理快多了,试了一下,果然不错.目前最新的是4.27. 就我的使用范围来说,我就是想看看我的 ...