[C#] GeoTag(GPS 정보)를 jpg 파일로 설정/취득할 때의 빠진 메모
→ h tps:// 퀵했다. 작은 m / 절 1707 / MS / 4f입니다 73D86 그림 d283 그림 C4f
GeoTag 관련
- GeoTag (GPS 정보)를 jpg 파일로 설정 / 취득
- GeoTag(GPS 정보)를 jpg 파일로 설정/취득할 때의 헛된 메모
하고 싶은 일
UWP API ( GeotagHelper.SetGeotagAsync()
)를 사용하여 jpeg 파일에 GeoTag를 부여하고 싶지만 특정 jpeg 파일 만 왜인지 GeotagHelper.SetGeotagAsync()
를 실행할 때 예외가 발생합니다.
jpeg 파일을 제대로 SetGeotagAsync에 넣어 하고 있을 것인데, 왜 예외가 될지 모르겠다. 그 때에 조사했다(라고 하는지 여러가지 시험했다) 일의 메모.
결론 (예외의 원인)
원인은, GeoTag 부여하려고 하고 있던 jpeg 파일이, 실은 jpeg 파일이 아니었던 것.
구체적으로는, 그 jpeg 파일을 System.Drawing.Bitmap
의 Save()
메소드를 사용해 작성하고 있었지만, Save 의 인수에 System.Drawing.Imaging.ImageFormat.Jpeg
. 파일 확장명 System.Drawing.Imaging.ImageFormat.Bmp
jpeg 파일로 했기 때문에.
Windows에서는 확장명이 .jpeg
인 비트맵 파일의 확장자만을 .bmp
로 바꾸면 보통 jpeg로 페인트나 다른 앱에서 열리게 되지만, .jpeg
, 확장자뿐만 아니라 멋진 .jpg 파일이 아니라면, 한한 받아들이지 않는 것 같습니다.
(EXIF의 데이터를 타는 영역이 bmp 파일의 선두 부분에는 준비되어 있지 않기 때문일지도.)
샘플
var cur = Directory.GetCurrentDirectory(); // exeのあるディレクトリ
var filepath = cur + @"\ginga.bmp"; // 元の画像
var filepath_out_jpg = cur + @"\ginga_out.jpg"; // jpgとして保存する画像
var filepath_out_bmp = cur + @"\ginga_out_fake.jpg"; // 実はbmpだけどjpgとして保存する画像
using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite))
using (var bmp = new System.Drawing.Bitmap(fs))
{
// 元の画像を、jpgとbmpで保存し分ける
bmp.Save(filepath_out_jpg, System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Save(filepath_out_bmp, System.Drawing.Imaging.ImageFormat.Bmp);
}
// GPS値作成
BasicGeoposition bgps = new BasicGeoposition() { Latitude = 3.0, Longitude = 2.0, Altitude = 1.0 };
// GPS値をGeopointにセット
Geopoint gps = new Geopoint(bgps);
try
{
// GPS値をjpgファイルに書き込み
var stjpg = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_jpg);
await GeotagHelper.SetGeotagAsync(stjpg, gps);// →こっちは問題なくgeotag付与できる
var stbmp = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_bmp);
await GeotagHelper.SetGeotagAsync(stbmp, gps);// →こっちは、拡張子はjpgだが実はbmpでjpgではないので、geotag付与時に例外発生
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Reference
이 문제에 관하여([C#] GeoTag(GPS 정보)를 jpg 파일로 설정/취득할 때의 빠진 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tera1707/items/b245c4a264ed2bf50746
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
원인은, GeoTag 부여하려고 하고 있던 jpeg 파일이, 실은 jpeg 파일이 아니었던 것.
구체적으로는, 그 jpeg 파일을
System.Drawing.Bitmap
의 Save()
메소드를 사용해 작성하고 있었지만, Save 의 인수에 System.Drawing.Imaging.ImageFormat.Jpeg
. 파일 확장명 System.Drawing.Imaging.ImageFormat.Bmp
jpeg 파일로 했기 때문에.Windows에서는 확장명이
.jpeg
인 비트맵 파일의 확장자만을 .bmp
로 바꾸면 보통 jpeg로 페인트나 다른 앱에서 열리게 되지만, .jpeg
, 확장자뿐만 아니라 멋진 .jpg 파일이 아니라면, 한한 받아들이지 않는 것 같습니다.(EXIF의 데이터를 타는 영역이 bmp 파일의 선두 부분에는 준비되어 있지 않기 때문일지도.)
샘플
var cur = Directory.GetCurrentDirectory(); // exeのあるディレクトリ
var filepath = cur + @"\ginga.bmp"; // 元の画像
var filepath_out_jpg = cur + @"\ginga_out.jpg"; // jpgとして保存する画像
var filepath_out_bmp = cur + @"\ginga_out_fake.jpg"; // 実はbmpだけどjpgとして保存する画像
using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite))
using (var bmp = new System.Drawing.Bitmap(fs))
{
// 元の画像を、jpgとbmpで保存し分ける
bmp.Save(filepath_out_jpg, System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Save(filepath_out_bmp, System.Drawing.Imaging.ImageFormat.Bmp);
}
// GPS値作成
BasicGeoposition bgps = new BasicGeoposition() { Latitude = 3.0, Longitude = 2.0, Altitude = 1.0 };
// GPS値をGeopointにセット
Geopoint gps = new Geopoint(bgps);
try
{
// GPS値をjpgファイルに書き込み
var stjpg = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_jpg);
await GeotagHelper.SetGeotagAsync(stjpg, gps);// →こっちは問題なくgeotag付与できる
var stbmp = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_bmp);
await GeotagHelper.SetGeotagAsync(stbmp, gps);// →こっちは、拡張子はjpgだが実はbmpでjpgではないので、geotag付与時に例外発生
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Reference
이 문제에 관하여([C#] GeoTag(GPS 정보)를 jpg 파일로 설정/취득할 때의 빠진 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tera1707/items/b245c4a264ed2bf50746
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var cur = Directory.GetCurrentDirectory(); // exeのあるディレクトリ
var filepath = cur + @"\ginga.bmp"; // 元の画像
var filepath_out_jpg = cur + @"\ginga_out.jpg"; // jpgとして保存する画像
var filepath_out_bmp = cur + @"\ginga_out_fake.jpg"; // 実はbmpだけどjpgとして保存する画像
using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite))
using (var bmp = new System.Drawing.Bitmap(fs))
{
// 元の画像を、jpgとbmpで保存し分ける
bmp.Save(filepath_out_jpg, System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Save(filepath_out_bmp, System.Drawing.Imaging.ImageFormat.Bmp);
}
// GPS値作成
BasicGeoposition bgps = new BasicGeoposition() { Latitude = 3.0, Longitude = 2.0, Altitude = 1.0 };
// GPS値をGeopointにセット
Geopoint gps = new Geopoint(bgps);
try
{
// GPS値をjpgファイルに書き込み
var stjpg = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_jpg);
await GeotagHelper.SetGeotagAsync(stjpg, gps);// →こっちは問題なくgeotag付与できる
var stbmp = await Windows.Storage.StorageFile.GetFileFromPathAsync(filepath_out_bmp);
await GeotagHelper.SetGeotagAsync(stbmp, gps);// →こっちは、拡張子はjpgだが実はbmpでjpgではないので、geotag付与時に例外発生
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Reference
이 문제에 관하여([C#] GeoTag(GPS 정보)를 jpg 파일로 설정/취득할 때의 빠진 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tera1707/items/b245c4a264ed2bf50746텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)