/// 照片元数据编码
在下面的文章里,可以看到图片所有的元数据定义信息
 
 
 元数据的结果类型定义
/// 数据类型结果
 
Integer 表示的类型
1 指定 Value 为字节数组。
2 指定 Value 为空终止 ASCII 字符串。如果将类型数据成员设置为 ASCII 类型,则应该将 Len 属性设置为包括空终止的字符串长度。例如,字符串“Hello”的长度为 6。
3 指定 Value 为无符号的短(16 位)整型数组。
4 指定 Value 为无符号的长(32 位)整型数组。
5 指定 Value 数据成员为无符号的长整型对数组。每一对都表示一个分数;第一个整数是分子,第二个整数是分母。
6 指定 Value 为可以包含任何数据类型的值的字节数组。
7 指定 Value 为有符号的长(32 位)整型数组。
10 指定 Value 为有符号的长整型对数组。每一对都表示一个分数;第一个整数是分子,第二个整数是分母。
 
操作元数据的一般步骤:
1:读取图片得到Bitmap
2:得到一个PropertyItem对象, PropertyItem propertyItem = image.PropertyItems[0];
3:为该PropertyItem对象设置Id ,Value ,Type ,Len 等属性(查表看格式和Id)
4:将值保存 image.SetPropertyItem(propertyItem);
5:保存图片,就可以得到包含指定信息的图片文件了。
不用担心覆盖的问题,不知道为啥微软不让创建PropertyItem对象,而通过这种方式,来为照片添加元数据信息。
通过元数据,我们可以对照片进行很多后期处理,比如根据照相时间重新命名文件,给照片添加版权信息,添加描述等等信息。
 
 
 
写入经纬度信息
           /// PropertyTagGpsLatitudeRef
SetPropertyString(bitmap, 0x0001, "N");
/// PropertyTagGpsLongitudeRef
SetPropertyString(bitmap, 0x0003, "E");
byte[] bytes = new byte[];
byte[] bytes1 = BitConverter.GetBytes();
byte[] bytes2 = BitConverter.GetBytes();
byte[] bytes3 = BitConverter.GetBytes();
byte[] bytes4 = BitConverter.GetBytes();
byte[] bytes5 = BitConverter.GetBytes();
byte[] bytes6 = BitConverter.GetBytes();
int index = ;
bytes1.CopyTo(bytes, index);
index += ;
bytes2.CopyTo(bytes, index);
index += ;
bytes3.CopyTo(bytes, index);
index += ;
bytes4.CopyTo(bytes, index);
index += ;
bytes5.CopyTo(bytes, index);
index += ;
bytes6.CopyTo(bytes, index); /// PropertyTagGpsLatitude
SetProperty(bitmap, 0x0002, bytes, ); bytes = new byte[];
bytes1 = BitConverter.GetBytes();
bytes2 = BitConverter.GetBytes();
bytes3 = BitConverter.GetBytes();
bytes4 = BitConverter.GetBytes();
bytes5 = BitConverter.GetBytes();
bytes6 = BitConverter.GetBytes();
index = ;
bytes1.CopyTo(bytes, index);
index += ;
bytes2.CopyTo(bytes, index);
index += ;
bytes3.CopyTo(bytes, index);
index += ;
bytes4.CopyTo(bytes, index);
index += ;
bytes5.CopyTo(bytes, index);
index += ;
bytes6.CopyTo(bytes, index); /// PropertyTagGpsLongitude
SetProperty(bitmap, 0x0004, bytes, );
        public void SetProperty(Bitmap image, Int32 propertyItemId, byte[] bytes, short propertyItemType)
{
System.Drawing.Imaging.PropertyItem propertyItem = (System.Drawing.Imaging.PropertyItem)(System.Activator.CreateInstance(typeof(System.Drawing.Imaging.PropertyItem), true));
propertyItem.Id = propertyItemId;
propertyItem.Value = bytes;
propertyItem.Type = propertyItemType;
propertyItem.Len = bytes.Length;
image.SetPropertyItem(propertyItem);
}

照片元数据信息以及在照片中写入gps信息的更多相关文章

  1. java Exception 出错的栈信息打印到日志中 打印堆栈信息

    我们在开发程序的过程当中,日志是必不可少的工具,这有助于我们分析问题的原因,和出错的详细信息,而java的异常机制又会方便且迅速的帮我们找到出错行的位置. try { .... } catch (Ex ...

  2. 巧用section在cshtml写入layout中写入head信息 ASP.NET MVC

    转自:http://www.cnblogs.com/a-xu/archive/2012/05/08/2489746.html layout文件中: <head> <meta char ...

  3. Android 之 PackageManager获取的应用程序信息与AndroidManifest文件中设置的信息不一致问题

    有时我们需要用 PackageManager 来获取应用程序的版本号和版本名称等信息,通过以下代码来获取: PackageManager manager = getPackageManager(); ...

  4. 利用图片中的exif元数据批量查找图片中所包含的GPS信息

    在图片的exif(交换图像文件格式)中标准定义了如何存储图像和音频文件的标准,而在这些标签中往往存在了一些容易被人们忽视却又重要的东西. 有一款工具名为exiftool,可以快速的解析所有标签,并将结 ...

  5. java往文本文件中写入信息并修改

    题目要求: 1.可以往一个文本文档中写入员工信息:name,id和详情 2.可以更改name package FanCQ.Xue.practice; import java.io.*;import j ...

  6. PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输

    前些文章陆续的说了一些关于这些主题,但是讨论的都不够深入,今天我们深入的了解一下获取帮助信息.管道以及格式化输出的内容. 一.获取帮助信息 在PS中获取帮助信息,最常用的有: -? .get-comm ...

  7. ETL应用:使用Pro*C写入文件信息入库的方法

    ETL处理过程中,经常需要进行文件校验,如文件级校验.记录级校验,需要保存文件的基本信息,文件名.文件大小.数据日期等,使用Pro*C的一种方法如下: #include <stdio.h> ...

  8. 使用 python 提取照片中的手机信息

    使用 python 提取照片中的手机信息 最近在做一个项目,有一个很重要的点是需要获取使用用户的手机信息,这里我选择从照片中获取信息.有人会问为什么不从手机里面直接获取设备信息.由于现在android ...

  9. 选择本地照片之后即显示在Img中(客户体验)

    最近转战MVC项目,然后又再次遇到照片上传的实现,之前都是使用ASP.NET,虽然也有照片上传,而且出于客户体验考虑, 也实现了选择本地照片之后即时显示在IMG中,在这里就简单介绍其实现(ASP.NE ...

随机推荐

  1. 时时获得高德地图坐标 http://lbs.amap.com/console/show/picker

    1.高德地图标注 在做开发时,或者做高德地图标注的时候,要用到高德地图的坐标,时时获得高德地图坐标 http://lbs.amap.com/console/show/picker 老的高德地图标注地址 ...

  2. 升级Dell的R810固件版本

    1.到下面链接去下载win32版本的EXE固件 http://www.dell.com/support/home/cn/zh/cndhs1/Drivers/DriversDetails?driverI ...

  3. <<redis设计和实现>>读书笔记

    redis如何实现主从同步的高效率?? 主从复制的同步有一个命令数据的同步文本,然后利用两个不同服务器的偏移量来进行进行同步,避免每次都是全部同步(并非会保存所有的命令数据,而是会有一个缓冲区(比如1 ...

  4. 使用ionic framework创建一个简单的APP

    ionic是一个以cordova为基础的html5前端框架,功能强大,能够快速做出与原生开发相似的应用. 一,安装和配置 1,安装(前提:cordova环境配置完成) npm install -g i ...

  5. Oracle 11g服务器安装详细步骤

    原出处:http://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html 方法/步骤   1 大家可以根据自己的操作系统是多少位(32位或6 ...

  6. 无索引状态下比较DataTable的几种过滤方法效率

    先构造一个DataTable: public DataTable GetDataTable() { DataTable dtTmp = new DataTable(); dtTmp.Columns.A ...

  7. web api 开发记录

    1. 修改 api 返回时间格式 //配置返回的时间类型数据格式 GlobalConfiguration.Configuration.Formatters.JsonFormatter.Serializ ...

  8. left join 取一条数据

    产品生产过程中要记录产品在制作过程中的不良历史,即使在一个工序,也可以产生多条不良历史记录,所有的不良信息保存在B表中.假设产品在打包工序,存放打包工序成品参数记录的表A,数据是唯一的.但在打包过程中 ...

  9. CentOS下Apache配置多域名或者多端口映射

    CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...

  10. Solr整合Ansj中文分词器

    Ansj的使用和相关资料下载参考:http://iamyida.iteye.com/blog/2220833 参考 http://www.cnblogs.com/luxh/p/5016894.html ...