小米、三星手机拍照后旋转90°问题的解决

news/2024/11/23 3:11:31/

```java
public class BitmapFileSetting {/*** 三星、小米手机设置* 三星、小米手机拍照要旋转* @param filePath* @throws IOException*/public static File samsungPhoneSetting(String filePath) throws IOException {//根据图片判断要旋转多少角度int bitmapDegree = getBitmapDegree(filePath);//根据图片路径转bitmapBitmap bitMBitmap;bitMBitmap = decodeFile(filePath);if (bitMBitmap == null){return null;}//旋转后的bitmapBitmap rotateBitmapByDegree = rotateBitmapByDegree(bitMBitmap, bitmapDegree);File saveBitmapFile = saveBitmapFile(rotateBitmapByDegree, filePath);return saveBitmapFile;}/*** uri 转 File* @param uri* @return*/public File uriTurnFile(Uri uri, Activity activity){if(uri == null){return null;}File file = null;String[] proj = { MediaStore.Images.Media.DATA };Cursor actualimagecursor = activity.managedQuery(uri, proj, null,null, null);int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);actualimagecursor.moveToFirst();String img_path = actualimagecursor.getString(actual_image_column_index);file = new File(img_path);return file;}/*** 根据路径 转bitmap* @param urlpath* @return*/public static Bitmap getBitMBitmap(String urlpath) {Bitmap map = null;try {URL url = new URL(urlpath);URLConnection conn = url.openConnection();conn.connect();InputStream in;in = conn.getInputStream();map = BitmapFactory.decodeStream(in);// TODO Auto-generated catch block} catch (IOException e) {e.printStackTrace();}return map;}/*** 把batmap 转file* @param bitmap* @param filepath*/public static File saveBitmapFile(Bitmap bitmap, String filepath){File file=new File(filepath);//将要保存图片的路径try {BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);bos.flush();bos.close();} catch (IOException e) {e.printStackTrace();}return file;}/*** 读取图片的旋转的角度** @param path 图片绝对路径* @return 图片的旋转角度* @throws IOException*/public static int getBitmapDegree(String path) throws IOException {int degree = 0;// 从指定路径下读取图片,并获取其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;break;case ExifInterface.ORIENTATION_ROTATE_180:degree = 180;break;case ExifInterface.ORIENTATION_ROTATE_270:degree = 270;break;}return degree;}/*** 将图片按照某个角度进行旋转** @param bm     需要旋转的图片* @param degree 旋转角度* @return 旋转后的图片*/public static Bitmap rotateBitmapByDegree(Bitmap bm, int degree) {Bitmap returnBm = null;// 根据旋转角度,生成旋转矩阵Matrix matrix = new Matrix();matrix.postRotate(degree);// 将原始图片按照旋转矩阵进行旋转,并得到新的图片returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);if (returnBm == null) {returnBm = bm;}if (bm != returnBm) {bm.recycle();}return returnBm;}/*** 根据 路径 得到 file 得到 bitmap* @param filePath* @return* @throws IOException*/public static Bitmap decodeFile(String filePath) throws IOException{Bitmap b = null;int IMAGE_MAX_SIZE = 600;File f = new File(filePath);if (f == null){return null;}//Decode image sizeBitmapFactory.Options o = new BitmapFactory.Options();o.inJustDecodeBounds = true;FileInputStream fis = new FileInputStream(f);BitmapFactory.decodeStream(fis, null, o);fis.close();int scale = 1;if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) {scale = (int) Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));}//Decode with inSampleSizeBitmapFactory.Options o2 = new BitmapFactory.Options();o2.inSampleSize = scale;fis = new FileInputStream(f);b = BitmapFactory.decodeStream(fis, null, o2);fis.close();return b;}
}

如果你很着急的话,就直接把这个类复制进去,然后在图片选择回调的方法里面调用:

			var file=BitmapFileSetting.samsungPhoneSetting(it[0].path)it[0].path=file.path

第一行的代码意思是获取把角度旋转回来的file文件,第二行是把旋转后的文件path赋值给最初选择的文件的路径(it[0]是我自己代码里面回调回来的file对象,你改成你的就行)


http://www.ppmy.cn/news/673700.html

相关文章

三星、华为、盛大、小米……

三星I9300人脸识别带来的照片为主的通讯录社交创意很好。GALAXY Xcover 防水的。索尼ST18i XperiaU 镜头好,16倍数码变焦。三星NexusS垃圾。三星I9250日版的据说性价比出色。相比之华为荣耀U8860是炮灰机,27号京东华为荣耀促销1600块。 华为的系统UI重做…

Android--(三星手机)webview嵌套H5,点击H5按钮跳转手机拍照,横屏拍照导致失败或崩溃问题

Android--(三星手机)webview嵌套H5,点击H5按钮跳转手机拍照,横屏拍照导致失败或崩溃问题(完美解决) 最近在改一个需求,用的是第三方公司的一个H5链接(Udesk公司)&#xf…

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

移动端web 页面通过 input type file 拍照的时候,部分手机图片出现量旋转了90度的问题,出现问题的机型为小米和三星,手机竖着拍的时候出现这种旋转的问题,横拍出来的照片是正常的,结合网上的解决办法总结如下&#xff…

6-如何创建正态分布数组?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 6-如何创建正态分布数组?

gel和react哪个厉害_lunarlon和react哪个好?

react更好,耐久度也可以。露娜底刚穿时也不错,脚感比react要舒服一点,但露娜底子越穿越硬。以前买过登月,也算是一款露娜底的代表作。做休闲鞋穿,有时也跑跑步,差不多两个月后就偏硬了。现在反正手捏上去就…

Jquery获取参数(解决参数中文乱码问题)

Jquery获取参数(解决参数中文乱码问题) 参考文章: (1)Jquery获取参数(解决参数中文乱码问题) (2)https://www.cnblogs.com/zhangnn2fs/p/9155722.html (3&…

第4天 | 32天学会python, 数据类型之列表

列表的基本使用 # 当我们有多个数据需要按照一定顺序保存的时候,我们可以考虑列表 # 和字符串一样,都可以使用下标来获取元素和对元素进行切片;同时我们还可以使用下标来修改列表里的元素 # name1 张三 # name2 李四 # name3 王五 # name…

oracle uuid 乱码

SELECT sys_guid(), rawtohex(sys_guid()) from dual;