首页 > 解决方案 > 如何在 android studio(JAVA) 中压缩图像并将其存储在设备特定文件夹中

问题描述

我正在制作一个用于图像压缩的应用程序而且我是 Android 开发的新手......所以我的问题是我们在访问 JAVA 中的外部存储时遇到了一些问题......我已经尝试过

compile 'id.zelory:compressor:2.1.0'
compressedImage = new Compressor(this)
    .setMaxWidth(640)
    .setMaxHeight(480)
    .setQuality(75)
    .setCompressFormat(Bitmap.CompressFormat.WEBP)
    .setDestinationDirectoryPath(
        Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES
        ).getAbsolutePath()
    )
    .compressToFile(actualImage);

好的...那么我可以使用 WEBP_LOSSLESS 而不是 WEBP 用于 Android API 30 吗?主要问题是如何设置存储在特定文件夹中的目的地?

标签: javaandroiddeprecatedimage-resizingimage-compression

解决方案


getExternalStoragePublicDirectory列表替代品的红色弃用框:

Context#getExternalFilesDir(String)应用程序可以通过迁移到、 MediaStore或 等替代方案来继续访问存储在共享/外部存储上的内容 Intent#ACTION_OPEN_DOCUMENT

Bitmap.CompressFormat.WEBP还包含一个弃用通知:

此字段在 API 级别 30 中已弃用。转而支持更明确的 CompressFormat#WEBP_LOSSYCompressFormat#WEBP_LOSSLESS.


例如,这样的事情应该可以工作:

Context ctx = this;
File storeFolder = ctx.getExternalFilesDir(Environment.DIRECTORY_PICTURES);

compressedImage = new Compressor(this)
    .setMaxWidth(640)
    .setMaxHeight(480)
    .setQuality(75)
    .setCompressFormat(Bitmap.CompressFormat.WEBP_LOSSLESS)
    .setDestinationDirectoryPath(
        storeFolder.getAbsolutePath()
    )
    .compressToFile(actualImage);

推荐阅读