/// 照片元数据编码
在下面的文章里,可以看到图片所有的元数据定义信息
 
 
 元数据的结果类型定义
/// 数据类型结果
 
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. 强势回归,Linux blk用实力证明自己并不弱!

    Flash的出现把存储的世界搅翻了天,仿佛一夜之间发现了新大陆,所有旧世界的东西都变得笨拙.NVMe驱动义无反顾地抛弃了Linux blk,开发自己的队列管理. 当第一次看到NVMe重新使用Linux ...

  2. 02shell编程环境的搭建

    02shell编程环境的搭建 [02]Shell编程 02shell编程环境的搭建 在不同的操作系统上搭建shell编程环境 Linux Windows Mac 编辑器的选择 系统环境的搭建 注: 选 ...

  3. servlet简单用法和配置示例及说明

    学习原因和目的:   我如今所接触的项目都是bs模式的web应用,而里边基本上都是用的spring MVC和前台交互,servlet貌似用的很少.   但是即便是用spring和spring MVC, ...

  4. MYSQL 内存报错 Use 'mysqld --thread_stack=#' to specify a bigger stack.

    今天在使用mysql的过程中,连接数据库始终无法成功 最后发现是数据库无法执行增加修改的操作 :错误代码 Thread stack overrun:  11552 bytes used of a 13 ...

  5. Oracle补习班第九天

    Better to light one candle than to curse the darkness. 与其诅咒黑暗,不如点亮烛光! 1,用SQL备份数据库数据文件 sqlplus / as s ...

  6. eclispe---快捷键设置

    1,eclipse自动补全的设置(自动提示) 2014-11-03 14:51:43 如果你用过Visual Studio的自动补全功能后,再来用eclipse的自动补全功能,相信大家会有些许失望. ...

  7. zz Must read

    http://www.opengpu.org/forum.php?mod=viewthread&tid=965&extra=page%3D1 游戏引擎剖析(Game Engine An ...

  8. How to Take Control of Your Line Height in Outlook.com

    Reference to: http://www.emailonacid.com/blog/details/C13/line_height_and_outlook.com

  9. 后台数据库读取Html值 到前台显示不了样式

    @Html.Raw(FieldValue) 像一些Html代码 传到前台编译不了,直接显示出来 FieldValue 是后台传过来的值 viewBag

  10. jquery文件上传控件 Uploadify

    (转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...