手机拍照时如果开启了位置信息:
那么你通过右键对照片查看属性时就可以看到经度和纬度。
那么问题来了,如何用代码将这两个值取出来呢? 今天分享给你们。 Imports System.Drawing Imports System.Drawing.Imaging Sub 从照片中提取经度和纬度() On Error Resume Next Dim theImage As Image = New Bitmap("c:\456.jpg") '请根据自己的实际情况修改 Dim propItems As PropertyItem() = theImage.PropertyItems Dim propItem As PropertyItem, WeiDu As Byte(), JingDu As Byte() Dim a, b, c As Double, aa, bb, cc As Double, 经 As String, 纬 As String For Each propItem In propItems If propItem.Id = 2 Then WeiDu = propItem.Value a = BitConverter.ToUInt32(WeiDu, 0) / BitConverter.ToUInt32(WeiDu, 4) '读取度 b = BitConverter.ToUInt32(WeiDu, 8) / BitConverter.ToUInt32(WeiDu, 12) '读取分 c = BitConverter.ToUInt32(WeiDu, 16) / BitConverter.ToUInt32(WeiDu, 20) '读取秒 纬 = a & "度" & b & "分" & c & "秒" ElseIf propItem.Id = 4 Then JingDu = propItem.Value aa = BitConverter.ToUInt32(JingDu, 0) / BitConverter.ToUInt32(JingDu, 4) '读取度 bb = BitConverter.ToUInt32(JingDu, 8) / BitConverter.ToUInt32(JingDu, 12) '读取分 cc = BitConverter.ToUInt32(JingDu, 16) / BitConverter.ToUInt32(JingDu, 20) '读取秒 经 = aa & "度" & bb & "分" & cc & "秒" End If Next MsgBox("经:" & 经 & Chr(13) & "纬:" & 纬, vbOKOnly, "友情提示") End Sub
前两句是声明命名空间,后面的是代码。 这是VSTO代码,不是VBA代码,要注意。 执行代码以后会弹出对话框:
表示执行成功。 代码中的"c:\456.jpg" 请自行修改路径,每个人的图片位置不同。 如果你再加循环语句,那么就可以批量提取了。 如果您觉得本文分享请用,请转发。 更多VSTO知识,参见图书《Excel VBA与VSTO基础实战指南》
|