解决三星拍照横屏问题

news/2024/12/2 16:05:59/

三星手机的问题 :竖着拍照 ,保存的照片确是横着的,

 

下面上代码,

  /***  file:  照片文件*  quality:新生成的照片压缩质量*/@Throws(FileNotFoundException::class)fun compressImageAndSave(file: File, quality: Int): String {var bm = BitmapFactory.decodeFile(file.absolutePath)val degree = readPictureDegree(file.absolutePath)if (degree != 0) {//旋转照片角度bm = rotateBitmap(bm, degree)}val out = FileOutputStream(file.absolutePath)bm!!.compress(Bitmap.CompressFormat.JPEG, quality, out)return file.path}/*** 旋转图片*/fun rotateBitmap(bitmap: Bitmap?, degress: Int): Bitmap? {var bitmap = bitmapif (bitmap != null) {val m = Matrix()m.postRotate(degress.toFloat())bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width,bitmap.height, m, true)return bitmap}return bitmap}/*** 读取照片的旋转角度*/fun readPictureDegree(path: String): Int {var degree = 0try {val exifInterface = ExifInterface(path)val orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL)when (orientation) {ExifInterface.ORIENTATION_ROTATE_90 -> degree = 90ExifInterface.ORIENTATION_ROTATE_180 -> degree = 180ExifInterface.ORIENTATION_ROTATE_270 -> degree = 270}} catch (e: IOException) {e.printStackTrace()}return degree}

 

用的话 只要一行compressImageAndSave(mTmpFile,100);

这里拿到拍完照的照片定义为mTmpFile,然后根据照片旋转的角度,  我断点 orientation 得到是这个

public static final int ORIENTATION_ROTATE_90 = 6;  // rotate 90 cw to right it

根据实际拍到的图片 是逆时针转了90度

所以 我们只要顺时针再转90就能解决这个问题,对于英文的这个注释我也不是很懂

 

 

下面是别人给我的方法:

仅供参考

public static String compressImageAndSave(String imageDir, String filePath, String fileName, int q) throws FileNotFoundException {Bitmap bm = getSmallBitmap(filePath);int degree = readPictureDegree(filePath);if (degree != 0) {//旋转照片角度bm = rotateBitmap(bm, degree);}File outputFile = new File(imageDir, fileName);FileOutputStream out = new FileOutputStream(outputFile);bm.compress(Bitmap.CompressFormat.JPEG, q, out);return outputFile.getPath();}

 


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

相关文章

Java多线程锁技术漫谈:乐观锁VS悲观锁

**Java多线程技术一直是Java程序员必备的核心技能之一。在Java多线程编程中,为了保证数据的一致性和安全性,常常需要使用锁的机制来防止多个线程同时修改同一个共享资源。锁是实现并发访问控制的一种机制,多线程之间共同访问共享资源的时候&a…

如何使用Vue CLI来创建和管理Vue项目

Vue CLI是Vue.js官方提供的脚手架工具,它可以快速轻松地创建、配置和管理Vue项目。接下来,让我们了解一下如何使用Vue CLI吧! 首先,你需要确保已经安装了Node.js和npm。如果没有,请先访问https://nodejs.org/下载并安…

广通优云徐育毅:筑基数字化,打造中国IT运维新范式

2023年2月,中共中央、国务院印发《数字中国建设整体布局规划》,数字技术与经济、政治、文化、社会等各领域融合愈发紧密,一册百花齐放、生机勃勃的数字化图卷正徐徐展开。 随着数字中国战略深入推进,IT运维作为核心领域受到关注。…

真的被00后卷麻了,还好我很会划水~

前情提要 鉴于目前测试就业越来越严峻,内卷也成了测试领域的代名词了。我的一个HR朋友告诉我,现在测试岗的投递比已经将近1000,也就是一个岗位差不多有千份简历投进来,实在是恐怖! 前段时间我也去面试了一些公司&…

【Python笔记(三)——时间模块 函数 模块与包 面向对象 文件基本操作】

文章目录 Python 基础:与时间相关的模块获取当前时间格式化时间获取时间差 Python 基础:函数Python 基础:模块与包Python 基础:面向对象Python 基础:文件基本操作 Python 基础:与时间相关的模块 Python 中…

今天给码农们分享五个只有程序猿才能听懂的笑话

今天给码农们分享五个只有程序猿才能听懂的笑话 1.“神舟十一号,地面信号异常,现在请汇报您的具体位置?”“现在我们正在祖国上空”“你们怎么知道的?”“刚才试验了一下,Twitter和FaceBook都打不开。”2、程序员换ID…

达美乐的面试(部分)(未完全解析)

Java如何保证非线程安全的数据结构(比如HashMap)的原子性?读多写少时用哪种锁好? A: 方法1:CAS等乐观锁机制,方法2:如果读多写少,可以使用读写锁(ReentrantReadWriteLock&#xff0…

黑鹰安全网_育鹰计划_笔记

之前学习黑鹰基地网赚教程整理的笔记。 育鹰计划第一课 幼儿园小班 1,互联网是一次从未有过的商机,作为21世界的我们要好好把握. 2,网络的可复制性可以大大降低网赚的成本 3,放的下才能成长(不放下共享你已有的旧的东西;就不能进步,无法…