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

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

如果要保存图片先在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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值