c# 獲取照片的經緯度和時間


        public List<string> GetXYFromPic(String jpgPath)
        {
            List<string> sXY = new List<string>();
            try
            {
                //載入圖片   
                Image objImage = Image.FromFile(jpgPath);
                //取得所有的屬性(以PropertyId做排序)   
                var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);
                foreach (PropertyItem objItem in propertyItems)
                {
                    //只取Id范圍為0x0000到0x001e
                    if (objItem.Id >= 0x0000 && objItem.Id <= 0x001e)
                    {
                        switch (objItem.Id)
                        {
                            case 0x0002://設置緯度
                                if (objItem.Value.Length == 24)
                                {
                                    //degrees(將byte[0]~byte[3]轉成uint, 除以byte[4]~byte[7]轉成的uint)   
                                    double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
                                    //minutes(將byte[8]~byte[11]轉成uint, 除以byte[12]~byte[15]轉成的uint)   
                                    double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
                                    //seconds(將byte[16]~byte[19]轉成uint, 除以byte[20]~byte[23]轉成的uint)   
                                    double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
                                    double dblGPSLatitude = (((s / 60 + m) / 60) + d);
 
                                    sXY.Add(dblGPSLatitude.ToString("0.00000000"));
                                }
                                break;
                            case 0x0004: //設置經度
                                if (objItem.Value.Length == 24)
                                {
                                    //degrees(將byte[0]~byte[3]轉成uint, 除以byte[4]~byte[7]轉成的uint)   
                                    double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
                                    //minutes(將byte[8]~byte[11]轉成uint, 除以byte[12]~byte[15]轉成的uint)   
                                    double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
                                    //seconds(將byte[16]~byte[19]轉成uint, 除以byte[20]~byte[23]轉成的uint)   
                                    double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
                                    double dblGPSLongitude = (((s / 60 + m) / 60) + d);
                                    sXY.Add(dblGPSLongitude.ToString("0.00000000"));
                                }
                                break;
                        }
                    }
                    if (objItem.Id == 0x9003 || objItem.Id == 0x0132)//Id為0x9003表示拍照的時間,0x0132 最后更新時間
                    {
                        var propItemValue = objItem.Value;
                        var dateTimeStr = System.Text.Encoding.ASCII.GetString(propItemValue).Trim('\0');
                        var dt = DateTime.ParseExact(dateTimeStr, "yyyy:MM:dd HH:mm:ss", CultureInfo.InvariantCulture);
                        sXY.Add(dt.ToString());//.ToShortDateString()
                    }
                }
 
                objImage.Dispose();
                return sXY;
 
            }
            catch (Exception ex)
            {
                //MessageManager.Show(jpgPath + "該圖片文件損壞");
                //listErrorMessage.Add(jpgPath + "該照片由於照片損壞,因此無法進行導入。");
                return sXY;
            }
 
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM