Articles of exif

Android:从URI获取EXIF旋转

我想找出图片的EXIF旋转。 当图片显示在图库中时,图片不会旋转,但在用EXIF信息“向左旋转”加载图像后,图片会显示为旋转。 现在我想问用户,如果他想使用旋转的图像或原件。 我得到一个Uri的方法,并将其存储在一个位图 InputStream inputStream = PaintroidApplication.applicationContext.getContentResolver().openInputStream(bitmapUri); BitmapFactory.decodeStream(inputStream, null, options); inputStream.close(); 现在我想使用ExifInterface来确定旋转,但是ExifInterface需要一个path: ExifInterface exif = new ExifInterface(bitmapUri.getPath()); rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 现在我遇到了path问题,logcat显示以下消息: E / JHEAD:无法打开'/ document / image:15035' 我该如何解决这个问题或者是否有其他解决scheme来查找EXIF信息?

Android将EXIF GPS纬度和经度写入JPEG失败

我想添加GPS数据,如经度和纬度到JPEG照片。 通过标签卡(NFC)捕获照片在logcat中可以显示正确的值,但是这些值不能写入jpg照片文件! 下面是我的代码:它用于保存jpg文件并调用下面的方法该方法用于将EXIF GPS参数添加到jpg中GPS参数(如经度和纬度)已在另一个活动中使用。 我在Firefox中使用EXIF Viewer来查看结果。 IOexception的位置是否重要? 以下是可能导致失败的重要日志猫日志:07-26 11:48:30.386:D / NativeNfcTag(195):标记丢失,重新启动轮询循环 public static void writeFile (File photo, double latitude, double longitude) throws IOException{ ExifInterface exif = null; try{ Log.v("latiDouble", ""+latitude); Log.v("longiDouble", ""+longitude); exif = new ExifInterface(photo.getCanonicalPath()); if (exif != null) { double latitu = latitude; double longitu = longitude; double alat = Math.abs(latitu); double along […]

设置Android照片EXIF方向

我写了一个Android活动,以编程方式捕获照片。 我想用正确的EXIF方向数据将图像保存为JPEG格式(就像原生Android Camera应用程序自动执行一样)。 这里是实际拍摄照片的方法(我删除了try / catch块): private void takePhoto() { camera = Camera.open(); SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0); camera.setPreviewTexture(dummySurfaceTexture); camera.startPreview(); camera.takePicture(null, null, jpgCallback); } …和callback: private Camera.PictureCallback jpgCallback = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { releaseCamera(); savePhoto(data); }; 照片拍摄正确,但我的问题是,EXIF数据显示方向设置为“图像方向:顶部,左手”,无论设备的方向如何,所以当我上传照片时,它看起来倒过来或旋转。 我是否真的需要手动捕捉设备方向(滚动,俯仰,方位angular)并自己写EXIF方向? 相机应用程序如何自动正确地写入这些数据? 有谁知道正确设置此属性的方法吗? 编辑:我不能使用屏幕方向作为活动被locking到肖像模式。

从图像中删除或更新exif缩略图

无论如何,从图像中删除exif缩略图吗? 我在我的应用程序中裁剪图像,并复制所有与sanselan库无损的exif数据。 之后,我相应地更新宽度/高度/旋转。 我找不到任何方法来更新exif缩略图或删除它,任何想法如何做到这一点?

如何将ExifInterface与stream或URI一起使用

我正在编写一个应用程序,可以从Android的“通过共享”菜单发送照片URI。 你得到的URItypes是content://media/external/images/media/556但是ExifInterface一个标准的文件名。 那么如何读取该文件的Exif数据(我只想定位)呢? 这是我的(非工作)代码: Uri uri = (Uri)extras.getParcelable(Intent.EXTRA_STREAM); ContentResolver cr = getContentResolver(); InputStream is = cr.openInputStream(uri); Bitmap bm = BitmapFactory.decodeStream(is); // This line doesn't work: ExifInterface exif = new ExifInterface(uri.toString()); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); 任何帮助(除了“你必须写你自己的ExifInterface类”)赞赏!

Android中写入/地理标记JPEG(EXIF数据)

我想做的事: 使用我自己的PictureActivity *拍摄照片并添加EXIF(地理标签)数据 *:实现SurfaceHolder.Callback并使用Camera 什么不工作: 添加EXIF GPS数据 我试过了: 使用ExifInterface并手动设置Camera.Parameters (具有设置GPS元数据的特定方法以及使用params.set(String, Value) )。 我使用FlickrJ将图片上传到Flickr(是的,我已经设置Flickr导入GPS数据 – 其他图片工作正常),但是这个工具也说在EXIF中没有GPS数据: http://正则expression式。信息/ exif.cgi 我错过了什么? (Android 2.2,HTC Desire) 编辑: – 相机设置为Geotag photos: On – 我已经尝试过硬编码的虚拟GPS位置 这里是手动设置参数的代码(在使用和不使用GPS数据的情况下尝试,也可以使用set(String, Value) ): @Override public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); Camera.Parameters p = mCamera.getParameters(); p.setPreviewSize(p.getPreviewSize().width, p.getPreviewSize().height); Log.e("PictureActivity", "EXIF: "+AGlanceLocationListener.getLatitude()); p.removeGpsData(); p.setGpsLatitude( AGlanceLocationListener.getLatitude() ); p.setGpsLongitude( AGlanceLocationListener.getLongitude() […]

Android ExifInterface saveAttributes()不覆盖以前的数据?

我试图在我的自定义相机应用程序中将经纬度和其他数据写入jpeg的Exif头。 通常情况下,android自动使用光圈,ISO,快门速度等数据填充标题。但是,当我手动添加创build一个ExifInterface实例,设置GPS位置SetAttributes() ,并调用SaveAttributes() ; 所有其他相机数据消失。 这是否应该发生? 我怎样才能简单地添加一个标签而不覆盖其他所有东西? 我在其他地方看到了创build两个ExifInterfaces的例子,一个是旧的(来自图片)和一个新的,并将每个从旧到新的填充值与其他数据一起复制。 然而,这是令人讨厌和冗长的。 我想find一个更好的解决scheme。 这是我的代码: try{ ExifInterface exif = new ExifInterface(pictureFile.getAbsolutePath()); exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, mGpsLocation.getLatDms()); exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, mGpsLocation.getLonDms()); exif.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, mGpsLocation.getAltDms()); exif.saveAttributes(); } catch(IOException e){ e.printStackTrace(); } 谢谢

如何在Android中写入Exif数据到图像?

我正在尝试在使用exif界面的Android应用程序User_Comment和TAG_GPS写入捕获的图像,但由于某些原因,当我在图库中查看图像的详细信息时,标签似乎不会附加到图像上。 看起来,也许标签没有被写入捕获的图像,因为文件path可能是错误的。 我认为这可能是因为我已经写了标签到一个不正确的图像path。 有没有人知道,如果他们的方式,我写标签的形象是一个问题? 这是下面的@ Charlie更改后保存exif数据的代码: private File getOutputPhotoFile() throws IOException { File directory = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), getPackageName()); if (!directory.exists()) { if (!directory.mkdirs()) { Log.e(TAG, "Failed to create storage directory."); return null; } } String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ENGLISH).format(new Date()); File[] files = directory.listFiles(); File exifVar = new File(directory.getPath(), "IMG_" + timeStamp + […]

Android:将GPSTimeStamp放入jpg EXIF标签

我想通过android设置“GPSTimeStamp”到jpg的exif标签。 这个文档非常稀less: http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMPtypes是string。 常量值:“GPSTimeStamp”。 但确切的格式是什么? 看这里: http : //www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html GPSTimeStamp:rational64u [3](写入时,date被剥离,如果存在的话,时间调整为UTC,如果它包括一个时区) 所以我需要一个很长的值3单元arrays? 我不知道该input什么。我已经获得了“这个修复的UTC时间,以1970年1月1日以来的毫秒数”。 通过location.gettime()。 http://developer.android.com/reference/android/location/Location.html#getTime%28%29 如果我将long值作为string写入Timestamp,并在Linux上通过“exif”检查exif标记,则会出现“预计分母”的错误。 所有使用hh:mm:ss或其他格式的实验都失败了。 在这里有点失落

有关如何从URI获取Exif数据的最终答案

这个主题已经在这里讨论了很多问题,结果大不相同,由于API的变化和不同types的URI, 没有明确的答案 。 我自己没有答案,但我们来谈谈。 ExifInterface有一个接受filePath构造函数。 这本身是令人讨厌的,因为现在不鼓励依赖path – 你应该使用Uri和ContentResolver 。 好。 我们可以从onActivityResult (如果从ACTION_GET_CONTENT从图库中select图片)的意图中获取我们的Uri命名的uri或者可以是我们以前拥有的Uri (如果您从相机中选取图片并调用intent.putExtra(MediaStore.EXTRA_OUTPUT, uri) )。 API <19 我们的uri可以有两种不同的模式: 来自相机的Uris大多会有一个file:// schema。 那些很容易对待,因为他们持有的path。 你可以调用new ExifInterface(uri.getPath()) ,你就完成了。 来自画廊或其他内容提供商的Uris通常具有content://接口。 我个人不知道这是关于什么的,但却让我发疯。 据我所知,第二种情况应该使用Context.getContentResolver()获得的ContentResolver处理。 以下内容适用于我testing过的所有应用程序,无论如何: public static ExifInterface getPictureData(Context context, Uri uri) { String[] uriParts = uri.toString().split(":"); String path = null; if (uriParts[0].equals("content")) { // we can use ContentResolver. // let's query […]