如何实现Android开发中的图片压缩工具类完整实例?

1、ImaZipUtil类

如何实现Android开发中的图片压缩工具类完整实例?

功能:该类提供了多种方法用于压缩图片,包括按指定宽高压缩、质量压缩以及仅分辨率压缩。

主要方法

zipPic:压缩图片到指定宽高,并进行质量压缩,最终大小保持在100K以下。

compressImage:质量压缩方法,将图片压缩至100KB以下。

zipPicWithoutCompress:只进行分辨率压缩,不进行图片的质量压缩。

代码实现

如何实现Android开发中的图片压缩工具类完整实例?

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class ImaZipUtil {
    /**
     * 压缩图片到指定宽高,并进行质量压缩,最终大小保持在100K以下
     * @param sourceBm
     * @param targetWidth
     * @param targetHeight
     * @return
     */
    public static Bitmap zipPic(Bitmap sourceBm, float targetWidth, float targetHeight) {
        BitmapFactory.Options newOpts = new BitmapFactory.Options();
        newOpts.inJustDecodeBounds = true;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        sourceBm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] temp = baos.toByteArray();
        Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length, newOpts);
        newOpts.inJustDecodeBounds = false;
        int w = newOpts.outWidth;
        int h = newOpts.outHeight;
        float hh = targetHeight;
        float ww = targetWidth;
        int be = 1;
        if (w > h && w > ww) {
            be = (int) (newOpts.outWidth / ww);
        } else if (w < h && h > hh) {
            be = (int) (newOpts.outHeight / hh);
        }
        if (be <= 0) {
            be = 1;
        }
        newOpts.inSampleSize = be;
        bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length, newOpts);
        return compressImage(bitmap);
    }
    /**
     * 质量压缩方法
     * @param image
     * @return
     */
    public static Bitmap compressImage(Bitmap image) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        int options = 100;
        while (baos.toByteArray().length / 1024 > 100) {
            baos.reset();
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);
            options -= 10;
        }
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
        return bitmap;
    }
    /**
     * 只进行分辨率压缩,不进行图片的质量压缩
     * @param sourceBm
     * @param targetWidth
     * @param targetHeight
     * @return
     */
    public static Bitmap zipPicWithoutCompress(Bitmap sourceBm, float targetWidth, float targetHeight) {
        BitmapFactory.Options newOpts = new BitmapFactory.Options();
        newOpts.inJustDecodeBounds = true;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        sourceBm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] temp = baos.toByteArray();
        Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length, newOpts);
        newOpts.inJustDecodeBounds = false;
        int w = newOpts.outWidth;
        int h = newOpts.outHeight;
        float hh = targetHeight;
        float ww = targetWidth;
        int be = 1;
        if (w > h && w > ww) {
            be = (int) (newOpts.outWidth / ww);
        } else if (w < h && h > hh) {
            be = (int) (newOpts.outHeight / hh);
        }
        if (be <= 0) {
            be = 1;
        }
        newOpts.inSampleSize = be;
        bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length, newOpts);
        return bitmap;
    }
}

2、Luban库

功能:Luban库是一个强大的图片压缩库,支持多线程异步压缩,并提供回调方法处理压缩结果。

主要方法

with():静态方法,返回Builder对象,用于配置压缩参数。

load():加载图片文件或路径。

ignoreBy():设置忽略小于指定大小的文件。

如何实现Android开发中的图片压缩工具类完整实例?

setTargetDir():设置压缩后图片存放位置。

setCompressListener():设置压缩回调监听器。

launch():开始压缩。

代码实现

import com.github.yalantis.ucrop.UCrop;
import com.github.yalantis.ucrop.model.ExifInfo;
import com.github.yalantis.ucrop.util.BitmapLoadUtils;
import com.yalantis.ucrop.task.BitmapCropTask;
import com.yalantis.ucrop.callback.BitmapCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.Nullable;
import androidx.core.util.Pair;
import com.yalantis.ucrop.util.DiskOutputRunnable;
import com.yalantis.ucrop.view.GalleryBrowserFragment;
import com.yalantis.ucrop.view.GalleryBrowserFragmentNew;
import com.yalantis.ucrop.view.UCropView;
public class Luban {
    private List<String> mPaths;
    private String mTargetDir;
    private int mLeastCompressSize = 100; // 忽略100kb以下的图片,不压缩
    private OnCompressListener mCompressListener; // 回调方法
    private Context mContext;
    private Handler mHandler;
    private boolean mCanceled = false; // 是否取消任务标志位,用于停止当前正在执行的任务(如果存在)
    private boolean mPaused = false; // 是否暂停任务标志位,用于暂停所有正在执行的任务(如果存在)
    private boolean mDestroyed = false; // 是否销毁任务标志位,用于终止所有正在执行的任务(如果存在)
    private boolean mIsProcessing = false; // 是否正在处理任务标志位,防止重复开启新任务覆盖老任务
    private boolean mEnableLog = true; // 是否开启日志输出,默认开启
    private boolean mEnablePixelPerfectSampling = true; // 是否启用完美采样,默认启用,即使用最接近原图尺寸的采样率来压缩图片
    private boolean mEnableRotationPreservation = true; // 是否保留图片旋转信息,默认保留
    private boolean mEnableExifInterface = true; // 是否启用Exif接口读取图片信息,默认启用
    private boolean mEnableMemoryCache = true; // 是否启用内存缓存,默认启用,可以有效减少重复读取同一资源文件的次数,提高性能和用户体验,但请注意,在低内存设备上可能会增加OOM的风险,在实际应用中需要根据具体情况权衡利弊来决定是否启用此选项,建议开发者在使用前充分测试并评估其对应用性能的影响后再做决定,也可以根据实际需求调整缓存策略以达到最佳效果,可以限制最大缓存数量或者采用LRU(最近最少使用)算法等策略来管理缓存空间,还需要注意及时清理不再使用的缓存项以避免内存泄漏问题的发生,请务必谨慎操作以确保应用的稳定性和流畅性!谢谢您的理解和支持!祝您使用愉快!😊👍✨🌟🌠🌈💫💖😘🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🤣😂😁😆😅🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪🤪⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐���͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�͂�́����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777

以上内容就是解答有关“Android开发之图片压缩工具类完整实例”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/624274.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-11-01 07:56
Next 2024-11-01 07:57

相关推荐

  • 如何实现访问泛域名解析到子域名?

    泛域名解析到子域名泛域名解析是一种高级的域名解析技术,通过使用通配符(*)作为次级域名,实现所有次级域名均指向同一IP地址,这种技术在实际应用中具有广泛的作用,如支持无限子域名、防止用户错误输入导致的网站无法访问等问题,以下是关于泛域名解析到子域名的详细解释:一、泛域名解析的概念泛域名解析,也称为泛解析,是指利……

    2024-11-11
    04
  • 数据库空间管理:保障数据库性能与可靠性「数据库空间管理:保障数据库性能与可靠性的关系」

    一、数据库空间管理的重要性数据库空间管理是数据库管理的重要组成部分,它涉及到数据库的存储、检索和更新等操作,有效的数据库空间管理可以保障数据库的性能和可靠性,提高数据的可用性和访问速度,降低数据丢失和错误的风险。数据库空间管理可以提高数据的可用性,通过合理的空间分配和利用,可以避免数据的空间浪费,保证数据的有效利用,通过对数据的备份和……

    2023-11-16
    0131
  • 香港服务器网站崩溃的原因有哪些呢

    香港服务器网站崩溃的原因可能有多种,这些原因可能与服务器硬件、软件、网络问题、安全性问题或配置问题有关。以下是一些可能导致香港服务器网站崩溃的常见原因:1. 服务器硬件故障,如硬盘故障、内存故障等;2. 服务器软件问题,如系统崩溃、病毒感染等;3. 网络问题,如网络带宽不足、网络延迟高等;4. 安全问题,如黑客攻击、DDoS攻击等;5. 配置问题,如服务器配置不当等 。

    2024-01-05
    092
  • 怎么提高日本服务器网站的访问速度

    随着互联网的普及,越来越多的企业和个人开始使用日本服务器来搭建网站,由于地理位置的限制,访问日本服务器的网站可能会遇到速度较慢的问题,如何提高日本服务器网站的访问速度呢?答:优化WordPress网站的方法有很多,以下是一些建议:选择一个优质的主机服务商;升级到最新版本的WordPress;再次,优化网站代码,如压缩图片、合并CSS和JavaScript文件等;使用CDN和SSL证书来提高访问

    2023-12-10
    0137
  • 新加坡vps租用有哪些优点和缺点呢

    新加坡VPS租用优点与缺点分析新加坡VPS租用的优点1、数据中心优势新加坡作为全球互联网枢纽,拥有世界顶级的数据中心,新加坡政府对互联网基础设施的投资和管理非常重视,因此在数据中心的硬件设施、网络环境和安全保障方面都有很高的标准,这使得新加坡VPS在稳定性、速度和安全性方面具有很大的优势。2、网络环境优越新加坡地理位置独特,位于东南亚……

    2024-01-11
    0113
  • 境外云服务器租用要多少钱一个月

    在当今的数字化时代,越来越多的企业和个人开始使用云服务器来托管他们的网站、应用程序和其他在线业务,境外云服务器租用是一种常见的选择,因为它可以提供更高的性能、更好的安全性和更多的扩展性,境外云服务器租用要多少钱呢?本文将详细介绍境外云服务器租用的价格因素、选择建议以及相关问题解答。境外云服务器租用价格因素1、服务器配置境外云服务器的价……

    2024-03-29
    0164

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入