三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的。。。其它品牌的手机都是正常的,就三星出现这个怪事。

解决办法是获取到拍照后照片被旋转的角度,再旋转回去就好了。

在获取相机返回的回调方法onActivityResult()中,修复被旋转的图片并取得修复后的图片路径,有了这个路径后就可以展示出来了

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);// 获取相机拍照返回if (resultCode == Activity.RESULT_OK && requestCode == OPEN_CAMERA) {// 得到修复后的照片路径String filepath = PhotoBitmapUtils.amendRotatePhoto(fileName, getContext());}}

PhotoBitmapUtils类:

package framework.widgets.camera;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.os.Environment;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;/*** 集合一些图片工具**/
public class PhotoBitmapUtils {/*** 存放拍摄图片的文件夹*/private static final String FILES_NAME = "/MyPhoto";/*** 获取的时间格式*/public static final String TIME_STYLE = "yyyyMMddHHmmss";/*** 图片种类*/public static final String IMAGE_TYPE = ".png";// 防止实例化private PhotoBitmapUtils() {}/*** 获取手机可存储路径** @param context 上下文* @return 手机可存储路径*/private static String getPhoneRootPath(Context context) {// 是否有SD卡if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)|| !Environment.isExternalStorageRemovable()) {// 获取SD卡根目录return context.getExternalCacheDir().getPath();} else {// 获取apk包下的缓存路径return context.getCacheDir().getPath();}}/*** 使用当前系统时间作为上传图片的名称** @return 存储的根路径+图片名称*/public static String getPhotoFileName(Context context) {File file = new File(getPhoneRootPath(context) + FILES_NAME);// 判断文件是否已经存在,不存在则创建if (!file.exists()) {file.mkdirs();}// 设置图片文件名称SimpleDateFormat format = new SimpleDateFormat(TIME_STYLE, Locale.getDefault());Date date = new Date(System.currentTimeMillis());String time = format.format(date);String photoName = "/" + time + IMAGE_TYPE;return file + photoName;}/*** 保存Bitmap图片在SD卡中* 如果没有SD卡则存在手机中** @param mbitmap 需要保存的Bitmap图片* @return 保存成功时返回图片的路径,失败时返回null*/public static String savePhotoToSD(Bitmap mbitmap, Context context) {FileOutputStream outStream = null;String fileName = getPhotoFileName(context);try {outStream = new FileOutputStream(fileName);// 把数据写入文件,100表示不压缩mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);return fileName;} catch (Exception e) {e.printStackTrace();return null;} finally {try {if (outStream != null) {// 记得要关闭流!outStream.close();}if (mbitmap != null) {mbitmap.recycle();}} catch (Exception e) {e.printStackTrace();}}}/*** 把原图按1/10的比例压缩** @param path 原图的路径* @return 压缩后的图片*/public static Bitmap getCompressPhoto(String path) {BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = false;options.inSampleSize = 4;  // 图片的大小设置为原来的四分之一Bitmap bmp = BitmapFactory.decodeFile(path, options);options = null;return bmp;}/*** 处理旋转后的图片* @param originpath 原图路径* @param context 上下文* @return 返回修复完毕后的图片路径*/public static String amendRotatePhoto(String originpath, Context context) {// 取得图片旋转角度int angle = readPictureDegree(originpath);// 把原图压缩后得到Bitmap对象Bitmap bmp = getCompressPhoto(originpath);;// 修复图片被旋转的角度Bitmap bitmap = rotaingImageView(angle, bmp);// 保存修复后的图片并返回保存后的图片路径return savePhotoToSD(bitmap, context);}/*** 读取照片旋转角度** @param path 照片路径* @return 角度*/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;}/*** 旋转图片* @param angle 被旋转角度* @param bitmap 图片对象* @return 旋转后的图片*/public static Bitmap rotaingImageView(int angle, Bitmap bitmap) {Bitmap returnBm = null;// 根据旋转角度,生成旋转矩阵Matrix matrix = new Matrix();matrix.postRotate(angle);try {// 将原始图片按照旋转矩阵进行旋转,并得到新的图片returnBm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);} catch (OutOfMemoryError e) {}if (returnBm == null) {returnBm = bitmap;}if (bitmap != returnBm) {bitmap.recycle();}return returnBm;}
}

Android 部分手机拍照后获取的图片被旋转相关推荐

  1. android 自动相机 图片旋转问题,Android部分手机拍照后获取的图片被旋转问题的解决方法...

    调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的.其它品牌的手机都是正常的,就三星出现这个怪事. 在Android适配上,我原来一直以为国内 ...

  2. android上传图片被旋转,解决android有的手机拍照后上传图片被旋转的问题

    需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的 ...

  3. 解决android有的手机拍照后上传图片被旋转的问题

    需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的 ...

  4. android 小米相册无法获取,适配小米华为手机等拍照后获取不到照片

    问题摘要:适配小米华为手机等拍照后获取不到照片 出现场景 普通的相机调用,在 intent 传进去一个路径,然调用这个意图. 在测试机 荣耀 8x 上是没有问题的,能获取到拍的照片. 在小米系统和 华 ...

  5. android获得图片的坐标,Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 android:orientation="vertic ...

  6. android 自定义相册选择,Android通过手机拍照或从本地相册选取图片设置头像

    像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1.让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2.让用户启动手机的相机拍照,拍完照片后裁剪 ...

  7. android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解

    Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...

  8. Android开发之拍照后图片旋转的问题

    经过测试,国产手机拍照无问题,国外手机拍照后自动选装90度了看图:主要有Google手机和三星手机都会有这个问题 解决办法也很简单说下思路: 首先获取图片被旋转的角度然后通过matrix.postRo ...

  9. Android手机拍照后存储高清原图

    Android手机中调用系统相机进行拍照的操作很简单: 1.调用系统相机 Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CA ...

最新文章

  1. 钢结构节点输出软件_BIM助力桥梁钢结构设计施工一体化建设
  2. win7电脑蓝牙 耳机
  3. Java从零开始学四十六(Junit)
  4. 拖尾因子大怎么调整_乳房松弛下垂怎么改善?怎么快速调整乳房松弛下垂?
  5. 程序员食品营养(1)-面包基础
  6. [Flexbox] Using order to rearrange flexbox children
  7. python学习day33 hmac模块 socketserver模块
  8. python的猴子补丁monkey patch
  9. mac os 录屏快捷键_录制视频软件哪个好用?分享专业的录屏神器
  10. 检验检测机构LIMS系统应用
  11. python属于什么类型的选修课_河北大学python选修课00次作业
  12. 8421BCD码的加6修正的原因
  13. evolution ubuntu邮箱_Ubuntu evolution 邮件客户端配置详解(图)
  14. python 如何使用正则表达式
  15. FFMpeg打开文件报错:Invalida data found when processing input
  16. 项目组长成长记(一)
  17. IPFS云服务器预售登录系统,北宁ipfs云算力预售,IPFS社区社区
  18. 支持幻灯片演示的思维导图软件NovaMind
  19. 上证指数预测之python建模与动态时间扭曲
  20. [Python3]批量修改图片尺寸

热门文章

  1. 中国房价下跌序幕刚刚拉开
  2. websocket默认心跳等待300秒
  3. QT 样式表属性完整版
  4. Altera的IP核
  5. 论文:并行化 Metropolis-Hastings 算法的一般结构
  6. 2019高校运维赛writeup
  7. 中国法定节假日天数以及世界各国放假天数
  8. Android 汉字转拼音工具
  9. XSS challenges闯关笔记
  10. 甲骨文收购mysql,甲骨文提出十大保证 承诺收购Sun后会善待MySQL