android 安卓保存图片到手机相册并且解决图片发黄问题

发布于 2019-12-30 11:44:55

最近在研究怎么将安卓应用中的图片保存到手机相册。并且解决有一些手机保存图片到相册会出现发黄的问题。

如果要保存图片先在manifest中开启读写权限。

<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在安卓6之后还要在java代码中动态开启
//开启权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{android

    .Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

首先获取到图片的bitmap对象,我使用的是Glide来加载图片所以就可以从Glide中获取到bitmap。

String url = "图片地址";
Glide.with(this)

    .load(url)
    .asBitmap()
    .dontTransform()
    .placeholder(R.drawable.back)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .listener(new RequestListener<String, Bitmap>() {
        @Override
        public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
            return false;
        }

        @Override
        public boolean onResourceReady(Bitmap bitmap, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
            picWidth =  bitmap.getWidth();
            picHeight = bitmap.getHeight();
            mbitmap = bitmap;
            return false;
        }

    })
    .into(imageView);

然后保存图片的核心就是在这里。你可以直接保存到一个文件夹里面,也可以不为你的应用创建文件夹,但是这样图片看起来就会很凌乱。

当然还可以利用系统提供的api插入到系统相册,最后通知相册更新。

public static void saveImageToGallery(Context context, Bitmap bmp) {

    // 创建文件夹
    File appDir = new File(Environment.getExternalStorageDirectory(), "Test");
    //判断不存在就创建
    if (!appDir.exists()) {
        appDir.mkdir();
    }
    //以时间命名
    String fileName = System.currentTimeMillis() + ".jpg";
    File file = new File(appDir, fileName);
    try {
        FileOutputStream fos = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 其次把文件插入到系统图库
    try {
        MediaStore.Images.Media.insertImage(context.getContentResolver(),
                file.getAbsolutePath(), fileName, null);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    // 最后通知图库更新
    String path = Environment.getExternalStorageDirectory().getPath();
    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
}

}
在某一些手机上会出现保存的图片发黄的问题,比如小米和乐视,华为没有发现这个问题。
只要将保存的格式改为png,就正常了。

//以时间命名
String fileName = System.currentTimeMillis() + ".png";
File file = new File(appDir, fileName);
try {

FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);

————————————————
版权声明:本文为CSDN博主「哥布林飞桶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38379772/article/details/78565684

0 条评论

发布
问题

官网
微信

官方微信