关于如何存储拍照的图片并获取到该图片的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;
}
以下着重展示一下关于压缩文件和存储到设备上的过程
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变量