栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于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变量

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/720694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号