解决android有的手机拍照后上传图片被旋转的问题
转至 http://blog.csdn.net/walker02/article/details/8211628
需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器
遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的是正的,这样问题就来了,不能用户发个照片在微博上看到的是被旋转了的啊,另外一个项目里旋转了的图片直接匹配出现问题,这个更严重。
解决:开始的时候在网上没有找到很好的解决办法,谷歌百度的搜了一通,想到第一种解决方式,当手机拍照结束,在返回结果处理里面立即跳转到一个新的页面,在新的页面里让用户自己手动去旋转图片,然后点击确定。就可以上传到服务器正着的图片了;第二种解决方式,这是在论坛里发现的一个方法,可以获取图片的属性,读取图片的旋转角度。
第一种方式代码:
在onActivityResult里面处理跳转
- <span style="font-size:18px;"> Intent intent = new Intent(SendMicoBlog.this, RotaingActivity.class);
- MyApp myApp = (MyApp)getApplication();
- myApp.setName(bitmap);//修改之后的名称
- myApp.setPhoto(isPhoto);
- startActivityForResult(intent, 1);</span>
在RotaingActivity里面就可以作相应的旋转处理了
- <span style="font-size:18px;"> //获取bitmap
- MyApp myApp = (MyApp)getApplication();
- bitmap = myApp.getName();
- System.out.println("RotaingActivity w = " + bitmap.getWidth() + "H = " + bitmap.getHeight());
- myBitmap = bitmap;
- myWidth = bitmap.getWidth();
- myHeight = bitmap.getHeight();
- // 创建操作图片用的matrix对象
- matrix = new Matrix();
- Drawable drawable = ImageDispose.bitmapToDrawable(bitmap);
- imageView.setBackgroundDrawable(drawable);
- btnCancel.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- RotaingActivity.this.finish();
- }
- });
- btnRightRotaing.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- myBitmap = rotaingImageView(-90);
- }
- });
- btnLeftRotaing.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- myBitmap = rotaingImageView(+90);
- }
- });
- btnOK.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- MyApp myApp = (MyApp)getApplication();
- myApp.setName(myBitmap);//修改之后
- System.out.println("OK resultcoder");
- Intent intent = new Intent(RotaingActivity.this, SendMicoBlog.class);
- setResult(6, intent);
- RotaingActivity.this.finish();
- }
- });
- }
- private Bitmap rotaingImageView(int angle2) {
- //旋转图片 动作
- matrix.postRotate(angle2);
- System.out.println("angle2=" + angle2);
- // 创建新的图片
- Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
- myWidth, myHeight, matrix, true);
- Drawable drawable = ImageDispose.bitmapToDrawable(resizedBitmap);
- imageView.setBackgroundDrawable(drawable);
- return resizedBitmap;
- }</span>
第二种方式:就简单多了,直接自己出偷着把照片给处理了,不需要用户的操作,这样体验会更好一点。
在onActivityResult里面处理
- BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
- bitmapOptions.inSampleSize = 8;
- File file = new File(SD_CARD_TEMP_DIR);
- /**
- * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转
- */
- int degree = ImageDispose.readPictureDegree(file.getAbsolutePath());
- <span style="font-size:18px;">Bitmap cameraBitmap = BitmapFactory.decodeFile(SD_CARD_TEMP_DIR, bitmapOptions);
- bitmap = cameraBitmap;
- /**
- * 把图片旋转为正的方向
- */
- bitmap = ImageDispose.rotaingImageView(degree, bitmap);
- upload(bitmap);</span>
- <span style="font-size:18px;"> /**
- * 旋转图片
- * @param angle
- * @param bitmap
- * @return Bitmap
- */
- public static Bitmap rotaingImageView(int angle , Bitmap bitmap) {
- //旋转图片 动作
- Matrix matrix = new Matrix();;
- matrix.postRotate(angle);
- System.out.println("angle2=" + angle);
- // 创建新的图片
- Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
- bitmap.getWidth(), bitmap.getHeight(), matrix, true);
- return resizedBitmap;
- }</span>
- /**
- * 读取图片属性:旋转的角度
- * @param path 图片绝对路径
- * @return degree旋转的角度
- */
- 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;
- }
解决android有的手机拍照后上传图片被旋转的问题的更多相关文章
- 部分Android或IOS手机拍照后照片被旋转的问题
1.我们平时手机拍的照片,传到电脑后,使用Photoshop或者其它图片浏览工具打开时,发现图片是被转过的.可是Windows上预览却是正的.其实原因是部分Android或IOS手机拍照后,将图片角度 ...
- 部分Android手机拍照后照片被旋转的解决方案
在部分Android手机(如MT788.Note2)上,使用Camera拍照以后,得到的照片会被自动旋转(90°.180°.270°),这个情况很不符合预期.仔细分析了一下,因为照片属性中是存储了 ...
- Android使得手机拍照功能的发展(源共享)
Android系统调用手机拍照功能有两种方法来直接调用手机自带摄像头还有一个就是要当心自己的节拍. 例Camera360 强大的一个在每个操作系统都有一个手机摄影软件:您可以捕捉不同风格,不同特效的照 ...
- android 解决 多品牌手机拍照问题,尤其是小米手机
先上个图吧 .点击头像弹出下面对话框,然后直接上代码. 头像是自定义控件实现的圆形头像,当然就目前而言 想要实现 圆形头像的资料太多了,随便找个就行 <com.kuibu.jucai.widge ...
- 解决Android后台清理APP后,程序自动重启的问题
最近解决了一个Android APP的bug,发现APP在被后台清理后,会自动重启.现象很奇怪,有的手机(HTC)后台清理后,程序会再次重启,而有的手机(小米)则不会.猜想可能是小米手机内部做了处理, ...
- 解决Android调用相机拍照,要报“打开相机失败”查看debug日志显示“setParameters failed”的问题
使用CameraLibrary项目,在部分手机或平板上不能正常使用,要报“打开相机失败”查看debug日志显示“setParameters failed”. 找到CameraView.java中的se ...
- Xamarin.Android 调用手机拍照功能
最近开发Android遇到了调用本地拍照功能,于是在网上搜了一些方法,加上自己理解的注释,在这儿记录下来省的下次用时候找不到,同事也给正在寻找调用本地拍照功能的小伙伴一些帮助~ 实现思路:首先加载-- ...
- android 加密手机完毕后待机两分钟出现有频率的杂音
这个音效是code里面主动加的,是为了提醒end user输入PIN的一个提示音,也标志着加密手机动作的完毕. 详细位置是在alps\packages\apps\Settings\src\com\an ...
- Android实现手机拍照功能
一.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmln ...
随机推荐
- 李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
1 复习昨天知识 1.1 浮动 特点: >浮动的元素不占位置(脱标) >可以将行内元素转化为行内块元素 >块级元素在一行上显示 >设置了浮动的元素,影响其后面的元素 作 ...
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- 在java代码中,用xslt处理xml文件
http://blog.csdn.net/zhou_lei/article/details/2661735 ********************************************** ...
- weblogic重启脚本
客户要求每周weblogic重启,每台机器上有多个weblogic实例,开始准备单个服务器实例做成sysv风格的脚本,但是实例较多,于是在满足需求和自动化重启的情况下,多个服务器实例的重启放在了一起, ...
- python zeromq 使用
Reference: http://blog.csdn.net/kwsy2008/article/details/49464663 本篇博客将介绍zmq应答模式,所谓应答模式,就是一问一答,规则有这么 ...
- 针对后台TCP服务F5健康检查配置
1.TCP-HALF-OPEN方式 TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN ...
- “一键制作启动u盘失败”的主要原因是什么?
一键制作启动u盘失败的主要原因是什么?今天u启动小编就和大家一起来分析原因并寻求答案吧! 原因分析: 1.u盘内有文件正在运行或者是打开: 2.u盘自身的质量问题: 3.最主要的原 ...
- wcf中的Message类
客户端->服务端—>客户端 客户端代码: using (new OperationContextScope(client.InnerChannel)) { ...
- 在SQL Server中创建用户角色及授权
参考文献 http://database.51cto.com/art/201009/224075.htm 正文 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许 ...
- 【Unity笔记】根骨骼动画/运动(Root Motion)
根骨骼动画:当动画中角色发生位移后,动作坐标原点跟随角色移动.例如一个向前跳跃的动画,如果在场景中重复该动画,能够看到角色一路往前跳跃,位置一直在前进.适用于有位移的放技能动作等. 非根骨骼动画:当动 ...