关于Android项目相机使用(四)-------图像存储

关于Android项目相机使用(四)-------图像存储,第1张

关于Android项目相机使用(四)-------图像存储

关于如何存储拍照的图片并获取到该图片的uri用以后序处理

这里包括外存路径获取,文件存储,流传输,文件压缩等技术

public boolean saveImageToGallery(Bitmap bmp) {
    // 首先保存图片
    String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "title";
    File appDir = new File(storePath);
    if (!appDir.exists()) {
        appDir.mkdir();
    }
    String fileName = System.currentTimeMillis() + ".jpg";
    File file = new File(appDir, fileName);
    try {
        FileOutputStream fos = new FileOutputStream(file);
        //通过io流的方式来压缩保存图片
        //压缩图片需要注意(这里采用的是质量压缩:指代内存不变,压缩转化后的bytes.length减少用于传输,但是PNG并不会影响
        //使用JPEG格式压缩则质量是60,对一张透明图片(PNG)仅仅会失去透明度,对一张非透明图片不会有影响
        //使用PNG格式压缩质量是50,对PNG,JPEG图片都没有影响,但是并不会减少bytes.length,所以这里选择JPEG
        //注意,当质量为100的时候表示不压缩
        boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);
        fos.flush();
        fos.close();

        //把文件插入到系统图库
        MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), fileName, null);

        //保存图片后发送广播通知更新数据库
        Uri uri = Uri.fromFile(file);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));      //系统刷新相册
        if (isSuccess) {
            return true;
        } else {
            return false;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

可以看到上述代码是直接对bitmap格式的文件进行压缩和存储处理,关于bitmap文件的获取详情见:关于Android项目相机使用(一)--------相机调用_Hersiman的博客-CSDN博客

以下着重展示一下关于压缩文件和存储到设备上的过程

FileOutputStream fos = new FileOutputStream(file);

//通过io流的方式来压缩保存图片

//压缩图片需要注意(这里采用的是质量压缩:指代内存不变,压缩转化后的bytes.length减少用于传输,但是PNG并不会影响

//使用JPEG格式压缩则质量是60,对一张透明图片(PNG)仅仅会失去透明度,对一张非透明图片不会有影响

//使用PNG格式压缩质量是50,对PNG,JPEG图片都没有影响,但是并不会减少bytes.length,所以这里选择JPEG

//注意,当质量为100的时候表示不压缩

boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);

fos.flush();

fos.close();

//把文件插入到系统图库

MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), fileName, null);

//保存图片后发送广播通知更新数据库

Uri uri = Uri.fromFile(file);

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); //系统刷新相册

 首先需要打开一个所谓文件输出流,用以将刚刚获取到的bitmap文件放入流中

然后进行对流中文件进行压缩,详细的压缩信息在注释中

之后进行流 *** 作之后,进行实际插入并获取这里存入后文件的uri

注意:这里通知系统刷新相册并不是必须的,如果你需要立刻在设备上寻到该图片在图库中显示而不是手动重新打开相册的话,可以直接使用上述//系统刷新相册的代码,这里的传参是一个intent变量

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5717005.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存