如何在VB.NET中从图像描述区读取图像标签
在VB.NET中正确提取图像描述区标签的方法
你的代码存在几个关键问题导致无法正常工作,以下是修正方案及说明:
原代码的问题
- 返回类型不匹配:函数声明返回
DateTime,但实际要返回字符串标签,编译会直接报错 - 编码选择错误:对应Exif的
UserComment标签(ID为&H9C9E)的内容通常使用ASCII编码,而非Unicode - 未处理空终止符:
PropertyItem.Value字节数组末尾会包含空字节,直接转换字符串会带入无效字符
修正后的代码
Public Shared Function GetImageDescriptionTags(ByVal path As String) As String Using fs As New FileStream(path, FileMode.Open, FileAccess.Read) Using myImage As Image = Image.FromStream(fs, False, False) ' 定位到Exif UserComment标签(ID: &H9C9E) Dim commentItem = myImage.PropertyItems.FirstOrDefault(Function(pi) pi.Id = &H9C9E) If commentItem Is Nothing Then Return String.Empty End If ' 用ASCII编码转换字节数组,截断空终止符前的有效内容 Dim rawValue = Encoding.ASCII.GetString(commentItem.Value) Dim tagContent = rawValue.Substring(0, rawValue.IndexOf(Chr(0))) Return tagContent End Using End Using End Function
关键修正说明
- 修正返回类型:将函数返回类型改为
String,匹配实际要返回的标签内容 - 正确编码转换:使用
Encoding.ASCII解析标签内容,符合Exif UserComment的常规编码规范 - 截断空字节:通过查找空字符
Chr(0)的位置,截取有效标签内容,避免末尾的无效字符
调用该函数后,就能得到你需要的格式内容:StyleShootsModel=sam001;StyleShootsAspectRatio=2_3;StyleShootsPreset=Jacqueline;StyleShootsProducts=21FKA00012;StyleShootsFraming=CRP;StyleShootsEquipment=StyleShoots Live ();
内容的提问来源于stack exchange,提问作者Salman
相关产品推荐
相关产品推荐

