java 图片解析_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 fiList = new ArrayList();

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 遍历文件夹下的所有文件

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) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件 ...

随机推荐

hdu2082 找单词 (母函数)

找单词 题意: 中文题,考虑是不是要写个英文题意..(可惜英语水平不够  囧rz)                (题于文末) 知识点: 母函数(生成函数): 生成函数有普通型生成函数和指数型生成函数 ...

bootstrap基础知识

Bootstrap是Twitter推出的一款简洁.直观.强悍的前端开发框架. Bootstrap基于 HTML.CSS.JAVASCRIPT.它由Twitter的设计师Mark Otto和Jacob ...

Bootstrap验证控件的使用

前端HTML代码

【LeetCode】 sort list 单清单归并

称号:Sort a linked list in O(n log n) time using constant space complexity. 思路:要求时间复杂度O(nlogn) 知识点:归并排 ...

python 作用域(LEGB)

def fa(a): b = 200 c = 888 def fb(b): print(b) print(a) print(c) print(sum) return fb c = 2 sum = 10 ...

【一天一道LeetCode】#80. Remove Duplicates from Sorted Array II

一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...

MT【301】值域宽度

(2015浙江理科)已知函数$f(x)=x^2+ax+b,(a,b\in R)$.记$M(a,b)$是$|f(x)|$在区间$[-1,1]$上的最大值.(1)证明:当$|a|\ge2$时,$M(a,b ...

2019.03.21 admin

1.新建文件创建一个应用类 stu Python manage.py startapp stu 2,创建应用类 记得在setting中的installed_apps中添加应用 student/mode ...

AngularJS实战之Controller之间的通信

我们时常会在不同controller之间进行通信,接下来就介绍三种controller之间的通信方式 一.使用$on.$emit和$broadcast进行controller通信 虽然AngularJ ...

使用FindAncestor查找方式绑定且不需要使用datacontext

原文:使用FindAncestor查找方式绑定且不需要使用datacontext

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值