广告
返回顶部
首页 > 资讯 > 精选 >Android应用中实现图片压缩的方法有哪些
  • 149
分享到

Android应用中实现图片压缩的方法有哪些

androidroi 2023-05-31 01:05:52 149人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关Android应用中实现图片压缩的方法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android图片压缩几种方式总结图片压缩在Android开发中很常见也

这篇文章将为大家详细讲解有关Android应用中实现图片压缩的方法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Android图片压缩几种方式总结

图片压缩在Android开发中很常见也很重要,防止图片的OOM也是压缩的重要原因。

首先看下Bitmap图片文件的大小的决定因素:

Bitmap所占用的内存 = 图片长度 x 图片宽度 x 一个像素点占用的字节数。3个参数,任意减少一个的值,就达到了压缩的效果。

接下来看下Bitmap图片的几种格式的特点:

ALPHA_8
 表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度
 ARGB_4444
表示16位ARGB位图,即A=4,R=4,G=4,B=4,一个像素点占4+4+4+4=16位,2个字节
ARGB_8888
表示32位ARGB位图,即A=8,R=8,G=8,B=8,一个像素点占8+8+8+8=32位,4个字节
RGB_565
表示16位RGB位图,即R=5,G=6,B=5,它没有透明度,一个像素点占5+6+5=16位,2个字节

如果进行图片格式的压缩的话,一般情况下都是ARGB_8888转为RGB565进行压缩。

写了一个工具类,基本上列举了android上图片的几种基本压缩方式:

质量压缩

采样率压缩

尺寸压缩

Matrix压缩

图片格式的压缩,例如PNG和JPG保存后的图片大小是不同的

public class Utils {       public static Bitmap getBitmap(Bitmap bitmap, int sampleSize) {     BitmapFactory.Options options = new BitmapFactory.Options();     options.inSampleSize = sampleSize;     ByteArrayOutputStream baos = new ByteArrayOutputStream();     bitmap.compress(Bitmap.CompressFORMat.JPEG, 100, baos);     byte[] bytes = baos.toByteArray();     Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);     Log.i("info", "图片大小:" + bit.getByteCount());//2665296  10661184     return bit;   }       public static Bitmap compressByQuality(Bitmap bitmap, int quality) {     ByteArrayOutputStream baos = new ByteArrayOutputStream();     bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);     byte[] bytes = baos.toByteArray();     Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);     Log.i("info", "图片大小:" + bit.getByteCount());//10661184     return bit;   }       public static Bitmap compressByQuality(Bitmap src, long maxByteSize) {     ByteArrayOutputStream baos = new ByteArrayOutputStream();     int quality = 100;     src.compress(Bitmap.CompressFormat.JPEG, quality, baos);     while (baos.toByteArray().length > maxByteSize && quality > 0) {       baos.reset();       src.compress(Bitmap.CompressFormat.JPEG, quality -= 5, baos);     }     if (quality < 0) return null;     byte[] bytes = baos.toByteArray();     Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);     return bit;   }    public static Bitmap compressByFormat(Bitmap bitmap, int format) {     ByteArrayOutputStream baos = new ByteArrayOutputStream();     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);     byte[] bytes = baos.toByteArray();     Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);     Log.i("info", "图片大小:" + bit.getByteCount());//10661184     return bit;   }       public static Bitmap getBitmapBySize(Bitmap bitmap, float scaleWidth, float scaleHeight) {     Matrix matrix = new Matrix();     matrix.postScale(scaleWidth, scaleHeight);     Bitmap bit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);     Log.i("info", "图片大小:" + bit.getByteCount());     return bit;   }       public static Bitmap getBitmapByFormatConfig(String path, Bitmap.Config config) {     BitmapFactory.Options options = new BitmapFactory.Options();     options.inPreferredConfig = config;     Bitmap bitmap = BitmapFactory.decodeFile(path, options);     Log.i("info", "图片大小:" + bitmap.getByteCount());     return bitmap;   }       public static Bitmap getBitmapByScaleSize(Bitmap bitmap, int width, int height) {     Bitmap bit = Bitmap.createScaledBitmap(bitmap, width, height, true);     Log.i("info", "图片大小:" + bit.getByteCount());     return bit;   }       public static Bitmap getBitmapByFormat(Bitmap bitmap, Bitmap.CompressFormat format) {     ByteArrayOutputStream baos = new ByteArrayOutputStream();     bitmap.compress(format, 100, baos);     byte[] bytes = baos.toByteArray();     Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);     Log.i("info", "图片大小:" + bit.getByteCount());     return bit;   }       public static Bitmap getBitmap(String filePath, int inSampleSize) {     BitmapFactory.Options options = new BitmapFactory.Options();     options.inJustDecodeBounds = true;     BitmapFactory.decodeFile(filePath, options);//此时不耗费和占用内存     options.inSampleSize = inSampleSize;     options.inJustDecodeBounds = false;     return BitmapFactory.decodeFile(filePath, options);   }    public static Bitmap getBitmap(String filePath) {     return BitmapFactory.decodeFile(filePath);   }    public static Bitmap view2Bitmap(View view) {     if (view == null) return null;     Bitmap ret = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);     canvas canvas = new Canvas(ret);     Drawable bgDrawable = view.getBackground();     if (bgDrawable != null) {       bgDrawable.draw(canvas);     } else {       canvas.drawColor(Color.WHITE);     }     view.draw(canvas);     return ret;   }    public static void saveBitmap(Bitmap bitmap) {     File file = new File(Environment.getExternalStorageDirectory() + "/img.jpg");     try {       FileOutputStream fileOutputStream = new FileOutputStream(file);       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);       fileOutputStream.flush();       fileOutputStream.close();     } catch (FileNotFoundException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }   }    public static void saveBitmap(Bitmap bitmap,Bitmap.CompressFormat format) {     File file = new File(Environment.getExternalStorageDirectory() + "/img.jpg");     try {       FileOutputStream fileOutputStream = new FileOutputStream(file);       bitmap.compress(format, 100, fileOutputStream);       fileOutputStream.flush();       fileOutputStream.close();     } catch (FileNotFoundException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }   } } 

--结束END--

本文标题: Android应用中实现图片压缩的方法有哪些

本文链接: https://www.lsjlt.com/news/222813.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android应用中实现图片压缩的方法有哪些
    这篇文章将为大家详细讲解有关Android应用中实现图片压缩的方法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android图片压缩几种方式总结图片压缩在Android开发中很常见也...
    99+
    2023-05-31
    android roi
  • Android常见的图片压缩方式有哪些
    小编给大家分享一下Android常见的图片压缩方式有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!先给出一组数据原图:width:2976; height:2976原图实际:--->byte:2299820 Mb...
    99+
    2023-06-15
  • Android实现简单图片压缩的方法
    本文实例讲述了Android实现简单图片压缩的方法。分享给大家供大家参考,具体如下: 在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大...
    99+
    2022-06-06
    压缩 方法 图片 图片压缩 Android
  • Android实现图片压缩(bitmap的六种压缩方式)
    Android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式: 图片长度 x 图片宽度 x...
    99+
    2022-06-06
    压缩 图片 bitmap 图片压缩 Android
  • android图片压缩的3种方法实例
    android 图片压缩方法: 第一:质量压缩法: 代码如下:private Bitmap compressImage(Bitmap image) {   ...
    99+
    2022-06-06
    压缩 方法 Android
  • Linux中有哪些压缩格式的压缩与解压方法
    Linux中有哪些压缩格式的压缩与解压方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于P...
    99+
    2023-06-09
  • Java图片批量压缩像素的实现方法
    目录图片压缩大法压缩前大小:压缩后大小:具体代码实现:附:利用Graphics类如何进行压缩图像总结图片压缩大法 为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法依旧是...
    99+
    2022-11-12
  • 微信小程序图片压缩功能的实现方法
    微信小程序图片压缩功能的实现方法 :1、在 wx.chooseImage 接口选择相机图片。2、在 wx.getImageInfo 接口获取图片信息。3、计算压缩比例和最终图片的长宽。4、创建 canvas 绘制最终图片。5、在 wx.ca...
    99+
    2022-10-07
  • Linux系统有哪些常用的压缩解压方法
    本篇内容介绍了“Linux系统有哪些常用的压缩解压方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!.tar解包: tar xvf File...
    99+
    2023-06-10
  • Android实现旋转,放大,缩小图片的方法
    本文实例讲述了Android实现旋转,放大,缩小图片的方法。分享给大家供大家参考,具体如下: 项目中需要做到一个预览图片的功能 最初设想自定义个一个view,在onDraw中用...
    99+
    2022-06-06
    小图 方法 图片 Android
  • Java图片批量压缩像素的实现方法是什么
    Java图片批量压缩像素的实现方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。图片压缩大法为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法...
    99+
    2023-06-22
  • Android中WebView图片实现自适应的方法
    本文实例讲述了Android中WebView图片实现自适应的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:WebSettings ws = tv.getSetti...
    99+
    2022-06-06
    方法 webview 自适应 Android
  • android 多点触摸图片缩放的具体实现方法
    布局: 代码如下:<xml version="1.0" encoding="utf-8"><RelativeLayout xmlns:android="ht...
    99+
    2022-06-06
    方法 图片 Android
  • 如何使用vue+axios+lrz.js实现微信端图片压缩上传方法
    这篇文章主要介绍如何使用vue+axios+lrz.js实现微信端图片压缩上传方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!业务场景微信端项目是基于Vux + Axios构建的,...
    99+
    2022-10-19
  • Android开发之imageView图片按比例缩放的实现方法
    本文实例讲述了Android开发之imageView图片按比例缩放的实现方法。分享给大家供大家参考,具体如下: android:scaleType可控制图片的缩放方式,示例代码...
    99+
    2022-06-06
    方法 android开发 Android
  • Android应用中实现文件下载的方法有哪些
    本篇文章为大家展示了Android应用中实现文件下载的方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、自己封装URLConnection 连接请求类 public void downlo...
    99+
    2023-05-31
    android roi
  • Android如何实现图片生成卷角和圆角缩略图的方法
    这篇文章给大家分享的是有关Android如何实现图片生成卷角和圆角缩略图的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在 Android 的一些界面中,有时候我们需要为一副图片生成大小为 n * n 的缩略...
    99+
    2023-05-30
    android
  • Android实现通过手势控制图片大小缩放的方法
    本文实例讲述了Android实现通过手势控制图片大小缩放的方法。分享给大家供大家参考,具体如下: 该程序实现的是通过手势来缩放图片,从左向右挥动图片时图片被放大,从右向左挥动图...
    99+
    2022-06-06
    方法 图片 控制图 手势 Android
  • css实现任意图片垂直居中的方法有哪些
    这篇文章主要讲解了“css实现任意图片垂直居中的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css实现任意图片垂直居中的方法有哪些”吧!方法一:...
    99+
    2022-10-19
  • Android应用中实现手势控制图片缩放的完全攻略
    一、概述 现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位~~~ 我相信看图的...
    99+
    2022-06-06
    图片 控制图 手势 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作