从Android中的服务器下载时出现90度倾斜的图像?

在一个应用程序中捕获图像并通过服务器上传。 应用程序是在Android和我的电话 。 当我们发布来自Android的图像时,它们的数量是千字节,但是当我们从我手机发布图像时,它们是MB大小。

当我们从IPHONE 5上发布的带有浏览器URL的图像时,它们显得不错,因为它们应该会出现,但是当我们将该图像下载到Android设备并显示在图像视图中时,它们显示在左侧90度。

我没有使用任何旋转代码在Android或在我的手机下载图像后。

在我手机的图像显示正常。

从Android中捕获的图像也是直接可见的。 从Android手机的低分辨率捕获图像也可以直接在Android中看到。

从Android上传的图片:

https://s3.amazonaws.com/WeddingApp/Weddingimage/933_6_stan.jpg 

从I电话上传的图像:

 https://s3.amazonaws.com/WeddingApp/Weddingimage/937_6_stan.jpg public static boolean downloadFile(final String fileURL,File directory,Context CONTEXT){ try{ URL url = new URL(fileURL); URLConnection ucon = url.openConnection(); ucon.setReadTimeout(35000); ucon.setConnectTimeout(10000); InputStream is = ucon.getInputStream(); BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); File file = directory; if (file.exists()) { file.delete(); } file.createNewFile(); FileOutputStream outStream = new FileOutputStream(file); byte[] buff = new byte[5 * 1024]; int len; while ((len = inStream.read(buff)) != -1) { outStream.write(buff, 0, len); } outStream.flush(); outStream.close(); inStream.close(); } catch (IOException e){ //IF SDCARD NOT EXIST THEN PASS RESPONSE TRUE` e.printStackTrace(); return false; }catch(Exception e){ e.printStackTrace(); return false; } return true; } 

请build议我。

Solutions Collecting From Web of "从Android中的服务器下载时出现90度倾斜的图像?"

这个问题似乎与图像上的EXIF数据有关。 我们必须在显示图像之前处理它。 这似乎是不是每个摄像机输出EXIF数据“因为这个问题只发生在我的一些Android手机。 看看: http : //commons.wikimedia.org/wiki/Commons : Exif#Orientation_.28rotation_and_mirroring.29

编辑:我们可以实现像这样的东西:

 public Bitmap getBitmap(String path){ Bitmap tmpBitmap = BitmapFactory.decodeFile(path); Bitmap bitmap = null; if(path != null){ try { ExifInterface ei = new ExifInterface(path); int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); Matrix mtx = new Matrix(); int w = tmpBitmap.getWidth(); int h = tmpBitmap.getHeight(); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: //rotate CCW mtx.preRotate(-90); bitmap = Bitmap.createBitmap(tmpBitmap, 0, 0, w, h, mtx, true); break; case ExifInterface.ORIENTATION_ROTATE_270: //rotate CW mtx.preRotate(90); bitmap = Bitmap.createBitmap(tmpBitmap, 0, 0, w, h, mtx, true); break; //CONSIDER OTHER CASES HERE.... default: bitmap = tmpBitmap; break; } } catch (Exception e) { e.printStackTrace(); } } return bitmap; } 

问候。

这是因为iPhone的傻相机实施。 我发现下面的研究(来源如下):

1. iPhone摄像头对“向上”方向的解释是从我们所知的实际“向上”方向旋转90度。 你和我所说的“起来”,是iphone的“左”或“右”。 相机的方向已经改变。 这样做是为了支持用音量button拍照。

2.但是,在知道其他设备和相机具有正常的方向,并且这些设备和浏览器正确地显示图像的情况下,iOS向上传的图像添加EXIF数据。 这是在图片上传中添加的。 链接中提到的EXIF是一个元数据,其中包含图像实际应该如何显示的所有信息。

3.下载图像的目标平台应该读取EXIF数据,然后显示图像的正确表示。 因此,如果目标平台读取EXIF,则会意识到接收到的图像是90度旋转的,而且它应该依赖EXIF数据,而不是接收到的数据。 这就是为什么iPhone相机应用程序可以正确显示图像。

4然而,并不是每个人都读EXIF。 知道EXIF的应用程序和浏览器读取图像的EXIF数据并正确显示。 但是,那些不知道EXIF的,不要读取这些数据,并显示图像完全接收 – > 90度旋转

5人们已经解决了这个问题,在拍摄照片之前将他们的iPhone旋转90度(使照相机朝向正确,拍摄照片之前)

资源:

1. 来源1

2. 来源2

其他同样的问题:

1. SOpost1

2. SO贴2