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

Android Camera旋转角度总结 开发过Android自定义相机的朋友们估计都被相机的各种乱七八糟的旋转角度适配坑过,本文将对Camera的各种角度进行解析。 一、适配目标 根据相机旋转角度以及屏幕显示旋转角度选择相机预览数据显示到View上的预览数据显示旋转角度,使眼睛直接看到的真实画面和手机屏幕中显示的画面效果相同。 **相机旋转角度:**相机成像相对于手机的旋转角度,若设备已经安装上了相机,那么该相机相对于设备的旋转角度... 阅读详情
AI摘要

在仿新浪发微博项目中,遇到部分Android手机拍摄图片上传后出现旋转问题。为确保图片正向显示,尝试了两种解决方案:1) 拍照后跳转到新页面让用户手动旋转图片;2) 读取图片属性并按角度自动旋转。最终采用第二种方案,在`onActivityResult`中处理图片旋转,成功解决了问题。

需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器

遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的是正的,这样问题就来了,不能用户发个照片在微博上看到的是被旋转了的啊,另外一个项目里旋转了的图片直接匹配出现问题,这个更严重。

解决:开始的时候在网上没有找到很好的解决办法,谷歌百度的搜了一通,想到第一种解决方式,当手机拍照结束,在返回结果处理里面立即跳转到一个新的页面,在新的页面里让用户自己手动去旋转图片,然后点击确定。就可以上传到服务器正着的图片了;第二种解决方式,这是在论坛里发现的一个方法,可以获取图片的属性,读取图片的旋转角度。

第一种方式代码:

在onActivityResult里面处理跳转

					Intent intent = new Intent(SendMicoBlog.this, RotaingActivity.class);
					MyApp myApp = (MyApp)getApplication();
					myApp.setName(bitmap);//修改之后的名称
					myApp.setPhoto(isPhoto);
					startActivityForResult(intent, 1);

在RotaingActivity里面就可以作相应的旋转处理了

		//获取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;
	}

第二种方式:就简单多了,直接自己出偷着把照片给处理了,不需要用户的操作,这样体验会更好一点。

在onActivityResult里面处理

				BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
				bitmapOptions.inSampleSize = 8;
				File file = new File(SD_CARD_TEMP_DIR);
				/**
				 * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转
				 */
				int degree = ImageDispose.readPictureDegree(file.getAbsolutePath());



 

					Bitmap cameraBitmap = BitmapFactory.decodeFile(SD_CARD_TEMP_DIR, bitmapOptions);
					bitmap = cameraBitmap;
					/**
					 * 把图片旋转为正的方向
					 */
					bitmap = ImageDispose.rotaingImageView(degree, bitmap);
					upload(bitmap);

	/**
	 * 旋转图片
	 * @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;
	}


 

	/**
	 * 读取图片属性:旋转的角度
	 * @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;
    }


 

这样就搞定了,此时你上传的照片就是正的了。

第一种方式的图片





PHP 苹果手机上传图片出现旋转解决代码. PHP 苹果手机上传图片出现旋转解决代码 立即下载

相关推荐

完美解决拍照后图片旋转问题

看到网上有很多解决关于拍照后图片旋转的问题,特别是三星的机型问题最大,但是都不能很好的解决问题,所以花时间研究了下,终于解决了拍照后图片旋转的问题,再此把代码贴出来跟大家一起研究下,有什么不对的地方还望大家指正。

移动端部分安卓手机(三星,小米)竖拍上传图片预览的时候发生旋转问题

移动端web 页面通过 input type= file 拍照的时候,部分手机图片出现量旋转了90度的问题,出现问题的机型为小米和三星,手机竖着拍的时候出现这种旋转的问题,横拍出来的照片是正常的,结合网上的解决办法总结如下: 主要是用 Orientation 这个参数 这个参数并不是所有的图片都有,不过通过手机拍出来的图片都是带有这个参数的, 旋转角度 参数值 0 ...

weixin_30718391的博客 1063

Android部分手机拍照后获取的图片被旋转问题的解决方法

主要为大家详细介绍了Android部分手机拍照后获取的图片被旋转问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

android部分手机拍照后上传图片旋转问题

安卓开发过程中,要兼容的问题越来越多,从5.1以上的双卡,6.0以上的权限,7.0的FileProvide适配到8.0的应用升级未知应用安装处理等等,实在是太多了。 最近项目在测试的时候,有图片上传的功能,在测试小米手机时,发现上传后的图片,从服务端取回时,图片发生了旋转,在网上查了下资料, 发现部分手机确实有这个问题,有问题则要处理。 处理方法就是获取图片的旋转角度,然后对图片进行对应旋转后再上...

true100的专栏 1428

十一、学生信息管理系统(PyQt5+MySQL+PyMySQL模块实现)

学生信息管理系统(PyQt5+MySQL+PyMySQL模块实现)

ungoing的博客 8991

VCSA 6.7证书过期别慌!手把手教你通过SSH修改系统时间恢复登录(附STS证书修复脚本)

本文详细介绍了VCSA 6.7证书过期的应急处理方案,包括通过SSH修改系统时间临时恢复登录、全面更新证书体系以及专项修复STS证书的实战步骤。文章还提供了后期验证和系统加固的建议,帮助运维人员有效应对证书过期问题,确保虚拟化平台的稳定运行。

weixin_31292729的博客 415

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

调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的。其它品牌的手机都是正常的,就三星出现这个怪事。在Android适配上,我原来一直以为国内的小米手机够奇葩了,结果还有更奇葩的!你说你没事旋转照片干啥,实在是猜不透其居心何在,纯粹是在给开发者制造麻烦啊!解决办法是获取到拍照后照片被旋转的角度,再旋转回去就好了。具体思路:1、首先在调用拍照方...

weixin_29421565的博客 1299

从软体机器人到鞋垫分析:Abaqus超弹性材料(Ogden模型)仿真配置全流程

本文详细介绍了Abaqus中Ogden模型在超弹性材料仿真中的应用全流程,涵盖从实验数据导入、参数拟合到模型构建与求解优化的关键步骤。特别针对鞋垫分析等生物力学场景,提供了单元选择、接触设置和并行计算等实用技巧,帮助工程师实现高精度仿真分析。

weixin_42525385的博客 399

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

需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的是正的,这样问题就来了,不能用户发个照片在微博上看到的是被旋转了的啊,另外一个项目里旋转了的图片直接匹配出现问题,这个更严重。解决:开始的时候在网上没有找到很好的解决办法,谷歌百度的搜了一通,想到第一种...

weixin_42571444的博客 922

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2078

ESP32-S3 SPI驱动SD卡与FATFS文件系统实践

SPI(串行外设接口)是嵌入式系统中常用的同步串行通信协议,通过主从架构实现全双工通信。其工作原理基于时钟同步和数据线传输,具有接线简单、占用引脚少的优势。在存储扩展场景中,SPI模式可驱动SD卡实现大容量数据存储,配合FATFS文件系统可提供标准化的文件管理能力。ESP32-S3作为乐鑫推出的高性能Wi-Fi/蓝牙双模芯片,其SPI外设支持高达80MHz时钟频率,结合ESP-IDF提供的sdspi_host驱动,开发者能快速实现SD卡存储方案。该技术广泛应用于物联网设备日志存储、传感器数据采集等场景,本实

weixin_29168393的博客 357

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

需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的是正的,这样问题就来了,不能用户发个照片在微博上看到的是被旋转了的啊,另外一个项目里旋转了的图片直接匹配出现问题,这个更严重。 解决:开始的时候在网上没有找到很好的解决办法,谷歌百度的搜了一通,想

1332

ESD放电模式以及电源箝位 (power clamp )电路

由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工作将输出端Vout电压上拉到高电位。从而Vg端的高电位触发导通了NMOS元件(Mesd)的晶体管,因而ESD电流便经由Mesd而泄放掉。由于晶体管Mesd的栅极导通

DOG_BITE_DOG的博客 2万+
上一篇: Android开发中相当便捷的JSON反序列化实现(含源代码) 连带有handler和进度条功能
下一篇: android检测手机是否有某个应用以及启动安装另一个应用的问题
Steffen02
博客等级 码龄16年 138粉丝 33原创
评论 38
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值