网站首页 > 资源文章 正文
1.这里主要对拍照后的照片处理,拍照后的照片会传到远程服务器存储起来,但原始照片太大
需要缩小一些.首先拍照:
public void openCamera(Activity activity) {
//獲取系統版本
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
// 激活相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 判断存储卡是否可以用,可用进行存储
if (hasSdcard()) {
SimpleDateFormat timeStampFormat = new SimpleDateFormat(
"yyyy_MM_dd_HH_mm_ss");
String filename = timeStampFormat.format(new Date());
tempFile = new File(Environment.getExternalStorageDirectory(),
filename + ".jpg");
if (currentapiVersion < 24) {
// 从文件中创建uri
imageUri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
} else {
//兼容android7.0 使用共享文件的形式
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, tempFile.getAbsolutePath());
//检查是否有存储权限,以免崩溃
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//申请WRITE_EXTERNAL_STORAGE权限
Toast.makeText(this,"请开启存储权限",Toast.LENGTH_SHORT).show();
return;
}
imageUri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
}
}
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
activity.startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
}
2.以上是拍照代码,用到的中间代码
/*
* 判断sdcard是否被挂载
*/
public static boolean hasSdcard() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
3.然后拍照以后,对获取到的bitmap照片进行缩放:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case PHOTO_REQUEST_CAREMA:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
try {
//1.这里获取bitmap,相机拍摄的照片
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(imageUri));
Matrix matrix = new Matrix();
//2.然后这里判断系统的版本,这里如果是29,说明是android10,那么就用0.2的压缩比,原始大小
//30m,能压缩到200k左右
Integer sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK);
if(sdkVersion.equals(29)){ //android10 的时候用 0.2 压缩到200k左右
matrix.setScale(0.20f, 0.20f);
}else if(sdkVersion.equals(30)){//android11的时候用0.8
//3.如果是android11,那么原始大小1m,压缩比0.9能压缩到200k左右
matrix.setScale(0.90f, 0.90f);
}else{//其余版本用这个
//4.其余的android版本,用0.8的压缩比,能压缩到100多k,这样基本是可以满足,人脸识别等应用了.
matrix.setScale(0.80f, 0.80f);
}
//5.压缩后的照片
Bitmap bitScaleMap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
//6.压缩后的照片可以打印大小看看.
Log.i("wechat", "压缩后图片的大小" + (bitmap.getByteCount() / 1024 / 1024)
+ "M宽度为" + bitmap.getWidth() + "高度为" + bitmap.getHeight());
//7.压缩后的bitmap可以保存,这里会有另一个博文说保存这块.
tempzmFile = BitmapBaiDuUtils.saveImageReturnAndFile(bitScaleMap,getApplicationContext());
//tempzmFile = BitmapBaiDuUtils.saveImageReturnFile(bitmap);
picture.setImageBitmap(bitScaleMap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
}
}
猜你喜欢
- 2024-10-22 一位安卓程序员入坑Flutter后整理出一份超详细的学习笔记
- 2024-10-22 关于Android 7.0(兼容6.0)拍照、裁剪的知识!
- 2024-10-22 应用程序与 AMS 的通讯实现——ActivityManager函数
- 2024-10-22 Android系统为什么要提供FileProvider机制
- 2024-10-22 Android 应用安全最佳实践(android软件安全)
- 2024-10-22 在这个要求高级开发的行情下,安卓初级开发怎样在面试中杀出重围
- 2024-10-22 Android 7.0 应用流程的启动分析和研究
- 2024-10-22 毕业就进大厂?必备Android校招面试技巧(含真题)
- 2024-10-22 组件是如何通信的?揭秘ARouter路由机制
- 2024-10-22 浅入浅出 Android 安全(五)Android应用层安全
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)