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); }

android怎么设置尺寸(bitmap缩放大小不一致)(1)

2.以上是拍照代码,用到的中间代码

/* * 判断sdcard是否被挂载 */ public static boolean hasSdcard() { return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); }

android怎么设置尺寸(bitmap缩放大小不一致)(2)

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; } }

android怎么设置尺寸(bitmap缩放大小不一致)(3)

,