项目需求。
因为项目中需要对拍照之后的图片进行上传。
(这也是一个简单的问题)
但是就是三星手机(三星note3),出现拍照之后照片旋转了九十度。
然后我们上传上去,然后通过其他手机请求url再次显示还是旋转过的。

说说我们解决问题的路径。
1.
起初以为我们上传照片的时候就是旋转过了的,但是查看图片所在的位置,结果发现图片是正的。
那么是为什么再次下载图片还是旋转的,我们就想到了
这个类ExifInterface 这个类可以获得图片一些信息
1.旋转角度
2.时间
反正就是有很多图片的信息啦。
参考:
ExifInterface更多信息
这里最重要的可能都是旋转角度了。
我们怎么能获取角度了?

   public static int readPictureDegree(String path) {int degree = 0;try {ExifInterface exifInterface = new ExifInterface(path);int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);switch (orientation) {case ExifInterface.ORIENTATION_ROTATE_90:degree = 90;break;case ExifInterface.ORIENTATION_ROTATE_180:degree = 180;break;case ExifInterface.ORIENTATION_ROTATE_270:degree = 270;break;}} catch (IOException e) {e.printStackTrace();}return degree;}

以上的代码可以看出来,通过图片的路径可以获取到。
大家可能猜到下一步干什么了?
既然我们可以获取角度,那么我们为什么不能改角度,因为文件中是正的,下载下来也是正的,为什么显示的时候出现旋转,估计就是因为这个旋转属性的问题 了(我是猜想哦)
那么我们就尝试着更改属性。

 ExifInterface exifInterface = new ExifInterface(path);exifInterface.setAttribute(exifInterface.TAG_ORIENTATION, String.valueOf(exifInterface.ORIENTATION_ROTATE_90));exifInterface.saveAttributes();

再次旋转九十度试试,结果那还是什么变化都没有,我擦(我那个气啊)
属性值的确是改了,但是就是没有旋转。(大家可以自行尝试一下,验证一下)

2.
那我就只能用其他方法了(被逼的,这里顺带说一下我们老板让我把图片的大小压缩一下,因为我们每次都需要上传图片,可能需要耗费很多流量,而且有非常慢,这里我们也优化一下,一举两得)

这里可以看下我前面怎么处理图片缩放比例的

第一个方法:
calculateInSampleSize 搜索这个方法
这个方法就是缩放比例。
第二个方法:
因为图片旋转我们需要判断角度需要用到上面的readPictureDegree方法
第三个方法:
既然知道角度了我们就要把图片旋转过来,那么怎么旋转啦?

 /*** 旋转图片** @param bitmap* @param rotate* @return*/private static Bitmap rotateBitmap(Bitmap bitmap, int rotate) {if (bitmap == null)return null;int w = bitmap.getWidth();int h = bitmap.getHeight();// Setting post rotate to 90Matrix mtx = new Matrix();mtx.postRotate(rotate);return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);}

然后怎么办?
因为我们上传一般都是根据文件上传的(File),
那么我们把旋转之后bitmap写入到文件中去。

  /*** 添加图片到sd卡并规定压缩比例,100默认原图*/public static File saveBitmap(Bitmap bitmap, String savePath, int quality) {if (bitmap == null)return null;try {File f = new File(savePath);if (f.exists()) f.delete();FileOutputStream fos = new FileOutputStream(f);f.createNewFile();// 把Bitmap对象解析成流bitmap.compress(Bitmap.CompressFormat.JPEG, quality, fos);Log.d("bitmap", bitmap.getRowBytes() + "");fos.flush();fos.close();bitmap.recycle();return f;} catch (IOException e) {e.printStackTrace();bitmap.recycle();return null;}}

最后我们是这么组装的。

 public static File getSmallBitmap(String filePath) {final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(filePath, options);// Calculate inSampleSizeoptions.inSampleSize = calculateInSampleSize(options, 480, 800);// Decode bitmap with inSampleSize setoptions.inJustDecodeBounds = false;Bitmap bm = BitmapFactory.decodeFile(filePath, options);if (bm == null) {return null;}int degree = readPictureDegree(filePath);bm = rotateBitmap(bm, degree);return saveBitmap(bm, filePath, 70);}

我们缩放规格是480X800 所以就写的是固定的。70是我们压缩比例。

以上都是我们解决三星图片旋转的问题了。
在此感谢我们的卢浩小同学的帮助。

三星手机拍照,上传照片或者下载导致图片旋转90°的解决办法。相关推荐

  1. exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4之前的版本 )

    exif.js解决ios手机上传照片后显示为旋转90度问题(兼容ios13.4 ) 问题描述: 在做手机移动端app时,发现iOS12.5.1版本(iphone6)上传照片出现顺时针旋转90问题,ip ...

  2. tftp在put上传的时候显示File not found的解决办法

    tftp在put上传的时候显示File not found的解决办法 在linux下,不管使用的是哪一种super-server,inetd或者xinetd,默认情况下TFTP服务是禁用的,所以要修改 ...

  3. 织梦Dede上传软件提示“你指定要上传的文件或文件大小超过限制”的解决办法

    织梦DedeCMS提示"你指定要上传的文件或文件大小超过限制"的解决办法 时间:2014-09-28 来源:互联网 作者:网络 阅读:1598次 如图所示,出现此情况的原因主要如下 ...

  4. springboot上传大文件时内存溢出的可能解决办法

    springboot上传大文件时内存溢出的可能解决办法 在springboot中上传大文件时要考虑内存的情况,一般我们会通过在执行服务时加入-Xms512m -Xmx512m等参数加大堆内存,但这是指 ...

  5. android 拍照上传照片(新)

    前段时间写过一片关于照片上传的文章,但是后来发现用那种方式上传的图片是经过android系统处理过的,并不是原图,也就是说经过压缩过的,图片会变得很小,今天我就是为了解决这个问题用另外一种方式实现. ...

  6. uniapp h5拍照上传照片

    前段时间公司要弄一个uniapp的H5拍照上传的功能,看这位博主 常德_威少 的博客完成了(博客地址:使用canvas压缩图片大小_常德_威少的博客-CSDN博客_canvas压缩图片),于是想把我写 ...

  7. idea上传代码到gitee出现的问题及解决办法

    第一次上传代码到gitee,如果按照网上的办法直接上传,会出现很多问题.本人虽然以前使用过gitee上传代码,但是那是在别人的帮助下进行的,而自己首次独立创建仓库,上传代码确出现了很多问题,现在把遇到 ...

  8. android 拍照上传照片

    废话不多说,直接进入主题,想要在android中实现拍照最简单饿方法就是New 一个 Intent 设置Action为android.media.action.IMAGE_CAPTURE 然后使用st ...

  9. phonegap 拍照上传照片

    js代码 可以完全从  phonegap 官网扣下来 使用的是2.3版本的phonegap<script type="text/javascript" src="c ...

最新文章

  1. Jquery循环截取字符串(多出的字符串处理成...)
  2. linux shell 字符串作变量名 间接变量引用
  3. HDU 2564 饭卡
  4. IT从业者必备的十五种能力
  5. SGU247(排列组合与大数运算)
  6. JVM调优——之CMS GC日志分析
  7. 我们在雪地撒野——51cto众人滑雪图片集
  8. 超炫酷的枪械3D动图,喜欢的不得了!
  9. php设置超链接,怎么给一个PHP密码访问页面加超链接
  10. 一起学习C语言:结构体(二)
  11. hdu 5154 Harry and Magical Computer
  12. Cabloy-CMS:动静结合,解决Hexo痛点问题
  13. hdu 2553 N皇后问题
  14. vs2005中分割线怎么插入
  15. PP助手推大数据智能分发服务
  16. 如何在云服务器搭建虚拟主机,如何在云服务器搭建虚拟主机
  17. url 与 domain
  18. Hard Swish激活函数
  19. asp.net 获得根文件夹在服务器上物理路径,asp.net获取网站目录物理路径
  20. 在Keil4中新建51单片机工程模板详细步骤

热门文章

  1. python-faker模块使用
  2. glc四驱软件测试,新款奔驰GLC四驱无法脱困,奔驰官方解释“亮”了
  3. 4g运行内存手机还能用多久_运行内存4g够用吗_2017年4g运行内存的手机够用么
  4. 硕士女程序员相亲被拒,晒出征婚条件,网友:这是花钱娶祖宗?
  5. C#_串口调试助手-网络拓扑显示
  6. python 判断三角形
  7. 计算机上的符号并不代表分数,Excel里轻松插入分数、符号和特殊字符
  8. 服务器支持的网上银行系统列表,兴业银行欢迎您
  9. 利用EQEP实现编码器的位置与转速测量
  10. js装修计算器java代码_JS制作简易计算器的实例代码