package com.sjl.yuehu.util; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.provider.MediaStore; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Serializable; public class CameraGalleryUtil { public static final int HEAD_IMG_SIZE = 256; public static final int PRODUCT_INVOICE_SIZE = 720; public static final int IDCARD_IMG_WIDTH = 428; public static final int IDCARD_IMG_HEIGHT = 270; public static final int REQUEST_CODE_CAMERA = 1; public static final int REQUEST_CODE_GALLERY = 2; public static final int REQUEST_CODE_CROP = 3; File file; Uri imageUri = null; Uri corpUri = null; Context context; String dateString; public CameraGalleryUtil(Context context) { this(context, StringUtil.Date2String()); } public CameraGalleryUtil(Context context, String dateString) { this.context = context; this.dateString = dateString; file = new File(CacheUtil.getImageCacheDir(context) + File.separator + dateString + ".jpg"); if (!file.exists()) try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } imageUri = Uri.fromFile(file); } public Intent cameraIntent() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); return intent; } public Intent cropIntent(boolean keepRatio, int aspectX, int aspectY, int outputX, int outputY) { file = new File(CacheUtil.getImageCacheDir(context) + File.separator + dateString + "-copy.jpg"); if (!file.exists()) try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } corpUri = Uri.fromFile(file); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(imageUri, "image/*"); intent.putExtra("crop", "true"); if (keepRatio) { if (android.os.Build.MODEL.contains("HUAWEI")) { intent.putExtra("aspectX", 9998); intent.putExtra("aspectY", 9999); } else { intent.putExtra("aspectX", aspectX); intent.putExtra("aspectY", aspectY); } } intent.putExtra("outputX", outputX); intent.putExtra("outputY", outputY); intent.putExtra("scale", true); intent.putExtra("scaleUpIfNeeded", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, corpUri); intent.putExtra("return-data", false); intent.putExtra("noFaceDetection", true); // no face detection intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); return intent; } public Uri getImageUri() { return imageUri; } public Uri getCorpUri() { return corpUri; } public Intent galleryIntent() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); return intent; } public boolean saveBitmapFromUri(Uri uri) { try { Bitmap bitmap = BitmapUtil.getBitmapFormUri(context, uri); if (bitmap == null) return false; FileOutputStream fout = new FileOutputStream(file); BufferedOutputStream bout = new BufferedOutputStream(fout, 1024 * 8); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bout); try { bout.flush(); bout.close(); fout.close(); bitmap.recycle(); } catch (IOException e) { e.printStackTrace(); } return true; } catch (IOException e) { e.printStackTrace(); } return false; } public Intent saveBitmapFromUri(Uri uri, boolean keepRatio, int aspectX, int aspectY, int outputX, int outputY) { Bitmap bitmap = null; try { bitmap = BitmapUtil.getBitmapFormUri(context, uri); } catch (IOException e) { e.printStackTrace(); } return saveBitmap(bitmap, keepRatio, aspectX, aspectY, outputX, outputY); } private Intent saveBitmap(Bitmap bitmap, boolean keepRatio, int aspectX, int aspectY, int outputX, int outputY) { if (bitmap == null) return null; FileOutputStream fout = null; BufferedOutputStream bout = null; try { fout = new FileOutputStream(file); bout = new BufferedOutputStream(fout, 1024 * 8); } catch (Exception e) { e.printStackTrace(); } bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bout); try { bout.flush(); bout.close(); fout.close(); bitmap.recycle(); } catch (IOException e) { e.printStackTrace(); } return cropIntent(keepRatio, aspectX, aspectY, outputX, outputY); } }