BitmapUtils 压缩有问题
lovemianhuatang opened this issue · 15 comments
/**
* 按质量压缩 ( 图片大小 )
* @param bitmap 待操作源图片
* @param maxByteSize 允许最大值字节数
* @return 质量压缩过的图片
*/
public static Bitmap compressByByteSize(final Bitmap bitmap, final long maxByteSize) {
return compressByByteSize(bitmap, Bitmap.CompressFormat.JPEG, maxByteSize, null);
}
/**
* 按质量压缩 ( 图片大小 )
* @param bitmap 待操作源图片
* @param format 图片压缩格式
* @param maxByteSize 允许最大值字节数
* @return 质量压缩过的图片
*/
public static Bitmap compressByByteSize(final Bitmap bitmap, final Bitmap.CompressFormat format, final long maxByteSize) {
return compressByByteSize(bitmap, format, maxByteSize, null);
}
请问是压缩什么类型的图片(PNG 是无损的,不能进行压缩),需要实现什么功能,该方法是质量压缩,压缩后的 Bitmap 内存大小并不会减少
截长图太大了 想控制在1M以下
如果你压缩后还需要显示,只能压缩宽高、以及设置 Bitmap.Config.RGB_565
如果你是需要保存的图片控制在指定的大小内,我可以提供一个方法获取一个最佳的压缩比例方法 (getQuality),通过传入大小值,搭配 ImageUtils.saveBitmapToSDCardJPEG(bitmap, filePath, quality) 使用
PathUtils.getAppExternal().getAppPicturesPath() + DevCommonUtils.getRandomUUIDToString() + ".jpg";
图片存在这个位置 我用MediaStoreUtils的 MediaStoreUtils.insertImage(MediaStoreUtils.createImageUri(),uri);
刷新相册 发现在相册找不到 请问是路径的问题吗? 我需要保存在哪好些?
需要这样使用
这里需要 + 上 "/" (可加可不加,非该问题)
String path = PathUtils.getAppExternal().getAppPicturesPath() + "/" + DevCommonUtils.getRandomUUIDToString() + ".jpg"
问题出在传入的 uri
Uri uri = UriUtils.getUriForFile(new File(path));
MediaStoreUtils.insertImage(MediaStoreUtils.createImageUri(), uri);
因为内部存储分享出去,需要进行 FileProvider 操作
你那个是什么手机、Android 版本
刚才那个压缩的,你最终需要在另外一个页面显示的话,只能进行缩放宽高、设置 Bitmap.Config.RGB_565、以及修改采样率来显示。
至于保存的话,我下个版本会提供一个传入指定大小值返回最佳的压缩比例的方法
三星G9280 安卓6.0.1
有尝试过 MediaStoreUtils#insertImage(final String filePath, final String name, final boolean notify) 方法能够显示吗,在 Pictures 或 DCIM 有存储的那张图片不
MediaStoreUtils.insertImage(MediaStoreUtils.createImageUri(),uri);
我用这个 Pictures目录下是有图片的 但相册没显示
MediaStoreUtils#insertImage(final String filePath, final String name, final boolean notify) 不行 Pictures 或 DCIM 没有文件
你这样,保存还是用 MediaStoreUtils.insertImage(MediaStoreUtils.createImageUri(),uri);
Uri imageUri = MediaStoreUtils.createImageUri();
MediaStoreUtils.insertImage(imageUri, uri);
String filePath = UriUtils.getFilePathByUri(imageUri);
MediaStoreUtils.notifyMediaStore(filePath);
看这样是否会刷新,通知相册
有了 谢谢
那个压缩的问题,保存指定大小内的话我已经新增方法了(calculateQuality 你可以直接复制这个代码搭配 saveBitmapToSDCardJPEG 使用)
如果你保存后需要显示的话,则需要使用 BitmapUtils#compressBySampleSize 或 compressByScale (缩小到与屏幕宽度相同的宽度)以及把 Bitmap 修改为 Bitmap.Config.RGB_565,减少内存占用大小