java能实现往jpeg图片中写入exif信息的功能吗?我找了好久只发现有读取的.没有写入的 [问题点数:0分]

Bbs1
本版专家分:0
结帖率 100%
Bbs1
本版专家分:0
Blank
红花 2005年4月 专题开发/技术/项目大版内专家分月排行榜第一
2004年11月 专题开发/技术/项目大版内专家分月排行榜第一
2004年10月 专题开发/技术/项目大版内专家分月排行榜第一
2004年2月 专题开发/技术/项目大版内专家分月排行榜第一
2003年11月 专题开发/技术/项目大版内专家分月排行榜第一
2003年10月 专题开发/技术/项目大版内专家分月排行榜第一
2003年3月 专题开发/技术/项目大版内专家分月排行榜第一
2003年1月 专题开发/技术/项目大版内专家分月排行榜第一
2002年11月 专题开发/技术/项目大版内专家分月排行榜第一
2002年8月 专题开发/技术/项目大版内专家分月排行榜第一
Blank
黄花 2005年7月 专题开发/技术/项目大版内专家分月排行榜第二
2005年5月 专题开发/技术/项目大版内专家分月排行榜第二
2004年9月 专题开发/技术/项目大版内专家分月排行榜第二
2004年3月 专题开发/技术/项目大版内专家分月排行榜第二
2004年1月 专题开发/技术/项目大版内专家分月排行榜第二
2002年12月 专题开发/技术/项目大版内专家分月排行榜第二
Blank
蓝花 2005年3月 专题开发/技术/项目大版内专家分月排行榜第三
2004年12月 专题开发/技术/项目大版内专家分月排行榜第三
2004年8月 专题开发/技术/项目大版内专家分月排行榜第三
2004年7月 专题开发/技术/项目大版内专家分月排行榜第三
2003年12月 专题开发/技术/项目大版内专家分月排行榜第三
2003年9月 专题开发/技术/项目大版内专家分月排行榜第三
2003年8月 专题开发/技术/项目大版内专家分月排行榜第三
2003年7月 专题开发/技术/项目大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
读取和修改JPEG图片文件的头信息EXIF和JFIF
1. JPEG<em>图片</em>格式的历程和简单介绍可参考下面这篇文章 http://blog.csdn.net/kickxxx/article/details/8173332 
Java获取图像Exif信息
Exif(Exchangeable Image File)是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性<em>信息</em>和拍摄数据。在Windows 系统中,对图像文件右键选择“属性”,在“详细<em>信息</em>”选项卡中可以查看Exif值,但这些值并不全面,想要查看完整的Exif<em>信息</em>,需要下载专业的Exif<em>信息</em>查看器。 用Java<em>实现</em>一个Exif查看器,需要借助开源项目metada
Android冷门知识。读写图片Exif信息,用到了JHeader jar包
首先,Exif<em>信息</em>是什么? 也不废话,百度百科说的很清楚: http://baike.baidu.com/link?url=q7uOXmyvU-3HUGt_FwL7MWGJ_sFWj6qo0HQeCV-mC0F5cYeexpIyAEwAlfkgqp-IjDn2D5oepItgW_dXj3N0OK 我的理解呢Exif<em>信息</em>就是照片被拍摄的时候相机的焦距,物距,曝光值等<em>信息</em>,这<em>信息</em>或许对于我们浏览照
VC读取JPG照片Exif信息(VS2010编译通过)
测试可用代码
如何将位置信息写入JPEG图片文件【android】
通过ExifInterface可以将拍照时的一些属性<em>信息</em><em>写入</em><em>图片</em>文件里,其中包括经纬度<em>信息</em>。本文介绍了一种将经纬度坐标<em>写入</em>JPEG<em>图片</em>文件的方法!
将GPS信息写入图片
一、概述 在Android2.2中,Camera的应用程序并不支持将GPS<em>信息</em><em>写入</em>到JPEG文件中,但如果要<em>实现</em>这个<em>功能</em>,有如下两种方式: 1、修改底层camera驱动。在拍照时,一般都是使用硬件去进行JPEG编码,这样就需要修改JPEG编码器,使其可以将GPS<em>信息</em><em>写入</em>JPEG文件的头部,即EXIF部分。这种方式使用与手机驱动开发者。 2、修改camera应用程序。Camera应
JPEG图片扩展信息读取与修改
Android <em>exif</em><em>信息</em>读写
Java读取图片Metadata元数据Exif
2016年3月Java<em>读取</em><em>图片</em>Metadata元数据Exif(maven下载包配置)   转自:2016年3月Java<em>读取</em><em>图片</em>Metadata元数据Exif package image;  import <em>java</em>.io.File;  import <em>java</em>.io.IOException;  import <em>java</em>.util.Collection;  import <em>java</em>.util.I
JPEG系列二 JPEG文件中的EXIF(下)
本文介绍EXIF中都保存了哪些数据,这些数据的内容和格式,最后介绍一下EXIF中的缩略图<em>信息</em>。 EXIF JPEG文件将EXIF<em>信息</em>存储在JFIF的APP1标记中。 EXIF主要保存拍摄照片时的相机参数、图像缩略图、GPS<em>信息</em>等。
关于图像exif的几个事实
<em>jpeg</em>/jpg格式的图像文件的头部<em>信息</em><em>exif</em>中可以保存缩略图<em>信息</em>。
使用OpenExif修改jpeg图片信息
目前的手机是小米手机,使用两年多里面总共存储了将近4000张照片。拍摄时系统会记录当时拍摄的时间,这个拍摄时间会记录在jpg文件的<em>exif</em>数据结构中,windows系统下右键单击文件可以看到这个时间。但是不知什么原因有一些照片的拍摄时间都变成了2002年12月8日,然而照片文件的命名还是按照当时实际拍摄的时间来命名。而我的手机相册设置又是按照拍摄时间来排序,因此相册的照片排序实在太混乱,后来终于
C#修改JPG图片EXIF信息中的GPS信息
/// &amp;lt;summary&amp;gt; /// 设置<em>图片</em>的经纬高 /// &amp;lt;/summary&amp;gt; /// &amp;lt;param name=&quot;IN_File&quot;&amp;gt;文件路径&amp;lt;/param&amp;gt; /// &amp;lt;param name=&quot;IN_Lat&quot;&amp;gt;纬度&amp;lt;/param&amp
图像处理2_读取JPG图片的Exif属性(一) - Exif信息简介
Exif 是什么? Exif就是用来记录拍摄图像时的各种<em>信息</em>:图像<em>信息</em>(厂商,分辨率等),相机拍摄记录(ISO,白平衡,饱和度,锐度等),缩略图(缩略图宽度,高度等),gps(拍摄时的经度,纬度,高度)等,将这些<em>信息</em>按照JPEG文件标准放在图像文件头部。 Exchangeable Image File(可交换图像文件)的缩写,     最初由日本电子工业发展协会(JEIDA --Ja
Android中读图片Exif信息的方法
Exif<em>读取</em>类Android提供了<em>读取</em><em>写入</em>Exif的API,但很可惜,这个API只能由指定文件名<em>读取</em>、<em>写入</em>Exif,效率低得可怜。 不得已,把Android系统代码里图库的一段摘了过来。 有Android源码的看源码中 packages/apps/Gallery2/ 部分, <em>没有</em>或者图方便的直接看这里: https://github.com/jxt1234/ThirdPartyUsefulC
从EXIF JPEG图片中提取GPS位置信息
<em>图片</em>中附带GPS<em>信息</em>
java复制图片EXIF信息(支持jpeg格式),使用了MediaUtils
package com.dcl; import <em>java</em>.io.BufferedInputStream; import <em>java</em>.io.BufferedOutputStream; import <em>java</em>.io.FileInputStream; import <em>java</em>.io.FileNotFoundException; import <em>java</em>.io.FileOutputStream; import
读取/修改照片中EXIF记录的GPS信息
.net编写的编辑照片中GPS<em>信息</em>的小程序
七牛---关于图片EXIF信息中旋转参数Orientation的理解
EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数、缩略图及其他属性<em>信息</em>,简单来说,Exif<em>信息</em>是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,需要注意的是EXIF<em>信息</em>是不支持png,webp等<em>图片</em>格式的。 对于七牛,可以在<em>图片</em>后面加?<em>exif</em>参数来获取<em>图片</em>的<em>exif</em><em>信息</em>。对于O
C#图片处理之:保存原始Exif到处理过的JPEG图片
自从越来越多的兄弟姐妹买了单反,亮骚就是不可避免的了,处理过的<em>图片</em>丢失Exif<em>信息</em>未免有些遗憾。
用C#读取图片的EXIF信息的方法(一)
通过Exiv2读取照片的Exif信息获取GPS,焦距等信息
这里简单介绍一下如何通过开源C++工具包Exiv2<em>读取</em><em>图片</em>中的属性<em>信息</em> 其实做这项工作之前也想偷懒百度一下的,大都是Java写的安卓的 ExifInterface 类,这和我的工作扯不上一点关系啊,最后终于谷歌出了Exiv2开源C++库 一、简介         Exif(Exchangeable image file format)即可交换图像文件格式,是专门为数码相机的照片设定的,可以记...
Android将地理位置存储到图片扩展信息EXIF
<em>图片</em>EXIF
ios获取图片exif信息
#include "AssetsLibrary/ALAssetsLibrary.h" #include "AssetsLibrary/ALAssetRepresentation.h" - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionar
JPEG系列二 JPEG文件中的EXIF(上)
JPEG<em>图片</em>中的EXIF<em>信息</em>遵循TIFF格式标准,因此EXIF分为上下两篇。 上篇介绍一下TIFF文件格式,下篇介绍EXIF在JPEG中的作用和存储的<em>信息</em>。
在opencv2.4.x版本中处理图像EXIF orientation不统一的问题
在用opencv的imread函数<em>读取</em>手机拍的照片时会出现翻转的情况,即用opencv中的imshow看到的图像和手机上看到的图像的宽高是相反的。(当然,<em>读取</em>电脑上的照片时也可能会出现这个问题) 出现这个问题的原因是opencv中的imread函数<em>读取</em>图像时<em>没有</em>对图像<em>exif</em>中的orientation<em>信息</em>进行解析。而通常的看图工具打开图像时都会根据orientation对图像进行相应的翻转以便我们
读取JPG图片的Exif属性(一) - Exif信息简介
Exif 是什么? Exif就是用来记录拍摄图像时的各种<em>信息</em>:图像<em>信息</em>(厂商,分辨率等),相机拍摄记录(ISO,白平衡,饱和度,锐度等),缩略图(缩略图宽度,高度等),gps(拍摄时的经度,纬度,高度)等,将这些<em>信息</em>按照JPEG文件标准放在图像文件头部。 Exchangeable Image File(可交换图像文件)的缩写,     最初由日本电子工业发展协会(JEIDA --Ja
linux下jpeg图片Exif标识
http://www.cnblogs.com/smartrui/p/4575973.html 找到一个js获取Exif的<em>信息</em>。php的也很简单。打开扩展就可以直接读了。也支持url的 这个是js的 http://code.ciaoca.com/<em>java</em>script/<em>exif</em>-js/     EXIF 标识 名称 说明
Jpeg图片属性读取EXIF
<em>jpeg</em><em>图片</em>属性<em>读取</em> 测试环境  Delphi XE 主要<em>功能</em>代码获取自其他作者 单元文件 unit utJpegInfo; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tf
QT中打开jpg文件,访问EXIF信息,得到旋转角度的信息
如题,打开jpg文件的时候,这种文件其实是有EXIF<em>信息</em>的。这里不介绍EXIF<em>信息</em>了,直接介绍如何读到该<em>信息</em>。QT的这个头文件我暂时只发现怎么读到<em>图片</em>的旋转<em>信息</em>,如果我发现新的,会更新这篇博客。先看官方的文档bool ImageViewer::loadFile(const QString &amp;amp;fileName) { QImageReader reader(fileName); ...
快速修改JPEG文件的旋转角度(通过修改exif信息
首先需要引入头文件和lib库 #include "Wincodec.h" #pragma comment(lib, "Windowscodecs.lib") CString str = L"E://a.jpg"; IWICImagingFactory *pFactory = NULL; IWICBitmapDecoder *pDecoder = NULL; IWICBitma
java读取JPEG中exif信息
一般的相机会记录一些<em>图片</em>基本<em>信息</em>之外的扩展<em>信息</em>,例如,经纬度<em>信息</em>,存储与<em>exif</em>中,如下图! 一般情况下是<em>java</em>程序<em>读取</em>不到gps等扩展<em>信息</em>的。如果想要解析到里面的<em>信息</em>需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址:http://code.google.com/p/metadata-extractor/),这个jar提供了支持获取扩展<em>信息</em>的<em>功能</em>。
Jpeg图片旋转和Exif方向
本文翻译自:https://www.impulseadventure.com/photo/<em>exif</em>-orientation.html 。 不了解Exif的同学建议先看一下维基百科Exif 。 带方向传感器的数码相机允许自动旋转肖像图像。不幸的是,对此<em>功能</em>的支持并不普遍或一致地应用。 带定向传感器的数码相机 许多较新的数码相机(包括dSLR和Point&Shoot数码相机)都配有内置方向传感...
通过获取图片中的EXIF信息来定位拍摄地点
你与陌生人之间,可能只是一张照片的距离。有时候一张 “原图”照片,分分钟就暴露了你的<em>信息</em>……
jpg图片的Exif及gps信息和示例分析
转自:http://www.verydemo.com/demo_c173_i10439.html jpg<em>图片</em>的Exif及gps<em>信息</em>和示例分析 分类: 操作系统/ Windows/ 文章 jpg<em>图片</em>的Exif及gps<em>信息</em>:     拍照时gps相关<em>信息</em>写到EXIF块中。     在<em>exif</em>2.1就有gps的<em>信息</em>块。参见《Exif2-2.PDF
JPEG图片EXIF信息提取及缩略图显示VC++实现(demo)
本实例基于VC++完成对JPEG<em>图片</em>EXIF<em>信息</em>的提取以及缩略图显示,其中EXIF<em>图片</em>的提取采用EXIF类完成,缩略图的显示部分由GDI+完成,在vs2005下编译通过,代码简单,有注释,非常适合学习和移植
C# 写入图片元数据
Tiff<em>图片</em>元数据<em>写入</em>并保存 /// /// 通过解码器与编码器<em>写入</em>元数据 /// /// 原<em>图片</em>全路径 /// 新<em>图片</em>全路径 /// 内容 /// 带有元数据的内存流 public void DecoderAndEncoderSaveTif(string inputPath,
使用libexif为JPEG图片添加EXIF属性(新)
使用lib<em>exif</em>为JPEG<em>图片</em>添加EXIF属性,支持交叉编译,在hi3519测试通过。
读取JPG图片的Exif属性(二) - C代码实现
读区Exif属性简介         <em>读取</em>Exif基本上就是在懂得Exif的格式的基础上,详细见上文:Exif 学习心得 - Exif 基础学习,然后就是对<em>图片</em>的数据进行字节分析了。这个分析也是非常重要的,就是一个一个字节来分析<em>图片</em>的Exif属性,一般这段字节就是<em>图片</em>的开始部分。可以使用 工具将JPG<em>图片</em>按照16进制的格式打开,然后在对着<em>图片</em>来分析。         由于国内关于此部分
一个直接用命令查看修改删除图片属性Exif信息的文件
部分使用说明: 点击开始菜单-运行命令,在对话框输入: "jhead –命令参数 <em>jpeg</em>文件" 例如: “jhead -de D:\A.jpg” 删除D盘盘根目录下A.jpg文件的<em>exif</em><em>信息</em>。 “jhead -de D:\*.jpg” 删除D盘根目录下所有jpg文件的<em>exif</em><em>信息</em>。其中星号是通配符。 二、通用指令参数 -te 将其他<em>jpeg</em>文件的eixf导入目标<em>jpeg</em>。例如"jhead –te D:\B.jpg D:\A.jpg" -dc 删除<em>jpeg</em><em>信息</em>中的备注。注意,<em>jpeg</em>文件有两个备注,一是和其他文件一样的备注,另一个是<em>exif</em><em>信息</em>中的备注。jhead仅对<em>exif</em><em>信息</em>有效。 -de 完全删除<em>exif</em><em>信息</em>。 -du 删除非原始<em>exif</em><em>信息</em>,例如Photoshop、Turbophoto之类编辑后修改<em>exif</em>留下的<em>信息</em>。 -purejpg 删除所有<em>jpeg</em>文件非必须的<em>信息</em>。相当于-de、-dc和-du的集合,可以将文件减小数k。 -ce 修改文件的<em>jpeg</em>文件头部分备注(此备注并非<em>exif</em><em>信息</em>)。该指令会打开文本编辑器,并在编辑器关闭时将备注<em>信息</em>存入文件。 -cs 导出备注。例如"jhead –cs D:\988.txt D:\A.jpg" -ci 导入备注。例如"jhead –ci D:\988.txt D:\A.jpg" -cl 直接输入备注。。例如"jhead –cl 我的备注 D:\A.jpg" 三、其他指令 时间日期 -ft 将<em>jpeg</em>文件的“修改时间”修改为<em>exif</em><em>信息</em>中记录的时间。 -n[] 该指令会将文件名修改为<em>exif</em><em>信息</em>中记录的“创建时间”;如果<em>jpeg</em>文件<em>没有</em><em>exif</em>或者<em>exif</em>中的创建时间不可用,则将文件名修改为文件的“修改时间”。 默认的格式-顺序为MMDD-HHMMSS 格式-顺序参数如下: %d-日(01-31) %H-小时(00-23) %j-一年中的第几天(001-366) %m-月(01-12) %M-分钟(00-59) %S-秒(00-59) %U-一年中的第几周(00-53) %w-星期几(0-6,周日为0) %y-两位数纪年(00-99) %Y-四位数几年 %i-添加数字序号 例如: jhead -n%Y%m%d-%H%M%S d:\*.jpg 将所有jpg文件修改为YYYYMMDD-HHMMSS.jpg的格式。 -nf 与“-n”相同<em>功能</em>相同,不保留原文件名。 -a 修改不同扩展名的同名文件名,相机拍摄的avi短片<em>exif</em><em>信息</em>存储在与其同名的thm文件中,可用此指令给avi文件更名。一般与“-n”指令共同使用。 -ta 修正时差,例如时差根据时区确定,例如+1:00或者-1:00 -da- 修正日期。日期格式是yyyy:mm:dd、yyyy:nn:dd+hh:mm或者 yyyy:mm:dd+hh:mm:ss。根据前后参数时间差调整<em>exif</em>的时间。 -ts 直接修改<em>exif</em>中的拍摄时间,日期-时间格式为yyyy:mm:dd-hh:mm:ss 缩略图 -dt 删除<em>exif</em>中的缩略图。这个缩略图一般为240x160像素,10k大小,用于数码相机、Windows XP查看照片,删除它不会影响工作。 -st 将<em>exif</em>中的缩略图复制为另一个<em>jpeg</em>文件 -rt 用另一个<em>jpeg</em>文件替换<em>exif</em>中的缩略图 -rgt[大小] 刷新<em>exif</em>缩略图,其中大小为缩略图的最大边长。 旋转 -autorot 根据<em>exif</em>中记录的水平方向<em>信息</em>转动<em>jpeg</em>照片。 -norot 清除<em>exif</em>中的水平方向<em>信息</em>。 四、使用技巧 1)用开始菜单的"运行"指令并不直观,可以通过运行cmd命令进入DOS命令提示符界面操作。在DOS界面进入操作照片文件夹(不懂DOS操作的朋友建议稍稍学习DOS指令,今后也会受用无穷),在文件夹中运行jhead命令,用“*.jpg”表示文件夹中所有的<em>jpeg</em>文件,可以进行批处理。 2)-te(复制<em>exif</em><em>信息</em>)作用在于可以恢复被其他编辑软件删除的<em>exif</em><em>信息</em>。编辑照片之前,先在照片文件夹中建立一个名为“backup”的备份文件夹,将原是照片复制到backup文件夹中,然后再编辑照片,编辑软件可能会删除或修改<em>exif</em>。编辑结束后进入DOS界面照片文件夹输入: jhead –te “backup\&i” *.jpg 照片的<em>exif</em><em>信息</em>就会从backup文件夹的原始文件中复制回来。其中“&i”表示与目标文件同名的文件,前面的“backup\”表示原始文件位置。 3)-purejpg指令可以删除所有<em>exif</em><em>信息</em>,让照片减小若干k字节。这样有两个好处:一是使别人无从知道照片的拍摄时间、拍摄参数等等;二、是很多网站对上传照片大小有限制,给照片减负10-20k的贡献已经很大了! 其他软件必须对每一张照片的<em>exif</em><em>信息</em>逐个删除,而现在只需要输入: jhead –purejpg *.jpg 就可以了! 4)-n(修改文件名为拍摄时间)指令中,格式-顺序参数非常灵活。例如添加“%f”就会保留原文件名的同时添加日期时间。添加“%i”就会增加数字序号。每个参数之间可以加入其它符号分隔。 例如: jhead –n%i.%f-%Y-%m-%d-%H:%M:%S *.jpg 所有文件都改名为“1.原文件名-年-月-日-时:分:秒.jpg”的格式! 5)-ta(修改时差)指令中,时差参数可以使+1:00、-0:00:30或者+49的格式,分号前第一位数字为小时。 6)-da(修正日期)指令的作用是,如果相机日期和不准确,分别填入相机当前日期和实际日期就可纠正所有照片,例如相机设置到了08年,而目前实际上是07年,则可以运行 Jhead -da2008:01:01-2007:01:01 *.jpg
C++ 阅读JPEG格式中的EXIF信息
需要对照片文件的拍摄时间进行<em>读取</em>,照片以".jpg"格式存储。之前以为直接<em>读取</em>文件创建时间就可以了,但是遍历文件得到的文件<em>信息</em>结构体存储的是文件在本地的一些时间,其中的文件创建时间再复制,编辑等操作之后就会发生改变,并非该照片原本的拍摄时间。后来搜索到Exif,百科中说,Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的<em>信息</em>
jpeg图片exif信息
EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照片而定制的元数 据,可以记录数码照片的拍摄参数、缩略图及其他属性<em>信息</em>。<em>exif</em>其实是<em>jpeg</em>文件的一种,遵从<em>jpeg</em>标准,只是在文件 头<em>信息</em>中增加了有关拍摄<em>信息</em>的内容和索引图。         JEPG文件头必须以0xFF 0xD8开头,0xFF 0xD9结尾。然后后
java 获取图片exif信息
网上很多这类方法都没法用,自己探索了一下。 maven工程导入jar包 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;com.drewnoakes&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;metadata-extractor&amp;lt;/artifactId&amp;gt; ...
Android 实现图片 Exif 的修改(Android 自带的方法)
很多时候我们都要对我们的<em>图片</em><em>信息</em>进行一些处理,比如向<em>图片</em>中<em>写入</em>经纬度,拍摄时间,设备<em>信息</em>,作者等等。 这个时候我们就要对我们的<em>图片</em>Exif进行<em>写入</em><em>信息</em>的操作,当然,我们想知道<em>图片</em>的Exif<em>信息</em>,也可以对Exif<em>信息</em>的<em>读取</em>操作。 因为Android本身有对<em>图片</em>Exif操作的方法,所以就不需要额外导入其他 jar 下面先贴出代码:   &amp;lt;span style=&quot;font-size:1...
exif 修改使用
<em>exif</em> 修改。
玩转照片EXIF信息的利刃:jhead命令详解 依据EXIF照片自动旋转
下载地址http://www.sentex.net/~mwandel/jhead/  jhead是一个处理照片<em>exif</em><em>信息</em>的命令行工具。它的强大在于它一、提供了其他工具所不能企及的<em>功能</em>二、强大的批处理能力据说该工具最早是在linux环境下开发的,现已被移植到多个平台,包括windows。但,目前为止并<em>没有</em>GUI,也就是图形外壳,所以理解并使用该工具前你必须了解一些简
·【读后感】《妈妈,我找了好久啊!》by Julia
谁也不会想到,爱竟是以这样的方式铺排和延续的!如果这是电影,在看到最后结局、要离座的时候,我一定要“问候”导演:为什么不让德比活下去?你变态了还是压根儿心肠残忍?然而,这的确是一个真实的故事! 工作繁忙的人啊!请别忘记,在百忙中经常抽空看望一下挂念你的亲娘!
jpegExif(VC2010)
往JPG<em>图片</em>里注入EXIF属性<em>信息</em>,数字中文字母都可,这里只在JPG<em>图片</em>的头部<em>写入</em>一种,就一个函数,其它的可按此方法分析来<em>写入</em><em>exif</em><em>信息</em>,这里用的是vc2010环境
Android 端读取图片exif信息,并对其进行修改
最近在做一个<em>图片</em>上传的问题,由于<em>图片</em>上传前需要对<em>图片</em>进行压缩处理,<em>图片</em>的原始<em>信息</em>自然被处理掉了。但是需求是在电脑端能看到<em>图片</em>的详细<em>信息</em>。由于之前使用过Exifinterface,对其还有一些信心搞定,但在实际使用中才发现Exifinterface属性的修改并<em>没有</em>用。 接下来就是一顿网上找,各种找都是比较麻烦的方法,还各种冲突。最后找到了JHeader这个包,说真的很好用,当即就成功了。 送一张直
读取jpg文件的exif信息
照片有点多,准备整理一下,按照片拍照的时间进行重新整理,用python写了一个,只读自己感兴趣的<em>exif</em><em>信息</em>的脚本,看看速度怎么样。 以前用.net写过一个,用的现成的<em>exif</em>类库:大约开启1~5个线程来分析所有目标<em>图片</em>文件,<em>读取</em><em>exif</em><em>信息</em>,放入一个队列中;大约开启20个左右的线程来进行重命名、拷贝和删除原始文件。 这个程序运行起来,速度会越来越慢,一直没找到关键原因
Python 读取图片EXIF信息
首先要介绍的是 Python Imaging Library,使用方法如下: from PIL import Image from PIL.ExifTags import TAGS   def get_<em>exif</em>_data(fname):     """Get embedded EXIF data from image file."""     ret = {}     try:
Java获取图片EXIF格式的元数据
一、引言Java中要取得一张<em>图片</em>的<em>exif</em>(Exchangeable Image File, 可交换图像文件)<em>信息</em>。比如:拍摄时间,拍摄设备型号,焦距,曝光时间等。通过开源Jar包metadata-extractor-2.8.1.jar、xmpcore-5.1.2.jar中提供的类就可以获取到以上<em>信息</em>。   二、示例代码 1) 示例1 package com.wbf.test; ...
C# 读取照片的EXIF信息
一、使用 MetadataExtractor <em>读取</em> EXIF <em>信息</em> 1、NuGet 中安装 在 NuGet 中搜索并安装 MetadataExtractor; 2、包<em>信息</em> 我安装后会有两个包:MetadataExtractor 2.0.0 和 XmpCore 5.1.3 3、代码<em>实现</em> 我是创建的 WPF 项目: private void BTOpen_Click(object...
照片EXIF信息读取和改写的JAVA实现
由于项目需要对照片的EXIF<em>信息</em>进行处理,因此在网上搜索了一番。捣鼓出来了,写下,总结。需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0。这2个jar包比较好找,地址就不写了,搜索下就OK。需要注意的是,mediautil-1.0这个jar包你需要修改下。因为,项目需要修改GPS,其提供的例子后面还提供了个地址,里面有5个<em>java</em>文件,拿出来,
使用imageIO获取和修改图片exif信息
一幅<em>图片</em>除了包含我们能看见的像素<em>信息</em>,背后还包含了拍摄时间,光圈大小,曝光等<em>信息</em>。UIImage类将这些细节<em>信息</em>都隐藏了起来,只提供我们关心的<em>图片</em>尺寸,<em>图片</em>方向等。我们可以通过imageIO框架获取到<em>图片</em>背后的所有<em>信息</em>,下面就让我们一起看看。   一、获取<em>图片</em><em>信息</em>   imageIO框架是iOS中偏底层一点儿的框架,它内部提供的接口都是C风格的,关键数据也都是使用CoreFoun
Java获取照片EXIF信息
EXIF是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上EXIF格式就是在JPEG格式头部插入了数码照片的<em>信息</em>,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。           EXIF是Exchangeable Image File的缩写,这是一种专门为数码相机照
为单反拍摄照片批量加入地理位置信息(POS点)和EXIF信息
很多航测朋友对于照片中<em>没有</em>POS点很是懊恼,单反同飞控是分离的,照片由单反生成,而POS点的数据由飞控生成。对于后期数据处理相当不利,尤其是目前对于倾斜摄影的朋友,地理位置<em>信息</em>一定要写到照片中去,而动辄几百上千的照片通过手工加入地理位置<em>信息</em>,是非常不现实的。所以我编写了一个程序,可以通过这个程序将飞控生成得POS点数据批量加入单反所拍摄的照片中。 下面以纵横的飞控生成的POS数据为列
读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现
Exif中GPS格式 本文是最后一篇关于Exif文章,终于要挑战最大的boss了,这个GPS<em>信息</em>的<em>读取</em>,我<em>找了</em>国内外很多资料都<em>没有</em>找 真正的实例。所以自己前两篇的基础上推断而来的。 <em>读取</em>JPG<em>图片</em>的Exif属性 - Exif<em>信息</em>简介 <em>读取</em>JPG<em>图片</em>的Exif属性 - C代码<em>实现</em>  其实这个只要能够理解前面两篇的内容也就很容易获得GPS<em>信息</em>,但是还是要理解GPS的格式和各种tag参数。可
java处理EXIF信息方法
资料处理了关于照片<em>exif</em>的<em>信息</em>,着重处理了照片中的gps<em>信息</em>,
ExifEditor 图片信息修改工具
ExifEditor <em>图片</em><em>信息</em>修改工具 在众多的 EXIF 拍摄资讯相关软体中,方便好用的 EXIF 编辑软体尚属於少见,由 Jetter 所开发的 Exif Editor,正是一套实用而且免费的 EXIF 拍摄资讯编辑 / 备份 / 浏览软体。 Exif Editor 的重要特色如下- 1. 可以中文显示拍摄资讯,对於初学者而言更具亲切感。 2. 可以备份 Exif 拍摄资讯,避免影像处理时,破坏档头的 Exif 资料。 3. 可以编辑 / <em>写入</em>其它的重要资讯,例如-摄影者版权。 4. 对於扫瞄器 / TWAIN 读入,不含 EXIF 资讯的相片,亦可以自己编辑 / <em>写入</em>拍摄资讯,此点,对於传统相机用户而言,相当地有帮助!
C++读取EXIF信息
用C++写的<em>读取</em><em>图片</em>EXIF<em>信息</em>的类,封装好的,可以直接使用
Exif的Orientation信息说明
EXIF Orientation 参数让你随便照像但都可以看到正确方向的照片而无需手动旋转(前提要<em>图片</em>浏览器支持,Windows 自带的不支持) 这个参数在佳能、尼康相机照的照片是自带的,但我的奥林巴斯就<em>没有</em>,看照片时不能自动旋转,修正的方法有两个,一个看不顺眼就旋转,另一个是修改 EXIF 中的 Orientation 参数(XnView 浏览器查看缩略图时可以修改) 如果你想在旋转
Python读取图片EXIF信息类库介绍和使用实例
这篇文章主要介绍了Python<em>读取</em><em>图片</em>EXIF<em>信息</em>类库介绍和使用实例,例如Python Imaging Library、EXIF.py等,需要的朋友可以参考下 首先要介绍的是 Python Imaging Library,使用方法如下: 复制代码代码如下: from PIL import Image from PIL.ExifTags import TAGS
终于解决图片exif信息在liunx下存储后乱码的问题
其实只要修改liunx下/etc/profile文件就可以了。加上:export NLS_LANG=CHINESE_CHINA.ZHS16CGB231280export LANG=zh_CN.GB2312便可是liunx下的全局文件编码和语言都变成gb2312的。所有的文件存储也是按gb2312来存储。不用在程序做转换了。我以前的做法是把字节流转成字符流,然后指定编码格式存储。这样的话虽然可以把e
安卓图片Exif中存储的经纬度的转换
1、 系统相机中 安卓<em>图片</em>Exif中存储的经纬度 的格式 形如:
Android ExifInterface 图片信息 读取时中文乱码解决方案
对于<em>图片</em><em>信息</em>的<em>读取</em>,通过android本身提供ExifInterFace这个类可以<em>实现</em>。 对于ExifInterface这个类的TAG解释可以查看:https://developer.android.google.cn/reference/android/media/ExifInterface.html 本文主要讲在读区中文时出现的乱码问题,看下面的ExifInterface部分源码:
【夜半写点啥】Hbuilder+exif.js获取照片exif信息
【概】我在H5端需要这么一个<em>功能</em>::本地选择<em>图片</em>并获取<em>exif</em><em>信息</em>(主要是创建时间、和地点等),翻了半天Hbuilder文档,没发现这个api,于是目光转焦到强大滴<em>exif</em>.js上。step1、引入文件&amp;lt;script type=&quot;text/<em>java</em>script&quot; src=&quot;js/<em>exif</em>.js&quot; &amp;gt;&amp;lt;/script&amp;gt;step2、...
Delphi7下读取JPG文件Exif信息的类及示例,可以读取缩略图
Delphi7写的<em>读取</em>JPEG文件Exif<em>信息</em>的类(含中文注释及Exif v2.3官方文档,含显示TIF格式的GraphicEx库) 支持JPEG格式的缩略图<em>读取</em>,TIF格式的暂时未遇到,不知正确与否。 记录为摩托罗拉CPU格式的Exif<em>信息</em>暂时未遇到,不知其缩略图数据是否需要反转高低字节,如有谁遇到了可以修改TExif.GetThumbnail中的WriteBuffer最后一个参数,并欢迎反馈,谢谢。 Exif.pas 用于<em>读取</em>Exif<em>信息</em>的主类 ExifTranslate.pas 用于翻译Exif<em>信息</em>为文本的接口<em>实现</em>(<em>读取</em>ExifTags.txt内容并将其Tag名翻译成英文名称) 可继承TDefaultTranslate、TFileTranslate或另外<em>实现</em>IExifTranslate接口并传递给TExif的Create方法,以<em>实现</em>自己需要的转换方式。
libjpeg:读取jpeg头获取图像基本信息(jpeg_read_header)
lib<em>jpeg</em>中的<em>jpeg</em>_read_header函数用于<em>读取</em><em>jpeg</em>数据头部的基本<em>信息</em>,以下为<em>jpeg</em>_read_header的定义。/* Decompression startup: read start of JPEG datastream to see what's there */ EXTERN(int) <em>jpeg</em>_read_header (j_decompress_ptr cinfo,
C#读取图片Exif信息
////调用 //string strFile="fffff.jpg";//文件名 //System.Drawing.Bitmap bmp = new Bitmap(strFile); //EXIF.EXIFextractor er = new EXIF.EXIFextractor(ref bmp, "\n"); //Console.Write(strFile + "\r\n"); //
C#压缩图片时保留原始的Exif信息
啥是Exif<em>信息</em>,有啥用,百度百科有解释: http://baike.baidu.com/link?url=fJ6RjAc8XvCmCL-9q1wHKoGEIzPmspyBDI0GU1RbnTr9lGDWdpiCDC1C4FZ3YXp9OFFHnrZJFDgj8XTwX__QNK 总之,这东西对摄影爱好者来说是不可或缺的,通常使用Photoshop来压缩只要不是保存为Web格式都会
用C#读取图片的EXIF信息的方法(读取照片ISO等信息原代码)
用C#<em>读取</em><em>图片</em>的EXIF<em>信息</em>的方法(<em>读取</em>照片ISO等<em>信息</em>原代码)
IOS 如何获取与修改图片的EXIF信息
简介:Exif是一种图像文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的<em>信息</em>,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif<em>信息</em>
把文件数据写入图片像素中
做这个东西,是因为看到了乌云网友写的一篇文章 (http://drops.wooyun.org/tips/14568)。      文章提供了一个数据传输的思路。在一台不能连网的虚拟机中运行软件,虚拟机只提供包含软件运行时的截图的分析报告。也就是说虚拟机的数据能通过<em>图片</em>显示出来,于是把虚拟机的文件<em>写入</em>到<em>图片</em>像素中,从而得到虚拟机的数据。      看到这文章时感到好惊艳,以前压根就没想过数据能
jpg读取exif属性值
项目在开发过程中,需要<em>读取</em>JPG影像中的<em>exif</em>的GPS,相机参数,影像大小等参数,根据<em>exif</em>属性的格式定义,解析所需要<em>信息</em>的字段,成功提取内容。 Exif 编辑 Exif是一种图像文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的<em>信息</em>,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍
利用图片中的exif元数据批量查找图片中所包含的GPS信息
在<em>图片</em>的<em>exif</em>(交换图像文件格式)中标准定义了如何存储图像和音频文件的标准,而在这些标签中往往存在了一些容易被人们忽视却又重要的东西。 有一款工具名为<em>exif</em>tool,可以快速的解析所有标签,并将结果显示出来。 在ubuntu中可以这样下载: apt-get install <em>exif</em>tool 然后我们用它来解析某张<em>图片</em> 而当<em>图片</em>数量很多的情况下,批量处理显然成为了一个难题。所以p
C# 获取图片的EXIF 信息
关于 EXIF <em>信息</em>的介绍。1  EXIF,是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式,只是文件的后缀名为jpg。EXIF<em>信息</em>是由数码相机在拍摄过程中采集一系列的<em>信息</em>,然后把<em>信息</em>放置在jpg文件的头部,也就是说EXIF<em>信息</em>是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相
android,获得图片exif信息,拍摄时间,拍摄机器
{ ExifInterface <em>exif</em> = new ExifInterface("/sdcard/a.jpg"); //获得拍摄时间 String time = <em>exif</em>.getAttribute(ExifInterface.TAG_DATETIME); //获得拍摄机器 String model = <em>exif</em>.getAttribute(ExifInterface.TAG_M
exif.js读取图像Exif元数据
本文仅做翻译记录查看,GitHub地址:https://github.com/<em>exif</em>-js/<em>exif</em>-js 。 Exif.js用于从图像文件中<em>读取</em>Exif元数据的 JavaScript库。 您可以在浏览器中的图像上使用它,可以是图像或文件输入元素。检索Exif和Iptc元数据。该软件包也可用于AMD或CommonJS环境。 注意:Exif标准仅适用于.jpg和.tiff图像。此软件包中的E...
读取图像中的 EXIF 信息(不全,能够读取部分)
<em>读取</em>图像中的 EXIF <em>信息</em>(不全,能够<em>读取</em>部分)   需要<em>读取</em>EXIF<em>信息</em>,自己阅读了一些资料,现在共享一下需要注意的是,由于EXIF是一种可交换的文件格式,所以可以用在Intel系列和Motorola系列的CPU上(至于两者CPU的区别,大家可以到网上找找,这里不做说明)。在文件中有一个标志,如果是“MM”表示Motorola的CPU,否则为“II”表示Intel的CPU。  这个代码
修改删除图片属性Exif信息的方法
首先下载jhead.exe文件,下载地址:http://www.sentex.net/~mwandel/jhead/jhead.exe 将下载下来的文件复制到Windows目录(这一点很重要,否则Windows会提示找不到文件)。  使用说明:  以下内容转自http://download.csdn.net/source/1791268 
C# 根据图片exif调整方向
今天在用webuploader插件做上传<em>图片</em>
图片文件Exif信息详细说明
转过来,资料<em>找了</em>蛮久 原博客网址 当前,几乎新型的数码相机都使用Exif文件格式来存储图像. 它的规格是由 JEIDA 来制定的, 但是在互联网上还<em>没有</em>开放的文档可供浏览.因此我根据从互联网上所能得到一些开放资料做成了这份Exif格式的描述文档. 注: 现在我们能得到官方的文档 Exif2.1 ,它来自 PIMA的web站点. ISO 正致力于建立 DCF (Design rul
JPG图片EXIF信息提取工具exif
JPG<em>图片</em>EXIF<em>信息</em>提取工具<em>exif</em>
Android中读取图片EXIF元数据之metadata-extractor的使用
首先介绍一下什么是EXIF,EXIF是 Exchangeable Image File 的缩写,这是一种专门为数码相机照片设定的格式。这种格式可以用来记录数字照片的属性<em>信息</em>,如相机的品牌及型号、相片的拍摄时间、拍摄时所设置的光圈大小、快门速度、ISO等<em>信息</em>。除此之外它还能够记录拍摄数据,以及<em>图片</em>格式化方式,这样就可以输出到兼容EXIF格式的外设上,如照片打印机等。 目前最常见的支持EXIF<em>信息</em>的<em>图片</em>格式是JPG,很多的图像工具都可以直接显示<em>图片</em>的EXIF<em>信息</em>,包括现在的一些著名的相册网站也提供页面用于显示
PHP如何读取照片的exif信息
什么是Exif? Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的<em>信息</em>,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览E
poi对word2003或者2007的图片读取写入操作
poi对word2003或者2007的<em>图片</em><em>读取</em>和<em>写入</em>操作,包括根据上传的模版文件生成表单和对应的word文档,并能够对word文档中的字段进行修改。在文章中有下载代码的地址
图片中的exif数据
前两天python群中一位女神发了一张照片,虽然只是个风景照。但是我突然想起之前在读<>时书中有讲到在<em>图片</em>中包含<em>exif</em>(exchange image file format),<em>exif</em>标准定义了如何存储<em>图片</em>和音频文件的标准,包含文档的作者,修改时间甚至有可能包含照片的GPS位置<em>信息</em>。(事实上不止<em>图片</em>,文档,表格,音频,视频都有类似<em>exif</em>的元数据)。 from PIL
opencv读取,显示,写入图片(关于imwrite函数)
转载于:http://windrocblog.sinaapp.com/?p=465 OpenCV学习笔记(一):<em>读取</em>、显示、保存<em>图片</em> OpenCV中最基本的操作:<em>读取</em>、显示、保存<em>图片</em>。 OpenCV2.0版本引入与Matlab命令相同的函数,imread、imshow、imwrite,获取<em>图片</em>更将方便。 <em>读取</em>文件 imread 1Mat imrea
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章。 未经允许,不得转载。 序最近很多公众号都推送了关于『微信发送原图泄露隐私』的传言。实际上这里说的泄露,只是发送原图会携带 Exif <em>信息</em>,而 Exif <em>信息</em>里会携带一些例如 GPS 定位数据、拍摄时间等等<em>信息</em>。这些<em>信息</em>基本
Delphi 取Jpg图片内的Exif信息(需要GDI Plus)
//取Exif<em>信息</em>function GetExifItem(GPImage:TGPImage;ItemID: PROPID): String;var  PropSize: UINT;  PropItem: PPropertyItem;  S:PChar;  S1,S2:String;begin  PropSize := GPImage.GetPropertyItemSize(ItemID); 
开源图片详细信息提取metadata-extractor
网站:https://drewnoakes.com/code/<em>exif</em>/ GitHub:https://github.com/drewnoakes/metadata-extractor/ 参考网站:http://www.programgo.com/article/10671752428/ 使用版本: com.drewnoakes metadata-extractor 2.8
JS对图片进行base64压缩以及图片的EXIF-Orientation信息
最近在调试一个bug,项目刚接手几天,刚开始还一脸懵逼的,后来对这个bug的解决思路渐渐轻车熟路,好了,废话不说。。。
Java 往文件中写数据,新写入的数据总是覆盖原有数据,实现追加功能
import <em>java</em>.io.BufferedWriter; import <em>java</em>.io.FileOutputStream; import <em>java</em>.io.FileWriter; import <em>java</em>.io.IOException; import <em>java</em>.io.OutputStreamWriter; import <em>java</em>.io.RandomAccessFile; /** * 描述:追加
处理图像的exif中的orientation信息
解决用opencv imread<em>读取</em>图像时方向存在翻转的问题,使用参考http://blog.csdn.net/computerme/article/details/73929406
C#读取JPEG图片的Exif信息
[Serializable] public class EXIF { #region -- Class level members -- // Class level members. private Image _picture; #endregion #region -- Constructors -- // Constructors. /// /// This is default constructor of the EXIF class. /// public EXIF() { } /// /// This is base constructor of the EXIF class. /// public EXIF(string filePath) { _picture = Image.FromFile(filePath); } #endregion #region -- Public methods -- /// /// This method returns EXIF property values. /// /// EXIF property to be returned. public string GetEXIFProperty(Definitions.<em>exif</em>Code <em>exif</em>Code) { // Declare local variables. string returnValue; try { // All of the EXIF properties will return strings to display in the control. // Some of the properties require additional formatting or massaging // of the data once it is returned. Those properties have their own // methods. switch (<em>exif</em>Code) { case Definitions.<em>exif</em>Code.ImageDescription: returnValue = ParsedString(Definitions.<em>exif</em>Code.ImageDescription); break; case Definitions.<em>exif</em>Code.Make: returnValue = ParsedString(Definitions.<em>exif</em>Code.Make); break; case Definitions.<em>exif</em>Code.Model: returnValue = ParsedString(Definitions.<em>exif</em>Code.Model); break; case Definitions.<em>exif</em>Code.Orientation: returnValue = Orientation(); break; case Definitions.<em>exif</em>Code.XResolution: returnValue = ParseResolution(Definitions.<em>exif</em>Code.XResolution); break; case Definitions.<em>exif</em>Code.YResolution: returnValue = ParseResolution(Definitions.<em>exif</em>Code.YResolution); break; case Definitions.<em>exif</em>Code.ResolutionUnit: returnValue = ResolutionUnit(); break; case Definitions.<em>exif</em>Code.Software: returnValue = ParsedString(Definitions.<em>exif</em>Code.Software); break; case Definitions.<em>exif</em>Code.DateTime: returnValue = ParsedDate(Definitions.<em>exif</em>Code.DateTime).ToString(); break; case Definitions.<em>exif</em>Code.WhitePoint: returnValue = WhitePoint(); break; case Definitions.<em>exif</em>Code.PrimaryChromaticities: returnValue = PrimaryChromaticities(); break; case Definitions.<em>exif</em>Code.YCbCrCoefficients: returnValue = YCbCrCoefficients(); break; case Definitions.<em>exif</em>Code.YCbCrPositioning: returnValue = YCbCrPositioning(); break; case Definitions.<em>exif</em>Code.ReferenceBlackWhite: returnValue = ReferenceBlackWhite(); break; case Definitions.<em>exif</em>Code.Copyright: returnValue = ParsedString(Definitions.<em>exif</em>Code.Copyright); break; case Definitions.<em>exif</em>Code.ExposureTime: returnValue = ExposureTime(); break; case Definitions.<em>exif</em>Code.FNumber: returnValue = FNumber(); break; case Definitions.<em>exif</em>Code.ExposureProgram: returnValue = ExposureProgram(); break; case Definitions.<em>exif</em>Code.ISOSpeedRatings: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.ISOSpeedRatings); break; case Definitions.<em>exif</em>Code.ExifVersion: returnValue = ParsedString(Definitions.<em>exif</em>Code.ExifVersion); break; case Definitions.<em>exif</em>Code.DateTimeOriginal: returnValue = ParsedDate(Definitions.<em>exif</em>Code.DateTimeOriginal).ToString(); break; case Definitions.<em>exif</em>Code.DateTimeDigitized: returnValue = ParsedDate(Definitions.<em>exif</em>Code.DateTimeDigitized).ToString(); break; case Definitions.<em>exif</em>Code.ComponentsConfiguration: returnValue = ComponentsConfiguration(); break; case Definitions.<em>exif</em>Code.CompressedBitsPerPixel: returnValue = CompressedBitsPerPixel(); break; case Definitions.<em>exif</em>Code.ShutterSpeedValue: returnValue = ShutterSpeedValue(); break; case Definitions.<em>exif</em>Code.ApertureValue: returnValue = ApertureValue(); break; case Definitions.<em>exif</em>Code.BrightnessValue: returnValue = BrightnessValue(); break; case Definitions.<em>exif</em>Code.ExposureBiasValue: returnValue = ExposureBiasValue(); break; case Definitions.<em>exif</em>Code.MaxApertureValue: returnValue = MaxApertureValue(); break; case Definitions.<em>exif</em>Code.SubjectDistance: returnValue = SubjectDistance(); break; case Definitions.<em>exif</em>Code.MeteringMode: returnValue = MeteringMode(); break; case Definitions.<em>exif</em>Code.LightSource: returnValue = LightSource(); break; case Definitions.<em>exif</em>Code.Flash: returnValue = Flash(); break; case Definitions.<em>exif</em>Code.FocalLength: returnValue = FocalLength(); break; case Definitions.<em>exif</em>Code.MakerNote: returnValue = MakerNote(); break; case Definitions.<em>exif</em>Code.UserComment: returnValue = ParsedString(Definitions.<em>exif</em>Code.UserComment); break; case Definitions.<em>exif</em>Code.SubsecTime: returnValue = ParsedString(Definitions.<em>exif</em>Code.SubsecTime); break; case Definitions.<em>exif</em>Code.SubsecTimeOriginal: returnValue = ParsedString(Definitions.<em>exif</em>Code.SubsecTimeOriginal); break; case Definitions.<em>exif</em>Code.SubsecTimeDigitized: returnValue = ParsedString(Definitions.<em>exif</em>Code.SubsecTimeDigitized); break; case Definitions.<em>exif</em>Code.FlashpixVersion: returnValue = ParsedString(Definitions.<em>exif</em>Code.FlashpixVersion); break; case Definitions.<em>exif</em>Code.ColorSpace: returnValue = ColorSpace(); break; case Definitions.<em>exif</em>Code.RelatedSoundFile: returnValue = ParsedString(Definitions.<em>exif</em>Code.RelatedSoundFile); break; case Definitions.<em>exif</em>Code.FocalPlaneXResolution: returnValue = FocalPlaneXResolution(); break; case Definitions.<em>exif</em>Code.FocalPlaneYResolution: returnValue = FocalPlaneYResolution(); break; case Definitions.<em>exif</em>Code.FocalPlaneResolutionUnit: returnValue = ResolutionUnit(); break; case Definitions.<em>exif</em>Code.ExposureIndex: returnValue = ExposureIndex(); break; case Definitions.<em>exif</em>Code.SensingMethod: returnValue = SensingMethod(); break; case Definitions.<em>exif</em>Code.FileSource: returnValue = FileSource(); break; case Definitions.<em>exif</em>Code.SceneType: returnValue = SceneType(); break; case Definitions.<em>exif</em>Code.CFAPattern: returnValue = ParsedString(Definitions.<em>exif</em>Code.CFAPattern); break; case Definitions.<em>exif</em>Code.InteroperabilityIndex: returnValue = ParsedString(Definitions.<em>exif</em>Code.InteroperabilityIndex); break; case Definitions.<em>exif</em>Code.ImageWidth: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.ImageWidth); break; case Definitions.<em>exif</em>Code.ImageLength: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.ImageLength); ; break; case Definitions.<em>exif</em>Code.BitsPerSample: returnValue = BitsPerSample(); break; case Definitions.<em>exif</em>Code.Compression: returnValue = Compression(); break; case Definitions.<em>exif</em>Code.PhotometricInterpretation: returnValue = PhotometricInterpretation(); break; case Definitions.<em>exif</em>Code.StripOffsets: returnValue = StripOffsets(); break; case Definitions.<em>exif</em>Code.SamplesPerPixel: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.SamplesPerPixel); break; case Definitions.<em>exif</em>Code.RowsPerStrip: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.RowsPerStrip); break; case Definitions.<em>exif</em>Code.StripByteCounts: returnValue = StripByteCounts(); break; case Definitions.<em>exif</em>Code.PlanarConfiguration: returnValue = PlanarConfiguration(); break; case Definitions.<em>exif</em>Code.YCbCrSubSampling: returnValue = YCbCrSubSampling(); break; case Definitions.<em>exif</em>Code.ImageUniqueID: returnValue = ParsedString(Definitions.<em>exif</em>Code.ImageUniqueID); break; case Definitions.<em>exif</em>Code.JPEGInterchangeFormatLength: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.JPEGInterchangeFormatLength); break; case Definitions.<em>exif</em>Code.TransferFunction: returnValue = "Not implemented."; break; case Definitions.<em>exif</em>Code.PixelXDimension: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.PixelXDimension); break; case Definitions.<em>exif</em>Code.PixelYDimension: returnValue = UnformattedShort(Definitions.<em>exif</em>Code.PixelYDimension); break; case Definitions.<em>exif</em>Code.SpectralSensitivity: returnValue = ParsedString(Definitions.<em>exif</em>Code.SpectralSensitivity); break; case Definitions.<em>exif</em>Code.OECF: returnValue = ParsedString(Definitions.<em>exif</em>Code.OECF); break; case Definitions.<em>exif</em>Code.CustomRendered: returnValue = CustomRendered(); break; case Definitions.<em>exif</em>Code.ExposureMode: returnValue = ExposureMode(); break; case Definitions.<em>exif</em>Code.WhiteBalance: returnValue = WhiteBalance(); break; case Definitions.<em>exif</em>Code.DigitalZoomRatio: returnValue = DigitalZoomRatio(); break; case Definitions.<em>exif</em>Code.FocalLengthIn35mmFilm: returnValue = FocalLengthIn35mmFilm(); break; case Definitions.<em>exif</em>Code.SceneCaptureType: returnValue = SceneCaptureType(); break; case Definitions.<em>exif</em>Code.GainControl: returnValue = GainControl(); break; case Definitions.<em>exif</em>Code.Contrast: returnValue = Contrast(); break; case Definitions.<em>exif</em>Code.Saturation: returnValue = Saturation(); break; case Definitions.<em>exif</em>Code.Sharpness: returnValue = Sharpness(); break; case Definitions.<em>exif</em>Code.DeviceSettingDescription: returnValue = ParsedString(Definitions.<em>exif</em>Code.DeviceSettingDescription); break; case Definitions.<em>exif</em>Code.SubjectDistanceRange: returnValue = SubjectDistanceRange(); break; default: returnValue = "EXIF property not found."; break; } return returnValue; } catch { return "N/A"; } } #endregion #region -- EXIF Methods -- /// /// This method returns the bits per sample EXIF property. /// private string BitsPerSample() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.BitsPerSample); //Translate the EXIF code into a readable value. if (!data.Equals(null)) { returnValue = data[0].ToString() + " " + data[1].ToString() + " " + data[2].ToString(); } return returnValue; } /// /// This method returns the compression EXIF property. /// private string Compression() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.Compression); //Translate the EXIF code into a readable value. if (!data.Equals(null)) { switch (data[0]) { case 1: returnValue = "uncompressed"; break; case 6: returnValue = "JPEG compression (thumbnails only)"; break; default: returnValue = "reserved"; break; } } return returnValue; } /// /// This method returns the photometric interpretation EXIF property. /// private string PhotometricInterpretation() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.PhotometricInterpretation); //Translate the EXIF code into a readable value. if (data != null) { switch (data[0]) { case 2: returnValue = "RBG"; break; case 6: returnValue = "YCbCr"; break; default: returnValue = "reserved"; break; } } return returnValue; } /// /// This method returns the strip offsets EXIF property. /// private string StripOffsets() { return "Not implemented."; } /// /// This method returns the strip byte counts EXIF property. /// private string StripByteCounts() { return "Not implemented."; } /// /// This method returns the planar configuration EXIF property. /// private string PlanarConfiguration() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.PlanarConfiguration); //Translate the EXIF code into a readable value. if (data != null) { switch (data[0]) { case 1: returnValue = "chunky format"; break; case 2: returnValue = "planar format"; break; default: returnValue = "reserved"; break; } } return returnValue; } /// /// This method returns the YCbCr subsampling EXIF property. /// private string YCbCrSubSampling() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.YCbCrSubSampling); //Translate the EXIF code into a readable value. if (data != null) { switch (data[0]) { case 2: if (data[1] == 1) { returnValue = "YCbCr4:2:2"; } else { returnValue = "YCbCr4:2:0"; } break; default: returnValue = "reserved"; break; } } return returnValue; } /// /// This method returns the orientation EXIF property. /// private string Orientation() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.Orientation); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 1: returnValue = "The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side."; break; case 2: returnValue = "The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side."; break; case 3: returnValue = "The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side."; break; case 4: returnValue = "The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side."; break; case 5: returnValue = "The 0th row is at the visual left-hand side of the image, and the 0th column is the visual top."; break; case 6: returnValue = "The 0th row is at the visual right-hand side of the image, and the 0th column is the visual top."; break; case 7: returnValue = "The 0th row is at the visual right-hand side of the image, and the 0th column is the visual bottom."; break; case 8: returnValue = "The 0th row is at the visual left-hand side of the image, and the 0th column is the visual bottom."; break; default: returnValue = "Other"; break; } } return returnValue; } /// /// This method returns the resolution unit EXIF property. /// private string ResolutionUnit() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] resUnit = GetPropertyValue(Definitions.<em>exif</em>Code.ResolutionUnit); //Translate the EXIF code into a readable value. if (resUnit != null) { switch (resUnit[0]) { case 2: returnValue = "inches"; break; case 3: returnValue = "centimeters"; break; default: returnValue = "reserved"; break; } } return returnValue; } /// /// This method returns the white point EXIF property. /// private string WhitePoint() { string returnValue = "EXIF property not found."; EXIFRational[] data = ParsedRationalArray(Definitions.<em>exif</em>Code.WhitePoint); if (data.Length > 0) { returnValue = data[0].Denominator.ToString() + ", " + data[1].Denominator.ToString(); } return returnValue; } /// /// This method returns the primary chromaticities EXIF property. /// private string PrimaryChromaticities() { string returnValue = "EXIF property not found."; EXIFRational[] data = ParsedRationalArray(Definitions.<em>exif</em>Code.PrimaryChromaticities); if (data.Length > 0) { returnValue = data[0].Denominator.ToString() + ", " + data[1].Denominator.ToString() + ", " + data[2].Denominator.ToString() + ", " + data[3].Denominator.ToString() + ", " + data[4].Denominator.ToString() + ", " + data[5].Denominator.ToString(); } return returnValue; } /// /// This method returns the YCbCr coefficients EXIF property. /// private string YCbCrCoefficients() { string returnValue = "EXIF property not found."; EXIFRational[] data = ParsedRationalArray(Definitions.<em>exif</em>Code.YCbCrCoefficients); if (data.Length > 0) { returnValue = data[0].Denominator.ToString() + ", " + data[1].Denominator.ToString() + ", " + data[2].Denominator.ToString(); } return returnValue; } /// /// This method returns the YCbCr positioning EXIF property. /// private string YCbCrPositioning() { //Declare local variables. string returnValue = ""; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.YCbCrPositioning); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 1: returnValue = "centered"; break; case 2: returnValue = "co-sited"; break; default: returnValue = "reserved"; break; } } else { returnValue = "EXIF property not found."; } return returnValue; } /// /// This method returns the reference black white EXIF property. /// private string ReferenceBlackWhite() { string returnValue = "EXIF property not found."; EXIFRational[] data = ParsedRationalArray(Definitions.<em>exif</em>Code.ReferenceBlackWhite); if (data.Length > 0) { returnValue = "[" + data[0].Denominator.ToString() + ", " + data[1].Denominator.ToString() + ", " + data[2].Denominator.ToString() + ", " + data[3].Denominator.ToString() + ", " + data[4].Denominator.ToString() + ", " + data[5].Denominator.ToString() + "]"; } return returnValue; } /// /// This method returns the exposure time EXIF property. /// private string ExposureTime() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational exposureTime = ParsedRational(Definitions.<em>exif</em>Code.ExposureTime); //Translate the EXIF code into a readable value. if (!exposureTime.Equals(null)) { if (exposureTime.Numerator == 0 && exposureTime.Denominator == 0) { returnValue = "N/A"; } else { returnValue = string.Format("{0}/{1} s", exposureTime.Numerator, exposureTime.Denominator); } } else { returnValue = "N/A"; } return returnValue; } /// /// This method returns the FNumber EXIF property. /// private string FNumber() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational fNumber = ParsedRational(Definitions.<em>exif</em>Code.FNumber); //Translate the EXIF code into a readable value. if (!fNumber.Equals(null)) { returnValue = string.Format("f{0}", (float)(fNumber.Numerator / fNumber.Denominator)); } return returnValue; } /// /// This method returns the exposure program EXIF property. /// private string ExposureProgram() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.ExposureProgram); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Not defined"; break; case 1: returnValue = "Manual"; break; case 2: returnValue = "Normal program"; break; case 3: returnValue = "Aperture priority"; break; case 4: returnValue = "Shutter priority"; break; case 5: returnValue = "Creative program (biased toward depth of field)"; break; case 6: returnValue = "Action program (biased toward fast shutter speed)"; break; case 7: returnValue = "Portrait mode (for closeup photos with the background out of focus)"; break; case 8: returnValue = "Landscape mode (for landscape photos with the background in focus)"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the components configuration EXIF property. /// private string ComponentsConfiguration() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.ComponentsConfiguration); switch (data[0]) { case 1: returnValue = "YCbCr"; break; case 4: returnValue = "RGB"; break; default: returnValue = "Reserved"; break; } return returnValue; } /// /// This method returns the compressed bits per pixel EXIF property. /// // This method needs to fixed to return the correct value. private string CompressedBitsPerPixel() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational cbpp = ParsedRational(Definitions.<em>exif</em>Code.CompressedBitsPerPixel); //Translate the EXIF code into a readable value. if (!cbpp.Equals(null)) { returnValue = string.Format("{0}/{1}", cbpp.Numerator, cbpp.Denominator); } return returnValue; } /// /// This method returns the aperture value EXIF property. /// private string ApertureValue() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational fNumber = ParsedRational(Definitions.<em>exif</em>Code.FNumber); //Translate the EXIF code into a readable value. if (!fNumber.Equals(null)) { double av = Math.Round(2 * Math.Log(((fNumber.Numerator / fNumber.Denominator)), 2.00)); returnValue = string.Format("f{0}", (double)av); } return returnValue; } /// /// This method returns the shutter speed value EXIF property. /// private string ShutterSpeedValue() { //Declare local variables. string returnValue = "EXIF property not found."; returnValue = ExposureTime(); return returnValue; } /// /// This method returns the subject distance EXIF property. /// private string SubjectDistance() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational sd = ParsedRational(Definitions.<em>exif</em>Code.SubjectDistance); //Translate the EXIF code into a readable value. if (!sd.Equals(null)) { returnValue = string.Format("{0}", sd.Numerator); } return returnValue; } /// /// This method returns the metering mode EXIF property. /// private string MeteringMode() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.MeteringMode); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Unknown"; break; case 1: returnValue = "Average"; break; case 2: returnValue = "CenterWeightedAverage"; break; case 3: returnValue = "Spot"; break; case 4: returnValue = "MultiSpot"; break; case 5: returnValue = "Pattern"; break; case 6: returnValue = "Partial"; break; case 255: returnValue = "Other"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the light source EXIF property. /// private string LightSource() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.LightSource); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 1: returnValue = "Daylight"; break; case 2: returnValue = "Fluorescent"; break; case 3: returnValue = "Tungsten (incandescent light)"; break; case 4: returnValue = "Flash"; break; case 9: returnValue = "Fine weather"; break; case 10: returnValue = "Cloudy weather"; break; case 11: returnValue = "Shade"; break; case 12: returnValue = "Daylight fluorescent (D 5700 - 7100K)"; break; case 13: returnValue = "Day white fluorescent (N 4600 - 5400K)"; break; case 14: returnValue = "Cool white fluorescent (W 3900 - 4500K)"; break; case 15: returnValue = "White fluorescent (WW 3200 - 3700K)"; break; case 17: returnValue = "Standard light A"; break; case 18: returnValue = "Standard light B"; break; case 19: returnValue = "Standard light C"; break; case 20: returnValue = "D55"; break; case 21: returnValue = "D65"; break; case 22: returnValue = "D75."; break; case 23: returnValue = "D50"; break; case 24: returnValue = "ISO studio tungsten"; break; case 255: returnValue = "other light source"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the flash EXIF property. /// private string Flash() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.Flash); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Flash did not fire."; break; case 1: returnValue = "Flash fired."; break; case 5: returnValue = "Strobe return light not detected."; break; case 7: returnValue = "Strobe return light detected."; break; case 9: returnValue = "Flash fired, compulsory flash mode."; break; case 13: returnValue = "Flash fired, compulsory flash mode, return light not detected."; break; case 15: returnValue = "Flash fired, compulsory flash mode, return light detected."; break; case 16: returnValue = "Flash did not fire, compulsory flash mode."; break; case 24: returnValue = "Flash did not fire, auto mode."; break; case 25: returnValue = "Flash fired, auto mode."; break; case 29: returnValue = "Flash fired, auto mode, return light not detected."; break; case 31: returnValue = "Flash fired, auto mode, return light detected."; break; case 32: returnValue = "No flash function."; break; case 65: returnValue = "Flash fired, red-eye reduction mode."; break; case 69: returnValue = "Flash fired, red-eye reduction mode, return light not detected."; break; case 71: returnValue = "Flash fired, red-eye reduction mode, return light detected."; break; case 73: returnValue = "Flash fired, compulsory flash mode, red-eye reduction mode."; break; case 77: returnValue = "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected."; break; case 79: returnValue = "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected."; break; case 89: returnValue = "Flash fired, auto mode, red-eye reduction mode."; break; case 93: returnValue = "Flash fired, auto mode, return light not detected, red-eye reduction mode."; break; case 95: returnValue = "Flash fired, auto mode, return light detected, red-eye reduction mode."; break; default: returnValue = "Not defined, reserved."; break; } } return returnValue; } /// /// This method returns the focal length EXIF property. /// private string FocalLength() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational focalLength = ParsedRational(Definitions.<em>exif</em>Code.FocalLength); //Translate the EXIF code into a readable value. if (!focalLength.Equals(null)) { if (focalLength.Numerator == 0 && focalLength.Denominator == 0) { returnValue = "N/A"; } else { returnValue = string.Format("{0:N0} mm", focalLength.Numerator * 1.0 / focalLength.Denominator); } } return returnValue; } /// /// This method returns the maker note EXIF property. /// private string MakerNote() { return "Not implemented."; } /// /// This method returns the color space EXIF property. /// private string ColorSpace() { //Declare local variables. string returnValue = "EXIF property not found."; byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.ColorSpace); //Translate the EXIF code into a readable value. if (data.Length > 0) { switch (data[0]) { case 1: returnValue = "sRGB"; break; case 255: returnValue = "Uncalibrated"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the focal plane x resolution EXIF property. /// private string FocalPlaneXResolution() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational focalPlaneXRes = ParsedRational(Definitions.<em>exif</em>Code.FocalPlaneXResolution); //Translate the EXIF code into a readable value. if (!focalPlaneXRes.Equals(null)) { returnValue = string.Format("{0:N0} mm", (focalPlaneXRes.Numerator * 1.0 / focalPlaneXRes.Denominator)); } return returnValue; } /// /// This method returns the focal plane y resolution EXIF property. /// private string FocalPlaneYResolution() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational focalPlaneYRes = ParsedRational(Definitions.<em>exif</em>Code.FocalPlaneYResolution); //Translate the EXIF code into a readable value. if (!focalPlaneYRes.Equals(null)) { returnValue = string.Format("{0:N0} mm", focalPlaneYRes.Numerator * 1.0 / focalPlaneYRes.Denominator); } return returnValue; } /// /// This method returns the exposure index EXIF property. /// private string ExposureIndex() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational expIndex = ParsedRational(Definitions.<em>exif</em>Code.ExposureIndex); //Translate the EXIF code into a readable value. if (!expIndex.Equals(null)) { returnValue = string.Format("{0:N0} mm", expIndex.Numerator * 1.0 / expIndex.Denominator); } return returnValue; } /// /// This method returns the sensing method EXIF property. /// private string SensingMethod() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.SensingMethod); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 1: returnValue = "Not defined."; break; case 2: returnValue = "One-chip color area sensor."; break; case 3: returnValue = "Two-chip color area sensor."; break; case 4: returnValue = "Three-chip color area sensor."; break; case 5: returnValue = "Color sequential area sensor."; break; case 7: returnValue = "Trilinear sensor."; break; case 8: returnValue = "Color sequential linear sensor"; break; default: returnValue = "Reserved."; break; } } return returnValue; } /// /// This method returns the file source EXIF property. /// private string FileSource() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.FileSource); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 3: returnValue = "DSC"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the scene type EXIF property. /// private string SceneType() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.FileSource); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 1: returnValue = "A directly photographed image."; break; default: returnValue = "Reserved."; break; } } return returnValue; } /// /// This method returns the custom rendered EXIF property. /// private string CustomRendered() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.CustomRendered); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Normal process"; break; case 1: returnValue = "Custom process"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the exposure mode EXIF property. /// private string ExposureMode() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.ExposureMode); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Auto exposure"; break; case 1: returnValue = "Manual exposure"; break; case 2: returnValue = "Auto bracket"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the white balance EXIF property. /// private string WhiteBalance() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.WhiteBalance); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Auto white balance"; break; case 1: returnValue = "Manual white balance"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the focal length in 35mm film EXIF property. /// private string FocalLengthIn35mmFilm() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.FocalLengthIn35mmFilm); string returnValue = "EXIF property not found."; if (data.Length > 0) { if (data[0] == 0) { returnValue = "Unknown"; } else if (data[0].ToString().Trim() == "NaN") { returnValue = "N/A"; } else { returnValue = data[0].ToString() + "mm"; } } return returnValue; } /// /// This method returns the scene capture type EXIF property. /// private string SceneCaptureType() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.SceneCaptureType); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Standard"; break; case 1: returnValue = "Landscape"; break; case 2: returnValue = "Portrait"; break; case 3: returnValue = "Night scene"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the gain control EXIF property. /// private string GainControl() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.GainControl); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "None"; break; case 1: returnValue = "Low gain up"; break; case 2: returnValue = "High gain up"; break; case 3: returnValue = "Low gain down"; break; case 4: returnValue = "High gain down"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the contrast EXIF property. /// private string Contrast() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.Contrast); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Normal"; break; case 1: returnValue = "Soft"; break; case 2: returnValue = "Hard"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the saturation EXIF property. /// private string Saturation() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.Saturation); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Normal"; break; case 1: returnValue = "Low saturation"; break; case 2: returnValue = "High saturation"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the sharpness EXIF property. /// private string Sharpness() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.Sharpness); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Normal"; break; case 1: returnValue = "Soft"; break; case 2: returnValue = "Hard"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the subject distance range EXIF property. /// private string SubjectDistanceRange() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.SubjectDistanceRange); string returnValue = "EXIF property not found."; if (data.Length > 0) { switch (data[0]) { case 0: returnValue = "Unknown"; break; case 1: returnValue = "Macro"; break; case 2: returnValue = "Close view"; break; case 3: returnValue = "Distant view"; break; default: returnValue = "Reserved"; break; } } return returnValue; } /// /// This method returns the subject location EXIF property. /// private string SubjectLocation() { // Declare local variables. // Get the value for this EXIF property. byte[] data = GetPropertyValue(Definitions.<em>exif</em>Code.SubjectLocation); string returnValue = "EXIF property not found."; if (data.Length > 0) { returnValue = "(" + data[0].ToString() + ", " + data[1].ToString() + ")"; } return returnValue; } /// /// This method returns the digital zoom ratio EXIF property. /// private string DigitalZoomRatio() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational dzr = ParsedRational(Definitions.<em>exif</em>Code.DigitalZoomRatio); //Translate the EXIF code into a readable value. if (!dzr.Equals(null)) { returnValue = dzr.Numerator.ToString() + ":" + dzr.Denominator.ToString(); } return returnValue; } /// /// This method returns the brightness value EXIF property. /// private string BrightnessValue() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational data = ParsedRational(Definitions.<em>exif</em>Code.DigitalZoomRatio); //Translate the EXIF code into a readable value. if (!data.Equals(null)) { if ((long)data.Numerator >= Int32.MaxValue) { returnValue = "Unknown"; } else { returnValue = Math.Log(data.Numerator / data.Denominator, 2.0).ToString(); } } return returnValue; } /// /// This method returns the max aperture value EXIF property. /// private string MaxApertureValue() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational data = ParsedRational(Definitions.<em>exif</em>Code.MaxApertureValue); //Translate the EXIF code into a readable value. if (!data.Equals(null)) { returnValue = string.Format("f{0}", (double)(data.Numerator / data.Denominator)); } return returnValue; } /// /// This method returns the exposure bias value EXIF property. /// private string ExposureBiasValue() { //Declare local variables. string returnValue = "EXIF property not found."; EXIFRational data = ParsedRational(Definitions.<em>exif</em>Code.ExposureBiasValue); //Translate the EXIF code into a readable value. if (!data.Equals(null)) { returnValue = string.Format("f{0}", (double)(data.Numerator / data.Denominator)); } return returnValue; } #endregion #region -- Private helper functions -- // Private helper functions. /// /// This method retrieves the data from the propery items collection. /// private byte[] GetPropertyValue(Definitions.<em>exif</em>Code <em>exif</em>Code) { return _picture.GetPropertyItem((int)<em>exif</em>Code).Value; } /// /// This method returns string EXIF data. /// private string ParsedString(Definitions.<em>exif</em>Code <em>exif</em>Code) { // Declare local variables. // Retrieve the data for this EXIF property. byte[] data = GetPropertyValue(<em>exif</em>Code); // Holds the return value. string parsed = ""; // If there's data, go ahead and parse it. if (data.Length > 1) { // Allocate some memory. IntPtr h = Marshal.AllocHGlobal(data.Length); int i = 0; foreach (byte b in data) { Marshal.WriteByte(h, i, b); i++; } parsed = Marshal.PtrToStringAnsi(h); Marshal.FreeHGlobal(h); } return parsed; } /// /// This method returns rational EXIF data. /// private EXIFRational ParsedRational(Definitions.<em>exif</em>Code <em>exif</em>Code) { // Declare local variables. // Retrieve the data for this EXIF property. byte[] data = GetPropertyValue(<em>exif</em>Code); // Parse the data. EXIFRational parsed = new EXIFRational(data); return parsed; } /// /// This method returns an array of rational EXIF data. /// private EXIFRational[] ParsedRationalArray(Definitions.<em>exif</em>Code <em>exif</em>Code) { // Declare local variables. // Retrieve the data for this EXIF property. byte[] data = GetPropertyValue(<em>exif</em>Code); // Holds the return value. EXIFRational[] parsed = null; int arraySize = (data.Length / 8); if (arraySize > 0) { parsed = new EXIFRational[arraySize]; for (int i = 0; i < arraySize; i++) { parsed[i] = new EXIFRational(data, i * 8); } } return parsed; } /// /// This method returns date/time EXIF data. /// private DateTime ParsedDate(Definitions.<em>exif</em>Code <em>exif</em>Code) { // Declare local variables. // Create a new date object. DateTime ret = new DateTime(1900, 1, 1, 0, 0, 0); // Parse the data. string date = ParsedString(<em>exif</em>Code); // Format the data. if (date.Length >= 19) {
Android中通过Exifinterface读取图片地理位置信息
效果图: 一、了解Exif EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,是一种图像文件格式,它的数据存储与JPEG格式是完全相同的,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等
文章热词 片exif信息dng格式 Java CAVLC解码上下文信息 Java教程 Java培训
相关热词 c++读取jpeg图片信息 c# 写入注册表信息 c++ exif jpeg c++读取写入in和out 人工智能写入中小学课程 人工智能写入教程
我们是很有底线的