拍照相册完美解决失真问题

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 11:01   11   0
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; 
     } 
     
     */

}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP