如何在c#中获得jpeg EXIF标签的字符串表示?
本文关键字:标签 EXIF 字符串 表示 jpeg | 更新日期: 2023-09-27 18:15:48
有很多使用Bitmap类枚举和编辑EXIF标签的例子。
这是一个:
Bitmap bJpgWithExifData = (Bitmap)Image.FromFile(@"myfile.jpg");
foreach (var item in bJpgWithExifData.PropertyItems)
{
Console.WriteLine( "{0}'t{1}'t{2}",item.Type,item.Id,item.Len);
}
但是,这并没有解释我如何获得这些标记的字符串值。数据是二进制的,当我尝试用Encoding.ASCII.GetString(item.Value)
解码它时,我得到一些垃圾而不是正确的属性。
如何获得字符串值?
下面是JPEGSnoop显示的exif标签:
EXIF IFD0 @ Absolute 0x00000014
Dir Length = 0x0010
[Model ] = "GT-I9500"
[Orientation ] = Row 0: top, Col 0: left
[WhiteBalance ] = Auto white balance
[DateTime ] = "2014:07:30 13:24:28"
[Make ] = "SAMSUNG"
[ExifOffset ] = @ 0x010C
Offset to Next IFD = 0x00000000
当枚举c#属性时,我看到18个不同的属性,其中2个是类型2("2014:07:30 13:24:28"answers"SAMSUNG"转换为字符串)
我如何得到其余的值?
更新1
下面是我用来打印这些值的代码: foreach (var item in bJpgWithExifData.PropertyItems)
{
Console.WriteLine("{0}'t0x{1}'t{2}'t{3}'t{4}",item.Type,item.Id.ToString("x"),item.Len,Convert.ToBase64String(item.Value),Encoding.ASCII.GetString(item.Value));
}
输出如下:
3 0x100 2 IBA= >
3 0x101 2 Egk= ¦
2 0x10f 8 U0FNU1VORwA= SAMSUNG
3 0x112 2 AQA= O
2 0x132 20 MjAxNDowNzozMCAxMzoyNDoyOAA= 2014:07:30 13:24:28
10 0x829a 8 PgAAAOgDAAA= > ?¦
10 0x829d 8 FgAAAAoAAAA= -
4 0x201 4 KgEAAA== *O
4 0x202 4 AAAAAA==
3 0x8822 2 AgA= O
3 0x8827 2 MgA= 2
3 0x9207 2 AgA= O
3 0x9208 2 AAA=
3 0x9209 2 AQA= O
5 0x920a 8 pAEAAGQAAAA= ?O d
3 0xa403 2 AAA=
3 0x5091 128 BwAHAAoAEwAoACgAKAAoAAcACAAKABoAKAAoACgAKAAKAAoAFgAoACgAKAAoACgAEwAaACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAA=
! ( ( ( (
> ( ( ( (
- ( ( ( ( ( ! > ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (
3 0x5090 128 BgAEAAQABgAKABAAFAAYAAUABQAGAAgACgAXABgAFgAGAAUABgAKABAAFwAcABYABgAHAAkADAAUACMAIAAZAAcACQAPABYAGwAsACkAHwAKAA4AFgAaACAAKgAtACUAFAAaAB8AIwApADAAMAAoAB0AJQAmACcALQAoACkAKAA= ¦ ¦ ¦ ¦
> ¶ ^ ¦ ¦
¦ ^ - ¦ ¦ ¦
> ¦ L - ¦ + ¶ # v 0 - < , ) Ў
d - > * - % ¶ > Ў # ) 0 0 ( - % & ' - ( ) (
在Code Project: http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0上检查此库
我之前也做过同样的事情。在PropertyItem
对象上有一个Type
属性。您需要使用该值来确定需要对每种类型的对象做什么。
我在Code Project上发现了这个,它做了大部分关于如何将不同类型的值拼凑在一起的工作,然后只修改了一点点,以便自定义一些结果。
不幸的是,这是一个非常复杂的过程,太长了,无法在这里深入讨论,但是我给出的小概述应该给你一个足够好的想法来检查这个项目,或者知道如果将来这个URL死了,从哪里开始。