相机前js调用摄像头拍照上传是反的,怎么解决

完美解决自定义摄像头的各种问题提
个人笔记(26)
首先讲下遇到的问题:
1:打开相机后看到的实际图像被旋转了
方案:camera = Camera.open(position);//打开当前选中的摄像头
&&&&&& && camera.setDisplayOrientation(getPreviewDegree(**Activity.this));
&//用于根据手机方向获得相机预览画面旋转的角度
&&& public int getPreviewDegree(Activity activity) {
&&&&&&& // 获得手机的方向
&&&&&&& int rotation = activity.getWindowManager().getDefaultDisplay()
&&&&&&&&&&&&&&& .getRotation();
&&&&&&& int degree = 0;
&&&&&&& // 根据手机的方向计算相机预览画面应该选择的角度
&&&&&&& switch (rotation) {
&&&&&&&&&&& case Surface.ROTATION_0:
&&&&&&&&&&&&&&& degree = 90;
&&&&&&&&&&&&&&&
&&&&&&&&&&& case Surface.ROTATION_90:
&&&&&&&&&&&&&&& degree = 0;
&&&&&&&&&&&&&&&
&&&&&&&&&&& case Surface.ROTATION_180:
&&&&&&&&&&&&&&& degree = 270;
&&&&&&&&&&&&&&&
&&&&&&&&&&& case Surface.ROTATION_270:
&&&&&&&&&&&&&&& degree = 180;
&&&&&&&&&&&&&&&
&&&&&&& orientations =
2拍完照片后不同手机保存的图片大小不一样,并且小米not拍到的照片还是花屏的,照片完全没法用啊,
解决方案:
&@Override
&&&&&&& public void surfaceChanged(SurfaceHolder holder, int format, int width,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& int height) {
&&&&&&&&&&& setCamera();
private void setCamera() {
&&&&&&& parameters = camera.getParameters(); // 获取各项参数
&&&&&&& parameters.setPictureFormat(PixelFormat.JPEG); // 设置图片格式
&&&&&&& List&Camera.Size& SupportedPreviewSizes = parameters.getSupportedPreviewSizes();// 获取支持预览照片的尺寸
&&&&&&& Camera.Size previewSize = SupportedPreviewSizes.get(0);// 从List取出Size
&&&&&&& parameters.setPreviewSize(previewSize.width, previewSize.height);// 设置预览照片的大小
&&&&&&& setPictureSize();//设置保存图片的大小
&&&&&&& camera.setParameters(parameters);
&&&& * 对所有机型做保存图片宽高匹配
&&&& * 1.如果支持和屏幕宽度相同的分辨率就用默认和屏幕宽度相同的图片
&&&& * 2.如果没有和屏幕宽度相匹配的就用默认分辨率最大的
&&& private void setPictureSize() {
&&&&&&& Camera.Size pictureS
&&&&&&& List&Camera.Size& supportedPictureSizes = parameters.getSupportedPictureSizes();
&&&&&&& if (supportedPictureSizes.size() & 2) {
&&&&&&&&&&& for (int i = 0; i & supportedPictureSizes.size(); i++) {
&&&&&&&&&&&&&&& pictureSize = supportedPictureSizes.get(i);
&&&&&&&&&&&&&&& if (screenWidth - pictureSize.width == 0) {
&&&&&&&&&&&&&&&&&&& parameters.setPictureSize(pictureSize.width, pictureSize.height);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& for (int i = 0; i & supportedPictureSizes.size(); i++) {
&&&&&&&&&&&&&&& pictureSize = supportedPictureSizes.get(i);
&&&&&&&&&&&&&&& if (supportedPictureSizes.size() & i + 1) {
&&&&&&&&&&&&&&&&&&& Camera.Size pictureSizeMax = supportedPictureSizes.get(i + 1);
&&&&&&&&&&&&&&&&&&& if (pictureSize.width - pictureSizeMax.width & 0) {
&&&&&&&&&&&&&&&&&&&&&&& parameters.setPictureSize(pictureSize.width, pictureSize.height);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& } else if (pictureSize.width - pictureSizeMax.width & 0) {
&&&&&&&&&&&&&&&&&&&&&&& pictureSize = supportedPictureSizes.get(supportedPictureSizes.size() - 1);
&&&&&&&&&&&&&&&&&&&&&&& parameters.setPictureSize(pictureSize.width, pictureSize.height);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&&&&&&&& if (pictureSize.height - pictureSizeMax.height & 0) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& parameters.setPictureSize(pictureSize.width, pictureSize.height);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&& } else if (pictureSize.height - pictureSizeMax.height & 0) {
&&&&&&&&&&&&&&&&&&&&&&&&&&& pictureSize = supportedPictureSizes.get(supportedPictureSizes.size() - 1);
&&&&&&&&&&&&&&&&&&&&&&&&&&& parameters.setPictureSize(pictureSize.width, pictureSize.height);
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&& } else {
&&&&&&&&&&& pictureSize = supportedPictureSizes.get(0);
&&&&&&&&&&& parameters.setPictureSize(pictureSize.width, pictureSize.height);
3拍完照片预览时照片被旋转了,并且前置和后置角度不一样
网上都是这么解决的
&&&& * 读取图片的旋转的角度
&&&& * @param path
&&&& *&&&&&&&&&&& 图片绝对路径
&&&& * @return 图片的旋转角度
&&& public static int getBitmapDegree(String path) {
&&&&&&& int degree = 0;
&&&&&&& try {
&&&&&&&&&&& // 从指定路径下读取图片,并获取其EXIF信息
&&&&&&&&&&& ExifInterface exifInterface = new ExifInterface(path);
&&&&&&&&&&& // 获取图片的旋转信息
&&&&&&&&&&& int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
&&&&&&&&&&&&&&&&&&& ExifInterface.ORIENTATION_NORMAL);
&&&&&&&&&&& switch (orientation) {
&&&&&&&&&&&&&&& case ExifInterface.ORIENTATION_ROTATE_90:
&&&&&&&&&&&&&&&&&&& degree = 90;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& case ExifInterface.ORIENTATION_ROTATE_180:
&&&&&&&&&&&&&&&&&&& degree = 180;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& case ExifInterface.ORIENTATION_ROTATE_270:
&&&&&&&&&&&&&&&&&&& degree = 270;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&& } catch (IOException e) {
&&&&&&&&&&& e.printStackTrace();
&&&& * 将图片按照某个角度进行旋转
&&&& * @param bm
&&&& *&&&&&&&&&&& 需要旋转的图片
&&&& *&&&&&&&&&&& 旋转角度
&&&& * @return 旋转后的图片
&&& public static Bitmap rotateBitmapByDegree(Bitmap bm,int degree) {
&&&&&&& Bitmap returnBm =
&&&&&&& // 根据旋转角度,生成旋转矩阵
&&&&&&& Matrix matrix = new Matrix();
&&&&&&& matrix.postRotate(degree);
&&&&&&& try {
&&&&&&&&&&& // 将原始图片按照旋转矩阵进行旋转,并得到新的图片
&&&&&&&&&&& returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
&&&&&&& } catch (OutOfMemoryError e) {
&&&&&&& if (returnBm == null) {
&&&&&&&&&&& returnBm =
&&&&&&& if (bm != returnBm) {
&&&&&&&&&&& bm.recycle();
&&&&&&& return returnBm;
但是如果degree拿不到图片还是被转动了,那该咋办啊,其实这个是有规律的,我试了三星,小米,联想,华为,等,前置270 后置90,但是为啥是这个角度我自己还没弄明白,
4调用前置摄像头拍完的照片是镜像过的,这个有点让人蛋疼
解决办法:
1.拿到存到sd卡中的图片路径
&&&& * 将前置摄像头图片镜像
&&&& * @param path
&&&& * @return
&&& public String saveToLocal(String path) {
&&&&&&& Bitmap bm = BitmapFactory.decodeFile(path);
&&&&&&& Matrix matrix = new Matrix();
&&&&&&& matrix.postScale(-1, 1);
&&&&&&& Camera.Size size = parameters.getPictureSize();
&&&&&&& Bitmap convertBmp = Bitmap.createBitmap(bm, 0, 0, size.width, size.height, matrix, true);
&&&&&&& FileOutputStream fos =
&&&&&&& try {
&&&&&&&&&&& fos = new FileOutputStream(new File(path));
&&&&&&& } catch (FileNotFoundException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& pressFormat.JPEG, 100, fos);
&&&&&&& try {
&&&&&&&&&&& fos.close();
&&&&&&&&&&& fos.flush();
&&&&&&& } catch (IOException e) {
&&&&&&&&&&& e.printStackTrace();
5.当然如如何切换前后照相机,详细代码如下:
& private void switchCamera() {
&&&&&&& //切换前后摄像头
&&&&&&& int cameraCount = 0;
&&&&&&& Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
&&&&&&& cameraCount = Camera.getNumberOfCameras();//得到摄像头的个数
&&&&&&& for (int i = 0; i & cameraC i++) {
&&&&&&&&&&& Camera.getCameraInfo(i, cameraInfo);//得到每一个摄像头的信息
&&&&&&&&&&& if (cameraCount &= 2 && cameraPosition == 1) {
&&&&&&&&&&&&&&& //现在是后置,变更为前置
&&&&&&&&&&&&&&& if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {//代表摄像头的方位,CAMERA_FACING_FRONT前置&&&&& CAMERA_FACING_BACK后置
&&&&&&&&&&&&&&&&&&& openCamera(i);
&&&&&&&&&&&&&&&&&&& cameraPosition = 0;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }
&&&&&&&&&&& } else {
&&&&&&&&&&&&&&& //现在是前置, 变更为后置
&&&&&&&&&&&&&&& if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {//代表摄像头的方位,CAMERA_FACING_FRONT前置&&&&& CAMERA_FACING_BACK后置
&&&&&&&&&&&&&&&&&&& openCamera(i);
&&&&&&&&&&&&&&&&&&& cameraPosition = 1;
&&&&&&&&&&&&&&&&&&& orientations = 90;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&& private void openCamera(int position) {
&&&&&&& if (null != camera) {
&&&&&&&&&&& camera.stopPreview();//停掉原来摄像头的预览
&&&&&&&&&&& camera.release();//释放资源
&&&&&&&&&&& camera =//取消原来摄像头
&&&&&&& camera = Camera.open(position);//打开当前选中的摄像头
&&&&&&& camera.setDisplayOrientation(getPreviewDegree(TamCameraActivity.this));
&&&&&&& try {
&&&&&&&&&&& camera.setPreviewDisplay(holder);//通过surfaceview显示取景画面
&&&&&&& } catch (Exception e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& camera.startPreview();//开始预览
&&&&&&& cameraPosition = 1;
到此遇到的各种问题都完美解决,如果还有遇到其他问题欢迎留言
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9404次
排名:千里之外
原创:20篇
转载:14篇
(1)(2)(1)(1)(1)(9)(1)(3)(1)(7)(1)(2)(4)为什么照相机前置摄像头照的相是相反的。_iphone5s吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,337,904贴子:
为什么照相机前置摄像头照的相是相反的。收藏
以前不是这样啊,怎么设置回去,求大神啊
求怎么能设置回去
我的也是这样 同问
恢复所有设置是所有软件都没有了吗?
本来就是反的,跟镜子反射一样,其他手机也是这样的,用任何一个图片美化软件都可以反回来
楼上正解~
你们的都是这样吗?
那就这样吧。此贴废了,别回复了,我不想要经验。
用美颜相机貌似可以不反。
孩子,你没有学镜面原理吗
我也是突然这样了 之前好好地 楼主修复了么
楼主我懂你,我也有这种情况,和镜子的那种反的不一样
照出来怪怪的,本来在屏幕里显示还是很正常的样子(就是照镜子)【那些不懂楼主说什么的看】。后来照出来以后反而还把照片镜像了。
就是真人吧
美图能把照片反过来吗
想想照镜子为什么东西是反的,就知道什么是镜面原理了
十楼正解,除了一些可以修改镜像的照什么样就出什么样的照片,不修改的都是反的,镜像原理
都是这样 习惯就好
前摄像头只用来当镜子用
从来不拍照
装个软件相机就行了
楼主我跟你一样,突然就变了。。。不知道怎么还原。。。
我的也是后来突然就变反的了
我的前置,没拍的时候就像照镜子那样,拍张照出来就等于是别人眼里看你的样子啊
苹果都这样
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或我的5s手机后置摄像头拍出来的照片变反了一个,照片要把手机反过来看才是正面,怎么调回来?
照片看的时候脑袋在下面,上下变反了
已有1个回答
[编辑专家]
专家星级&:&2.1星
问答堂专家综合评分
问题评分&:&3.8星
采纳、点赞&:&0星
二次回复率&:&0星
内容为广告/垃圾,我要举报!
特聘专家具有协助内容审核的特权
举报后内容将不能在前台展示
错乱举报会导致该权利被剥夺
选择举报原因×
擅长领域:
参与话题:
你好!1、你开启了旋转屏幕,关闭就行了。2、有时你横向屏照,照片也会竖起来。3、建议你使用IOS8或IOS7里自带的图片编辑把图片调正就行了。
留下你的评论
该内容由系统自动生成
参考价:¥2050.00
热门排行:第 89 名
主屏尺寸4英寸
电池容量1560mAh
主屏分辨率像素
电池类型不可拆卸式电池
后置摄像头800万像素
CPU频率1.3GHz
前置摄像头120万像素
CPU类型苹果 A7/M7协
网络类型单卡
名网友点评分数
iOS 7完美越狱真的真的真的来了,太突然了,小红豆差点睡了,差点就错过这么重大一个事件!真的是圣诞节前的一个超级大的surprise!!!
就在刚才,老牌越狱...
微信公众账号ZOL问答堂
关注微信,随时随地解答您的疑惑
ZOL问答堂官方微博@ZOL问答堂
关注成功!该问题被回答后,将给您发送站内短信。
您也可以通过关注问答堂微信,及时获得您关注问题的回答。
微信关注问题方法“”扫描下载MIUI论坛APP
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
小米手机1S
用前置在拍摄界面的时候:
未命名2.png (444.1 KB, 下载次数: 0)
用前置在拍摄界面的时候。
然后是进去看照片的时候
未命名1.png (430.95 KB, 下载次数: 0)
进去看照片,上下左右都是反的。
这个是相机问题么?
还是我的手机在拍摄的时候手持感应有问题。
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
/forum.php?mod=attachment&aid=MTEyMjM3NXw3YTc2YjZkYWVkOGNhOTg1NDMzY2M4YzM3ODJjNjljOHwxNDc4NjExOTY1&request=yes&_f=.jpg
(110.71 KB, 下载次数: 1)
21:15 上传
经验1957 米
在线时间169 小时
版本V7.3.8.0.LHOCNDD
积分 2665, 距离下一级还需 2335 积分
积分 2665, 距离下一级还需 2335 积分
机型红米Note 3-全网通版
签到次数44
MIUI版本V7.3.8.0.LHOCNDD
通过手机发布
我的也是有知道的嘛
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
自己顶下,希望你们能够看到
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
本帖最后由 丿灬小张 于
21:26 编辑
我刷的3.4.5的时候还是正常的。前置只是左右是反的,为什么现在是上下也反了
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
有没有人遇到同样的问题
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
经验1514 米
在线时间160 小时
版本4.3.28
积分 1784, 距离下一级还需 216 积分
积分 1784, 距离下一级还需 216 积分
机型小米手机1/1S
签到次数29
MIUI版本4.3.28
自己顶上去。不求你们给我什么解答,只求米粉能够帮我看看,你们的是这样的么?
经验13951 米
在线时间681 小时
版本6.11.3
机型小米手机5SPlus
签到次数180
MIUI版本6.11.3
进#*#*6484#*#*效正一下吧
不论时光如何变幻,我依旧爱小米如初.
1000万用户纪念勋章
MIUI1000万用户纪念勋章
已关注微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI 300周
MIUI 300周更新纪念勋章
小米六周年
小米六周年米粉节
小米5发布会
参加小米5发布会直播页大转盘抽奖获得
MIUI 2000万
MIUI 2000万发烧友纪念勋章
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
MIUI三周年
MIUI三周年纪念勋章
已关注极客秀微信
MIUI6 荣誉勋章
MIUI6 荣誉勋章
MIUI六周年
MIUI六周年纪念勋章
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号}

我要回帖

更多关于 js调用摄像头拍照上传 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信