最近项目中用到的,做个笔记备份一下,so,请往下看~
相册及拍照上传部分 /** * @Description 打开系统相册 * @param null * @return void * @throws */ private void album2Photo() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, SYS_INTENT_REQUEST); } /** * @Description 调用相机拍照 * @param null * @return void * @throws */ private void camera2Photo() { String sdStatus = Environment.getExternalStorageState(); /* 检测sd是否可用 */ if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { ToolUtils.showToast("SD卡不可用!"); return; } Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, CAMERA_INTENT_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SYS_INTENT_REQUEST && resultCode == RESULT_OK && data != null) { try { Uri uri = data.getData(); Cursor cursor = getContentResolver().query(uri, null, null, null, null); cursor.moveToFirst(); String imageFilePath = cursor.getString(1); Log.i("yzh","File path is----->" + imageFilePath); FileInputStream fis = new FileInputStream(imageFilePath); bitmap = BitmapFactory.decodeStream(fis); int width = bitmap.getWidth(); int height = bitmap.getHeight(); Log.i("yzh","压缩前的宽高----> width: " + width + " height:" + height); /* 压缩获取的图像 */ account_headshot_img.setImageBitmap(compressBigBitmap(bitmap, false)); fis.close(); cursor.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else if (requestCode == CAMERA_INTENT_REQUEST && resultCode == RESULT_OK && data != null) { getPhoto4Camera(data); } super.onActivityResult(requestCode, resultCode, data); } /** * @Description 获取压缩后的bitmap,避免图片过大 * @param Bitmap;boolean * @return Bitmap * @throws */ private Bitmap compressBigBitmap(Bitmap bitmap, boolean isCamera) { Bitmap destBitmap = null; /* 图片宽度调整为100,大于这个比例的,按一定比例缩放到宽度为100 */ if (bitmap.getWidth() > 80) { float scaleValue = (float) (80f / bitmap.getWidth()); Log.i("yzh", "缩放比例:"+scaleValue); Matrix matrix = new Matrix(); /* 针对系统拍照,旋转90° 避免横屏*/ if (isCamera){ //matrix.setRotate(90); } matrix.postScale(scaleValue, scaleValue); destBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); int widthTemp = destBitmap.getWidth(); int heightTemp = destBitmap.getHeight(); Log.i("yzh", "压缩后的宽高----> width: " + heightTemp + " height:" + widthTemp); } else { return bitmap; } return destBitmap; } /** * @Description 拍照后获取照片 * @param Intent * @return void * @throws */ private void getPhoto4Camera(Intent data) { SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String name = formatter.format(System.currentTimeMillis()) + ".jpg"; Log.i("yzh", "image name:" + name); Bundle bundle = data.getExtras(); /* 获取相机返回的数据,并转换为Bitmap图片格式 */ Bitmap bitmap = (Bitmap) bundle.get("data"); FileOutputStream fileOut = null; String path = Environment.getExternalStorageDirectory().getPath(); File file = new File(path + "/SCZW/"); /** 检测文件夹是否存在,不存在则创建文件夹 **/ if (!file.exists() && !file.isDirectory()) file.mkdirs(); String fileName = file.getPath() + "/" + name; Log.i("yzh", "camera file path:" + fileName); try { fileOut = new FileOutputStream(fileName); /* 把数据写入文件 */ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOut); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { if (fileOut == null) return; fileOut.flush(); fileOut.close(); } catch (IOException e) { e.printStackTrace(); } } account_headshot_img.setImageBitmap(compressBigBitmap(bitmap, true)); }