【问题标题】:How do I get string representation of jpeg EXIF tags in c#?如何在 c# 中获取 jpeg EXIF 标签的字符串表示形式?
【发布时间】:2014-07-31 19:35:30
【问题描述】:

有很多示例如何使用 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”和“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 ( - % & ' - ( ) (

【问题讨论】:

标签: c# bitmap jpeg gdi+ exif


【解决方案1】:

【讨论】:

【解决方案2】:

不久前我不得不做同样的事情。 PropertyItem 对象上有一个 Type 属性。您需要使用该值来确定您需要对每种类型的对象执行什么操作。

我发现this on Code Project 完成了如何将不同类型的值拼凑在一起的大部分工作,然后只进行了一点点修改以自定义一些结果。

不幸的是,这是一个复杂得可笑的过程,这里太冗长了,无法深入介绍,但我提供的小概述应该让您有足够好的想法来检查项目,或者知道如果该 URL 死了,应该从哪里开始未来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多