{"id":1092,"date":"2012-08-24T19:22:01","date_gmt":"2012-08-24T10:22:01","guid":{"rendered":"http:\/\/www.digifie.jp\/blog\/?p=1092"},"modified":"2012-09-14T18:54:21","modified_gmt":"2012-09-14T09:54:21","slug":"iphone-%e3%81%a7%e6%92%ae%e5%bd%b1%e3%81%97%e3%81%9f%e5%86%99%e7%9c%9f%e3%81%ae-exif-%e3%82%92-air-for-ios-%e3%81%a7%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e3%81%9f%e3%82%81%e3%81%ae%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/www.digifie.jp\/blog\/archives\/1092","title":{"rendered":"iPhone \u3067\u64ae\u5f71\u3057\u305f\u5199\u771f\u306e Exif \u3092 AIR for iOS \u3067\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u30e1\u30e2"},"content":{"rendered":"<div class='wp_social_bookmarking_light'>        <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=https%3A%2F%2Fwww.digifie.jp%2Fblog%2Farchives%2F1092&t=iPhone%20%E3%81%A7%E6%92%AE%E5%BD%B1%E3%81%97%E3%81%9F%E5%86%99%E7%9C%9F%E3%81%AE%20Exif%20%E3%82%92%20AIR%20for%20iOS%20%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A1%E3%83%A2' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='https:\/\/www.digifie.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>        <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.digifie.jp\/blog\/archives\/1092\" data-text=\"iPhone \u3067\u64ae\u5f71\u3057\u305f\u5199\u771f\u306e Exif \u3092 AIR for iOS \u3067\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u30e1\u30e2\" data-via=\"LLC DigiFie\" data-lang=\"ja\">Tweet<\/a><\/div><\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n<p>AIR for iOS \u3067\u4f5c\u6210\u3057\u3066\u3044\u308b\u30a2\u30d7\u30ea\u3067\u3001iPhone \u3067\u64ae\u5f71\u3057\u305f\u5199\u771f\u306e\u5411\u304d\u3092\u8abf\u3079\u308b\u305f\u3081 Exif \u3092\u53d6\u5f97\u3057\u3088\u3046\u3068\u3057\u305f\u3089\u3001\u4e88\u60f3\u4ee5\u4e0a\u306b\u624b\u3053\u305a\u3063\u3066\u3072\u3069\u3044\u76ee\u306b\u906d\u3063\u305f\u306e\u3067\u5fd8\u308c\u306a\u3044\u3088\u3046\u306b\u30e1\u30e2\u3002<\/p>\n<p>JPEG \u753b\u50cf\u304b\u3089 Exif \u3092\u53d6\u5f97\u3067\u304d\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066 <a href=\"http:\/\/code.shichiseki.jp\/as3\/ExifInfo\/\" target=\"_blenk\">Exif library AS3<\/a> \u304c\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3057\u3066 iPhone \u3067\u64ae\u5f71\u3057\u305f\u5199\u771f\u306e Exif \u3092\u53d6\u5f97\u3057\u3066 Orientation \u3092\u8abf\u3079\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u304c\u4f55\u6545\u304b\u3046\u307e\u304f\u3044\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002<br \/>\n<a href=\"http:\/\/dqn.sakusakutto.jp\/2009\/02\/jpegexiforientaion.html\" target=\"_blank\">\uff08\u53c2\u8003\uff1aExif \u306e Orientation \u4e00\u89a7\uff09<\/a><\/p>\n<p>\u3053\u308a\u3083\u3053\u307e\u3063\u305f\u306a\u30fc\u3068\u601d\u3044\u306a\u304c\u3089\u8272\u3005\u8abf\u3079\u3066\u307f\u308b\u3068\u2026<\/p>\n<p><a href=\"http:\/\/recycledinformation.blogspot.jp\/2011\/08\/reading-exif-data-on-ios.html\" target=\"_blank\">Reading exif data on iOS (Adobe AIR) <\/a>\u3068\u3044\u3046\u30bf\u30a4\u30c8\u30eb\u306e\u30d6\u30ed\u30b0\u306e\u8a18\u4e8b\u3092\u898b\u3064\u3051\u3066\u3001\u3053\u3053\u66f8\u3044\u3066\u3042\u308b\u3068\u304a\u308a\u306b ExifInfo \u306e\u30bd\u30fc\u30b9\u3092\u66f8\u304d\u76f4\u3059\u3068\u7121\u4e8b\u8aad\u307f\u8fbc\u3081\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u3069\u306e\u3088\u3046\u306b\u52d5\u4f5c\u3059\u308b\u304b\u898b\u3066\u307f\u305f\u3044\u65b9\u306f\u3001AIR for iOS \u3067\u8a66\u3057\u306b\u4f5c\u3063\u305f\u30a2\u30d7\u30ea<a href=\"http:\/\/itunes.apple.com\/jp\/app\/toikamu\/id480954288?mt=8\" target=\"_blank\">\u300c\u30c8\u30a4\u30ab\u30e0\u300d<\/a>\u3067\u3001\u3053\u306e Exif \u304b\u3089\u5199\u771f\u306e\u5411\u304d\u3092\u8aad\u307f\u53d6\u308b\u4ed5\u7d44\u307f\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u5b9f\u969b\u306e\u52d5\u4f5c\u306f\u3053\u3061\u3089\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u306b\u3088\u308b\u3068\u3001iOS \u306e\u5199\u771f\u304b\u3089 Exif \u3092\u53d6\u5f97\u3059\u308b\u5834\u5408\u306f \u201dTo fix the problem, you have to check to see if the first marker after the initial JPEG marker is  the JFIF one. If it is, skip it. That&#8217;s all there is too it. \u201d \u3068\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u3069\u3046\u3084\u3089 iOS \u306e\u5834\u5408\u3001JPEG\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u521d\u306e\u30de\u30fc\u30ab\u30fc\u304c\u4ed6\u306eJPEG\u30d5\u30a1\u30a4\u30eb\u3068\u9055\u3063\u3066\u3044\u308b\u306e\u3067\u305d\u308c\u3092\u30b9\u30ad\u30c3\u30d7\uff08\u30d0\u30a4\u30ca\u30ea\u306e\u30dd\u30b8\u30b7\u30e7\u30f3\u3092\u79fb\u52d5\uff09\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\u3002<br \/>\n\uff08\u8a73\u3057\u3044\u3053\u3068\u306f\u3088\u304f\u5206\u304b\u3063\u3066\u3044\u307e\u305b\u3093\u304c\u2026\uff09<\/p>\n<p>\u3042\u3068\u3001Exif \u3092\u8aad\u307f\u8fbc\u3080\u969b\u306e MediaPromise \u306e\u4f7f\u3044\u65b9\u3082\u3088\u304f\u5206\u304b\u3089\u306a\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u5148\u307b\u3069\u306e\u8a18\u4e8b\u306e\u30b3\u30e1\u30f3\u30c8\u304c\u53c2\u8003\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>MediaPromise \u304b\u3089 Exif \u3092\u53d6\u5f97\u3059\u308b\u5834\u5408\u306f\u3001MediaPromise \u3092 open \u3057\u3066 IDataInput \u3067\u53c2\u7167\u3057\u305f\u3042\u3068 ByteArray \u306b\u8aad\u307f\u8fbc\u3093\u3067\u3001\u305d\u306e ByteArray \u304b\u3089 Exif \u3092\u53d6\u5f97\u3001\u5b9f\u753b\u50cf\u3082 Loader.loadFilePromise \u306f\u4f7f\u7528\u305b\u305a\u3001ByteArray \u3092 Loader.loadBytes \u3067\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<br \/>\n\u3053\u306e\u6642\u3001ByteArray \u306e\u30dd\u30b8\u30b7\u30e7\u30f3\u306f\u5148\u306b Exif \u306e\u53d6\u5f97\u3067\u4f7f\u7528\u3057\u3066\u3044\u308b\u306e\u3067\u5ff5\u306e\u305f\u3081 0 \u306b\u623b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u3068\u3044\u3046\u308f\u3051\u3067\u3001\u4eca\u56de\u306e\u691c\u8a3c\u7528\u30b3\u30fc\u30c9\u3067\u3059\u3002<br \/>\n\uff08 ExifInfo \u306f\u5148\u306b\u7d39\u4ecb\u3057\u305f\u8a18\u4e8b\u306e\u901a\u308a\u306b\u66f8\u304d\u76f4\u3057\u3066\u4f7f\u7528\u3057\u307e\u3057\u305f\uff09<\/p>\n<p>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30af\u30e9\u30b9<\/p>\n<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\npackage\r\n{\r\n\timport flash.display.Bitmap;\r\n\timport flash.display.Sprite;\r\n\timport flash.events.Event;\r\n\timport flash.events.MouseEvent;\r\n\t\r\n\timport jp.digifie.media.CameraManeger;\r\n\t\r\n\t[SWF( width = '640', height = '960', frameRate = '30', backgroundColor = '0' )]\r\n\t\r\n\tpublic class ExifTest extends Sprite\r\n\t{\r\n\t\t\r\n\t\tprivate var _cameraManager:CameraManeger;\r\n\t\tprivate var _cameraImage:Bitmap = new Bitmap();\r\n\t\t\r\n\t\tpublic var cameraBtn:CameraBtn;\r\n\t\tpublic var cameraRollBtn:CameraRollBtn;\r\n\t\t\r\n\t\tpublic function ExifTest()\r\n\t\t{\r\n\t\t\tsuper();\r\n\t\t\t\r\n\t\t\t_cameraManager = CameraManeger.getInstance();\r\n\t\t\taddChild( _cameraImage );\r\n\t\t\t\r\n\t\t\tcameraBtn = new CameraBtn();\r\n\t\t\tcameraBtn.x = 20;\r\n\t\t\tcameraBtn.y = 960 - cameraBtn.height - 20;\r\n\t\t\t\r\n\t\t\tcameraRollBtn = new CameraRollBtn();\r\n\t\t\tcameraRollBtn.x = cameraBtn.x + cameraRollBtn.width + 20;\r\n\t\t\tcameraRollBtn.y = cameraBtn.y;\r\n\t\t\t\r\n\t\t\taddChild( cameraBtn );\r\n\t\t\taddChild( cameraRollBtn );\r\n\t\t\t\r\n\t\t\tcameraBtn.addEventListener( MouseEvent.CLICK, addCamera );\r\n\t\t\tcameraRollBtn.addEventListener( MouseEvent.CLICK, addCameraRoll );\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tprivate function addCamera( e:MouseEvent ):void\r\n\t\t{\r\n\t\t\t_cameraManager.addCameraUI();\r\n\t\t\t_cameraManager.addEventListener( &quot;imageselect_done&quot;, showCameraImage );\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tprivate function addCameraRoll( e:MouseEvent ):void\r\n\t\t{\r\n\t\t\t_cameraManager.addCameraRoll();\r\n\t\t\t_cameraManager.addEventListener( &quot;imageselect_done&quot;, showCameraImage );\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tprivate function showCameraImage( e:Event ):void\r\n\t\t{\r\n\t\t\t_cameraManager.removeEventListener( &quot;imageselect_done&quot;, showCameraImage );\r\n\t\t\t_cameraImage.bitmapData = _cameraManager.resizedImage( 640, 960 );\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t}\r\n}\r\n<\/pre>\n<p>\u30ab\u30e1\u30e9\u304a\u3088\u3073\u30ab\u30e1\u30e9\u30ed\u30fc\u30eb\u306e\u5236\u5fa1\u30af\u30e9\u30b9<\/p>\n<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\npackage jp.digifie.media\r\n{\r\n\timport flash.display.Bitmap;\r\n\timport flash.display.BitmapData;\r\n\timport flash.display.Loader;\r\n\timport flash.events.ErrorEvent;\r\n\timport flash.events.Event;\r\n\timport flash.events.EventDispatcher;\r\n\timport flash.events.IEventDispatcher;\r\n\timport flash.events.IOErrorEvent;\r\n\timport flash.events.MediaEvent;\r\n\timport flash.geom.Matrix;\r\n\timport flash.media.CameraRoll;\r\n\timport flash.media.CameraUI;\r\n\timport flash.media.MediaPromise;\r\n\timport flash.media.MediaType;\r\n\timport flash.net.URLRequest;\r\n\timport flash.utils.ByteArray;\r\n\timport flash.utils.IDataInput;\r\n\t\r\n\timport jp.shichiseki.exif.*;\r\n\r\n\tpublic class CameraManeger extends EventDispatcher\r\n\t{\r\n\r\n\t\tprivate static var instance:CameraManeger;\r\n\r\n\t\tpublic var cameraUI:CameraUI = new CameraUI();\r\n\t\tpublic var cameraRoll:CameraRoll = new CameraRoll();\r\n\r\n\t\tprivate var _imageLoader:Loader;\r\n\t\tprivate var _image:BitmapData;\r\n\t\t\r\n\t\tprivate var imagePromise:MediaPromise;\r\n\t\tprivate var imageOrientation:int;\r\n\r\n\r\n\t\tpublic function CameraManeger( enforcer:SingletonEnforcer )\r\n\t\t{\r\n\t\t\tsetup();\r\n\t\t}\r\n\r\n\r\n\t\t\/\/ ----------- Singleton GetInstance -------------------------------------- \/\r\n\t\tpublic static function getInstance():CameraManeger\r\n\t\t{\r\n\t\t\tif ( !CameraManeger.instance ) CameraManeger. instance = new CameraManeger( new SingletonEnforcer());\r\n\t\t\treturn CameraManeger.instance;\r\n\t\t}\r\n\r\n\r\n\t\t\/\/ ----------- Setup -------------------------------------- \/\r\n\t\tprivate function setup():void\r\n\t\t{\r\n\t\t\tif ( CameraUI.isSupported )\r\n\t\t\t{\r\n\t\t\t\tcameraUI.addEventListener( MediaEvent.COMPLETE, onImageCapture );\r\n\t\t\t\tcameraUI.addEventListener( Event.CANCEL, onCaptureCanceled );\r\n\t\t\t\tcameraUI.addEventListener( ErrorEvent.ERROR, cameraError );\r\n\t\t\t}\r\n\r\n\t\t\tif ( CameraRoll.supportsBrowseForImage )\r\n\t\t\t{\r\n\t\t\t\tcameraRoll.addEventListener( MediaEvent.SELECT, onImageCapture );\r\n\t\t\t\tcameraRoll.addEventListener( Event.CANCEL, onCaptureCanceled );\r\n\t\t\t\tcameraRoll.addEventListener( ErrorEvent.ERROR, cameraError );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t\t\/\/ ----------- Add CameraUI or CameraRoll -------------------------------------- \/\r\n\t\tpublic function addCameraUI():void\r\n\t\t{\r\n\t\t\tif ( CameraUI.isSupported )\r\n\t\t\t\tcameraUI.launch( MediaType.IMAGE );\r\n\t\t}\r\n\r\n\t\tpublic function addCameraRoll():void\r\n\t\t{\r\n\t\t\tif ( CameraRoll.supportsBrowseForImage )\r\n\t\t\t\tcameraRoll.browseForImage();\r\n\t\t}\r\n\r\n\t\t\r\n\t\tprivate var _dataSrc:IDataInput;\r\n\t\tprivate var _exif:ExifInfo;\r\n\r\n\t\t\/\/ ----------- MediaEvent -------------------------------------- \/\r\n\r\n\t\tprivate function onImageCapture( e:MediaEvent ):void\r\n\t\t{\r\n\t\t\timagePromise = e.data;\r\n\t\t\t_dataSrc = imagePromise.open();\r\n\r\n\t\t\tif ( imagePromise.isAsync )\r\n\t\t\t{\r\n\t\t\t\tvar eventSource:IEventDispatcher = _dataSrc as IEventDispatcher;\r\n\t\t\t\teventSource.addEventListener( Event.COMPLETE, readExif );\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\treadExif();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ ----------- Exif -------------------------------------- \/\r\n\t\tprivate function readExif( e:Event = null ):void\r\n\t\t{\r\n\t\t\tvar ba:ByteArray = new ByteArray();\r\n\t\t\t_dataSrc.readBytes( ba );\r\n\t\t\t\r\n\t\t\t_exif = new ExifInfo( ba );\r\n\t\t\t\r\n\t\t\tif ( _exif.ifds.primary )\r\n\t\t\t\tdisplayIFD( _exif.ifds.primary );\r\n\t\t\tif ( _exif.ifds.exif )\r\n\t\t\t\tdisplayIFD( _exif.ifds.exif );\r\n\t\t\tif ( _exif.ifds.gps )\r\n\t\t\t\tdisplayIFD( _exif.ifds.gps );\r\n\t\t\tif ( _exif.ifds.interoperability )\r\n\t\t\t\tdisplayIFD( _exif.ifds.interoperability );\r\n\t\t\tif ( _exif.ifds.thumbnail )\r\n\t\t\t\tdisplayIFD( _exif.ifds.thumbnail );\r\n\t\t\t\r\n\t\t\timageOrientation = _exif.ifds.primary.Orientation;\r\n\t\t\t\r\n\t\t\tba.position = 0;\r\n\t\t\t\r\n\t\t\t_imageLoader = new Loader();\r\n\t\t\t_imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoadImageComplete );\r\n\t\t\t_imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError );\r\n\t\t\t_imageLoader.loadBytes( ba );\r\n\t\t}\r\n\r\n\t\t\/\/ Tracer\r\n\t\tprivate function displayIFD( ifd:IFD ):void\r\n\t\t{\r\n\t\t\ttrace( &quot; --- &quot; + ifd.level + &quot; --- &quot; );\r\n\t\t\tfor ( var entry:String in ifd )\r\n\t\t\t{\r\n\t\t\t\ttrace( entry + &quot;: &quot; + ifd[ entry ]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t\/\/ ImageLoaded\r\n\t\tprivate function onLoadImageComplete( e:Event ):void\r\n\t\t{\r\n\t\t\timageForBitmapData( _imageLoader.content as Bitmap );\r\n\t\t\tdispatchEvent( new Event( &quot;imageselect_done&quot; ));\r\n\t\t}\r\n\t\t\r\n\t\t\/\/ Cancel\r\n\t\tprivate function onCaptureCanceled( e:Event ):void\r\n\t\t{\r\n\t\t\tdispatchEvent( new Event( &quot;canceled_imageselect&quot; ));\r\n\t\t}\r\n\t\t\r\n\t\t\/\/ Error\r\n\t\tprivate function cameraError( e:ErrorEvent ):void\r\n\t\t{\r\n\t\t\tdispatchEvent( new Event( &quot;camera_error&quot; ));\r\n\t\t}\r\n\r\n\r\n\r\n\r\n\t\t\/\/ ----------- Image for BitmapData -------------------------------------- \/\r\n\t\tprivate function imageForBitmapData( bm:Bitmap ):void\r\n\t\t{\r\n\t\t\t_image = bm.bitmapData.clone();\r\n\t\t\t_imageLoader = null;\r\n\t\t}\r\n\r\n\r\n\r\n\t\t\/\/ ----------- Image Export -------------------------------------- \/\r\n\t\tpublic function resizedImage( w:Number, h:Number ):BitmapData\r\n\t\t{\r\n\t\t\tvar image:BitmapData = new BitmapData( 640, 960, false, 0 );\r\n\t\t\tvar ratio:Number = 1;\r\n\t\t\tvar matrix:Matrix;\r\n\t\t\tvar ofsetY:Number;\r\n\r\n\t\t\tif( imageOrientation == 1)\r\n\t\t\t{\r\n\t\t\t\tratio = 640 \/ _image.width;\r\n\t\t\t\tofsetY = ( 960 - _image.height * ratio ) * .5;\r\n\t\t\t\tmatrix = new Matrix( ratio, 0, 0, ratio );\r\n\t\t\t\tmatrix.translate( 0, ofsetY );\r\n\t\t\t}\r\n\t\t\telse if( imageOrientation == 3  )\r\n\t\t\t{\r\n\t\t\t\tratio = 640 \/ _image.width;\r\n\t\t\t\tofsetY = ( 960 - _image.height * ratio ) * .5;\r\n\t\t\t\tmatrix = new Matrix( ratio, 0, 0, ratio );\r\n\t\t\t\tmatrix.rotate( Math.PI );\r\n\t\t\t\tmatrix.translate( 640, _image.height * ratio + ofsetY );\r\n\t\t\t}\r\n\t\t\telse if( imageOrientation == 6  )\r\n\t\t\t{\r\n\t\t\t\tratio = 960 \/ _image.width;\r\n\t\t\t\t\r\n\t\t\t\tmatrix = new Matrix( ratio, 0, 0, ratio );\r\n\t\t\t\tmatrix.rotate( Math.PI \/ 180 * 90 );\r\n\t\t\t\tmatrix.translate( 640, 0 );\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tratio = 640 \/ _image.width;\r\n\t\t\t\tofsetY = ( 960 - _image.height * ratio ) * .5;\r\n\t\t\t\tmatrix = new Matrix( ratio, 0, 0, ratio );\r\n\t\t\t\tmatrix.translate( 0, ofsetY );\r\n\t\t\t}\r\n\r\n\r\n\t\t\timage.draw( _image, matrix, null, null, null, true );\r\n\t\t\t_image.dispose();\r\n\r\n\t\t\treturn image;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\/\/\r\nclass SingletonEnforcer\r\n{\r\n}\r\n<\/pre>\n<p>\u3042\u3001\u3061\u306a\u307f\u306b\u3053\u306e\u30b3\u30fc\u30c9\u3067 Android \u7aef\u672b\u3067\u3082\u8a66\u3057\u3066\u307f\u305f\u306e\u3067\u3059\u304c\u3001iPhone \u3068\u540c\u69d8\u306b Exif \u304c\u53d6\u5f97\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<div class='wp_social_bookmarking_light'>        <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=https%3A%2F%2Fwww.digifie.jp%2Fblog%2Farchives%2F1092&t=iPhone%20%E3%81%A7%E6%92%AE%E5%BD%B1%E3%81%97%E3%81%9F%E5%86%99%E7%9C%9F%E3%81%AE%20Exif%20%E3%82%92%20AIR%20for%20iOS%20%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A1%E3%83%A2' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='https:\/\/www.digifie.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>        <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.digifie.jp\/blog\/archives\/1092\" data-text=\"iPhone \u3067\u64ae\u5f71\u3057\u305f\u5199\u771f\u306e Exif \u3092 AIR for iOS \u3067\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u30e1\u30e2\" data-via=\"LLC DigiFie\" data-lang=\"ja\">Tweet<\/a><\/div><\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>AIR for iOS \u3067\u4f5c\u6210\u3057\u3066\u3044\u308b\u30a2\u30d7\u30ea\u3067\u3001iPhone \u3067\u64ae\u5f71\u3057\u305f\u5199\u771f\u306e\u5411\u304d\u3092\u8abf\u3079\u308b\u305f\u3081 Exif \u3092\u53d6\u5f97\u3057\u3088\u3046\u3068\u3057\u305f\u3089\u3001\u4e88\u60f3\u4ee5\u4e0a\u306b\u624b\u3053\u305a\u3063\u3066\u3072\u3069\u3044\u76ee\u306b\u906d\u3063\u305f\u306e\u3067\u5fd8\u308c\u306a\u3044\u3088\u3046\u306b\u30e1\u30e2\u3002 JPEG \u753b\u50cf\u304b\u3089 Exif  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,31,30],"tags":[],"_links":{"self":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1092"}],"collection":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/comments?post=1092"}],"version-history":[{"count":18,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1092\/revisions"}],"predecessor-version":[{"id":1135,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1092\/revisions\/1135"}],"wp:attachment":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/media?parent=1092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/categories?post=1092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/tags?post=1092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}