/// 照片元数据编码
在下面的文章里,可以看到图片所有的元数据定义信息
 
 
 元数据的结果类型定义
/// 数据类型结果
 
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. OAF_开发系列20_实现OAF打印功能

    ddddd 添加一个页面级的button区域:pagebuttonBar,在之下添加button item ,这里主要设置的参数有:采用默认的oaf的打印按钮的id名称: IcxPrintablePa ...

  2. pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下

    首先下载instantclient 可以到oracle官网下载,要注册账号,一定要下对应版本的,要不然不成功, 10G,11G版的,我已经传上来了,免费下载:正在上传中,稍等 配置文件tnsnames ...

  3. java 事件监听 - 键盘

    java 事件监听 - 键盘 //事件监听 //键盘事件监听,写了一个小案例,按上下左右,改变圆形的位置,圆形可以移动 import java.awt.*; import javax.swing.*; ...

  4. 使用C#进行图像处理的几种方法(转)

    本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...

  5. IE报错:模块"scrrun.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005

    在我的win10系统上打开某内部网页登录的时候弹出'模块"scrrun.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005'报错信息, ...

  6. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  7. Android RelativeLayout用到的一些重要的属性

    转载自 http://mobile.51cto.com/android-265842.htm 第一类:属性值为true或false android:layout_centerHrizontal  水平 ...

  8. MAGIC XPA最新版本Magic xpa 2.4c Release Notes

    New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...

  9. 通过Windows组策略限制证书组织流氓软件的安装运行

    https://liwei2.com/2015/11/27/378.html关于如何提取证书,请参阅:https://www.zhihu.com/question/26917038http://www ...

  10. GMM的EM算法实现

    转自:http://blog.csdn.net/abcjennifer/article/details/8198352 在聚类算法K-Means, K-Medoids, GMM, Spectral c ...