Android 部分手机拍照后获取的图片被旋转
三星手机拍摄后的照片被旋转了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 部分手机拍照后获取的图片被旋转相关推荐
- android 自动相机 图片旋转问题,Android部分手机拍照后获取的图片被旋转问题的解决方法...
调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的.其它品牌的手机都是正常的,就三星出现这个怪事. 在Android适配上,我原来一直以为国内 ...
- android上传图片被旋转,解决android有的手机拍照后上传图片被旋转的问题
需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的 ...
- 解决android有的手机拍照后上传图片被旋转的问题
需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的 ...
- android 小米相册无法获取,适配小米华为手机等拍照后获取不到照片
问题摘要:适配小米华为手机等拍照后获取不到照片 出现场景 普通的相机调用,在 intent 传进去一个路径,然调用这个意图. 在测试机 荣耀 8x 上是没有问题的,能获取到拍的照片. 在小米系统和 华 ...
- android获得图片的坐标,Android百度地图定位后获取周边位置的实现代码
本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 android:orientation="vertic ...
- android 自定义相册选择,Android通过手机拍照或从本地相册选取图片设置头像
像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1.让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2.让用户启动手机的相机拍照,拍完照片后裁剪 ...
- android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解
Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...
- Android开发之拍照后图片旋转的问题
经过测试,国产手机拍照无问题,国外手机拍照后自动选装90度了看图:主要有Google手机和三星手机都会有这个问题 解决办法也很简单说下思路: 首先获取图片被旋转的角度然后通过matrix.postRo ...
- Android手机拍照后存储高清原图
Android手机中调用系统相机进行拍照的操作很简单: 1.调用系统相机 Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CA ...
最新文章
- 钢结构节点输出软件_BIM助力桥梁钢结构设计施工一体化建设
- win7电脑蓝牙 耳机
- Java从零开始学四十六(Junit)
- 拖尾因子大怎么调整_乳房松弛下垂怎么改善?怎么快速调整乳房松弛下垂?
- 程序员食品营养(1)-面包基础
- [Flexbox] Using order to rearrange flexbox children
- python学习day33 hmac模块 socketserver模块
- python的猴子补丁monkey patch
- mac os 录屏快捷键_录制视频软件哪个好用?分享专业的录屏神器
- 检验检测机构LIMS系统应用
- python属于什么类型的选修课_河北大学python选修课00次作业
- 8421BCD码的加6修正的原因
- evolution ubuntu邮箱_Ubuntu evolution 邮件客户端配置详解(图)
- python 如何使用正则表达式
- FFMpeg打开文件报错:Invalida data found when processing input
- 项目组长成长记(一)
- IPFS云服务器预售登录系统,北宁ipfs云算力预售,IPFS社区社区
- 支持幻灯片演示的思维导图软件NovaMind
- 上证指数预测之python建模与动态时间扭曲
- [Python3]批量修改图片尺寸