在Android APP开发中经常会有上传图功能,手机拍摄的照片大多都有2M - 5M,把这么大的图片上传上去是需要很长时间的,并且图片过大非常容易导致用卡顿甚至是OOM直接崩溃掉,那么为了优化性能就必须要做图片压缩处理,但是图片压缩后,显示在手机上的图片发生了旋转,解决方法也比较简单,下面直接把我的压缩工具类贴出来,以及多图片旋转的处理:

/*** Created by ysp* on 2020/12/6*/
public class ImageCompressUtils {/**** @description 将图片从本地读到内存时,即图片从File形式变为Bitmap形式* 特点:通过设置采样率,减少图片的像素,达到对内存中的Bitmao进行压缩方法说明: 该方法就是对Bitmap形式的图片进行压缩, 也就是通过设置采样率, 减少Bitmap的像素, 从而减少了它所占用的内存* @param srcPath* @return*/public static String compressBmpFromBmp(String srcPath){srcPathStr=srcPath;BitmapFactory.Options newOptions = new BitmapFactory.Options();newOptions.inJustDecodeBounds = true;//只读边,不读内容Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOptions);newOptions.inJustDecodeBounds = false;int w = newOptions.outWidth;int h = newOptions.outHeight;float hh = 800f;float ww = 480f;int be = 1;if(w > h && w >ww){be = (int)(newOptions.outWidth/ww);}else if (w < h && h > hh) {be = (int)(newOptions.outHeight/hh);}if(be <= 0)be = 1;newOptions.inSampleSize = be;//设置采样率newOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;//该模式是默认的,可不设newOptions.inPurgeable = true;//同时设置才会有效newOptions.inInputShareable = true;//当系统内存不够时候图片会自动被回收bitmap = BitmapFactory.decodeFile(srcPath, newOptions);int degree = readPictureDegree(srcPath);bitmap = rotateBitmap(bitmap, degree);return compressBmpToFile(bitmap);}/**** @description 将图片保存到本地时进行压缩, 即将图片从Bitmap形式变为File形式时进行压缩,* 特点是: File形式的图片确实被压缩了, 但是当你重新读取压缩后的file为 Bitmap是,它占用的内存并没有改变* 所谓的质量压缩,即为改变其图像的位深和每个像素的透明度,也就是说JPEG格式压缩后,原来图片中透明的元素将消失,所以这种格式很可能造成失真* @param bmp*/public static String compressBmpToFile(Bitmap bmp) {String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ygxy/compressImgs/";File file = new File(path + System.currentTimeMillis() + ".jpg");//判断文件夹是否存在,如果不存在则创建文件夹if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}ByteArrayOutputStream baos = new ByteArrayOutputStream();int options = 80;bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);while(baos.toByteArray().length/1024 > 100){baos.reset();options -= 10;bmp.compress(Bitmap.CompressFormat.JPEG, options,baos);}try {FileOutputStream fos = new FileOutputStream(file);fos.write(baos.toByteArray());fos.flush();fos.close();
//            copyExif(srcPathStr,file.getAbsolutePath());return file.getAbsolutePath();}catch (FileNotFoundException e) {
// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();}return "";}/*** 获取图片旋转角度* @param srcPath* @return*/private static int readPictureDegree(String srcPath) {int degree = 0;try {ExifInterface exifInterface = new ExifInterface(srcPath);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;}//处理图片旋转private static Bitmap rotateBitmap(Bitmap bitmap, int rotate) {if (bitmap == null)return null;int w = bitmap.getWidth();int h = bitmap.getHeight();// Setting post rotate to 90Matrix mtx = new Matrix();mtx.postRotate(rotate);return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);}}

Android解决手机图片压缩后旋转问题相关推荐

  1. java-png图片压缩,解决png图片压缩后背景变黑问题

    java-png图片压缩,解决png图片压缩后背景变黑问题 参考文章: (1)java-png图片压缩,解决png图片压缩后背景变黑问题 (2)https://www.cnblogs.com/yinj ...

  2. android刷机后没有声音,轻松解决手机投屏后电视没声音问题

    轻松解决手机投屏后电视没声音问题 再次发文申明一下:安卓手机镜像投屏的时候声音在手机端,大屏幕上没有声音. 安卓手机投屏电视没声音的原因是安卓系统安全保护机制 Android安全架构的核心设计思想,就 ...

  3. 前端获取图片压缩后上传给后台

    在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上 ...

  4. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  5. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  6. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

  7. Android学习之图片压缩,压缩程度高且失真度小

    曾经在做手机上传图片的时候.直接获取相机拍摄的原图上传,原图大小一般1~2M.因此上传一张都比較浪费资源,有些场景还须要图片多张上传,所以近期查看了好多前辈写的关于图片处理的资料.然后试着改了一个图片 ...

  8. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  9. 手机图片压缩大小的方法,用什么软件压缩

    手机图片怎么压缩大小,现在很多的手机拍出来的图片文件都在几兆,这样的图片文件是不能够上传到一些网站中的,今天小编就为大家介绍一下手机图片压缩大小的方法以及压缩软件的使用方法. 使用软件:迅捷压缩软件 ...

  10. js图片压缩后上传方法,图片超过1M先进行压缩,然后再上传

    js图片压缩后上传方法,图片超过1M先进行压缩,然后再上传 图片上传目录 js图片压缩后上传方法,图片超过1M先进行压缩,然后再上传 html代码 js代码 html代码 <input type ...

最新文章

  1. 2022-2028年中国高纯锑行业市场全景研究及发展趋势分析报告
  2. Udacity机器人软件工程师课程笔记(二十八) - 卷积神经网络实例 - Fashion-MNIST数据集
  3. 更精准地生成字幕!哥大Facebook开发AI新框架,多模态融合,性能更强
  4. 23-26 Python File方法、OS文件/目录方法、异常处理、内置函数
  5. 扩展类加载器 Extension ClassLoader
  6. 网站决策分析软件WebBI
  7. java stl分解_[STL训练]寻梦-题解(Java代码)极简思路
  8. UVA10800 Not That Kind of Graph【模拟+绘图】
  9. php-5.4 升级到 php7.2
  10. 数学建模之十分钟学会LINGO(附建模实战)
  11. excel连接64位oracle数据库,excel表格oracle数据库-excel怎样连接oracle数据库(白痴级提问)...
  12. 基于java的客户关系管理系统
  13. python统计(二)假设检验
  14. 七牛云存储使用经历到底怎么样
  15. convert ps pcl emf wmf to pdf files using ghostscript
  16. Python 求一元二次方程的解
  17. 《魔兽世界》室外光照
  18. java毕业设计的健身俱乐部综合管理系统mybatis+源码+调试部署+系统+数据库+lw
  19. 墨魂服务器维修,2013年10月22日定期维护公告
  20. IOS11 弹窗上文本框光标错位问题

热门文章

  1. 通过后台控制浏览器对文件下载
  2. mapengpeng1999@163.com Web前端之JS
  3. SqlServer 2008还原数据库步骤
  4. java dns 解析域名解析_JavaWeb(3)DNS域名解析
  5. LinuxDNS域名解析
  6. Pyinstaller的安装和使用
  7. win11自带的照片查看器无法打印问题解决
  8. 新唐N76E003单片机用APROM模拟EEPROM每次下载写入值复位为0XFF
  9. JAVA:实现求Median中位数算法(附完整源码)
  10. Win12系统或新增“灵动岛”设计 截图曝光