package com.example.kjdskjf; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; import android.support.v4.app.Fragment; import android.util.Log; import android.widget.Toast; public class PhotoUtil { private static final File pubFile = MyApplication.getAppContext() .getExternalFilesDir(Environment.DIRECTORY_PICTURES); public static final File file1 = new File(pubFile, "temp1.jpg");// 拍照路径 public static final File file2 = new File(pubFile, "temp2.jpg");// 剪裁路径 public static final File file3 = new File(pubFile, "temp3.jpg");// 压缩路径 /** * 返回码 */ public static final int NONE = 0; /** * 拍照 */ public static final int PHOTOGRAPH = 1; /** * 相册 */ public static final int PHOTOALBUM = 2; /** * 剪裁 */ public static final int CLIPPING = 3; /** * @param activity * 吊起相册或拍照 */ public static void getPhoto(final Activity activity) { final CharSequence[] items = { "相册", "拍照" }; AlertDialog dlg = new AlertDialog.Builder(activity).setTitle("选择图片") .setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { if (item == 1) { Log.i("aini", "调用系统相机"); Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE"); getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file1)); activity.startActivityForResult(getImageByCamera, PHOTOGRAPH); } else { Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); getImage.addCategory(Intent.CATEGORY_OPENABLE); getImage.setType("image/jpeg"); activity.startActivityForResult(getImage, PHOTOALBUM); } } }).create(); dlg.show(); } /** * 调起拍照 */ public static void takePhoto(Activity activity) { Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE"); getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file1)); activity.startActivityForResult(getImageByCamera, PHOTOGRAPH); } /** * 调起相册 */ public static void pickPhoto(Activity activity) { Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); getImage.addCategory(Intent.CATEGORY_OPENABLE); getImage.setType("image/jpeg"); activity.startActivityForResult(getImage, PHOTOALBUM); } /** * 拍照返回调用 */ public static void onPhotoFromCamera(Activity activity) { startPhotoZoom(Uri.fromFile(file1), activity); } /** * 相册返回调用 */ public static void onPhotoFromPick(Activity activity, Uri uri) { startPhotoZoom(uri, activity); } /** * @param compress * 0``100 100表示原图 返回剪裁的图片 */ public static Bitmap getBitmap(int compress) { try { Bitmap bm = BitmapFactory.decodeFile(file2.getAbsolutePath()); OutputStream outStream = new FileOutputStream(file3); bm.compress(android.graphics.Bitmap.CompressFormat.JPEG, compress, outStream); } catch (FileNotFoundException e) { e.printStackTrace(); } return BitmapFactory.decodeFile(file3.getAbsolutePath()); } public static void startPhotoZoom(Uri uri, Activity activity) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file2)); // outputX outputY 是裁剪图片宽高 // intent.putExtra("outputX", 100); // intent.putExtra("outputY", 100); intent.putExtra("return-data", false); activity.startActivityForResult(intent, CLIPPING); } /* * 用的activity调用这个 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == PhotoUtil.NONE) return; if (requestCode == PhotoUtil.PHOTOALBUM) { PhotoUtil.onPhotoFromPick(this, data.getData()); } else if (requestCode == PhotoUtil.PHOTOGRAPH) { PhotoUtil.onPhotoFromCamera(this); } else if (requestCode == PhotoUtil.CLIPPING) { Bitmap bitmap = PhotoUtil.getBitmap(100); imageView.setImageBitmap(bitmap); } } */ /* * 用的fragment的activity调用这个 * 解决fragment不能接到intent问题 * @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { myfragment.onActivityResult(int requestCode, int resultCode, Intent data){}; } */ /* * Appication中写如下代码 * private static Context context; public void onCreate(){ super.onCreate(); MyApplication.context = getApplicationContext(); } public static Context getAppContext() { return MyApplication.context; } */ }
拍照相册完美解决失真问题
最新推荐文章于 2021-05-31 18:16:56 发布