Android上传头像,图片剪裁,压缩图片

压缩图片搞的我唠嗑疼,有的从网上找的压根不能用。。。

下面看看我整理的吧:

点击头像的时候开始调用camera()方法

 1 private byte[] mContent = new byte[1024];// 保存照片转换后的字节,用与上传到服务器
 2  private Bitmap myBitmap;
 3  private static final int REQUEST_CAMERA = 1;
 4  private static final int REQUEST_CALENDAR = 2;
 5 
 6  
 7 
 8 public void camera() {
 9   final CharSequence[] items = { "相册", "拍照" };
10   AlertDialog dlg = new AlertDialog.Builder(PersonDataActivity.this)
11     .setTitle("选择图片")
12     .setItems(items, new DialogInterface.OnClickListener() {
13      public void onClick(DialogInterface dialog, int item) {
14       // 这里item是根据选择的方式,
15 
16       // 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
17       if (item == 1) {
18        Intent getImageByCamera = new Intent(
19          "android.media.action.IMAGE_CAPTURE");
20        startActivityForResult(getImageByCamera,
21          REQUEST_CAMERA);
22       } else {
23        Intent getImage = new Intent(
24          Intent.ACTION_GET_CONTENT);
25        getImage.addCategory(Intent.CATEGORY_OPENABLE);
26        getImage.setType("image/jpeg");
27        startActivityForResult(getImage, 0);
28       }
29      }
30     }).create();
31   dlg.show();
32  }
33 
34  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
35   super.onActivityResult(requestCode, resultCode, data);
36   ContentResolver resolver = getContentResolver();
37   if (requestCode == 0) {
38    try {
39     Uri originalUri = data.getData();
40     startPhotoZoom(originalUri);// 图片剪裁
41     Bitmap bm = yasuo(originalUri);
42     // Bitmap bm = (Bitmap) data.getExtras().get("data");
43     // Bitmap bb = ThumbnailUtils.extractThumbnail(bm, 420, 320);
44     Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(
45       getContentResolver(), bm, null, null));
46 
47     mContent = CameraUtils.readStream(resolver.openInputStream(Uri
48       .parse(uri.toString())));
49     // 将字节数组转换为ImageView可调用的Bitmap对象
50     // myBitmap = CameraUtils.getPicFromBytes(mContent, null);
51     // //把得到的图片绑定在控件上显示
52     // img_touxiang.setImageBitmap(myBitmap);
53     // 处理圆角
54     // Bitmap icon = CameraUtils.toRoundCorner(myBitmap);
55     // img_touxiang.setImageBitmap(icon);
56    } catch (Exception e) {
57     // TODO: handle exception
58     e.printStackTrace();
59    }
60   } else if (requestCode == REQUEST_CAMERA) {
61    try {
62     super.onActivityResult(requestCode, resultCode, data);
63     Bundle extras = data.getExtras();
64     myBitmap = (Bitmap) extras.get("data");
65     ByteArrayOutputStream baos = new ByteArrayOutputStream();
66     myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
67     mContent = baos.toByteArray();
68    } catch (Exception e) {
69     // TODO: handle exception
70     e.printStackTrace();
71    }
72    // iv_icon.setImageBitmap(Utils.toRoundCorner(myBitmap, 10));//
73    // 把拍摄的照片转成圆角显示在预览控件上
74    // Bitmap icon = Utils.toRoundCorner(myBitmap, 65);
75    // img_touxiang.setImageBitmap(myBitmap);
76 
77   } else if (requestCode == REQUEST_CALENDAR) {
78    if (requestCode == RESULT_OK) {
79 
80    }
81   }
82   if (data != null) {
83    getImageToView(data);
84   }
85   // 上传到数据库,并修改页面图像
86   HashMap<String, Object> map = service.updateAvatar(uid, mContent,
87     "android", String.valueOf(1020));
88   if (map != null && !"".equals(map.get("newAvatar").toString())) {
89    // 处理返回的新头像地址
90    // 重新保存图片
91    spf = getSharedPreferences("data", 0);
92    Editor e = spf.edit();
93    e.putString("avatar", map.get("newAvatar").toString());
94    e.commit();
95 
96   } else {
97    Utils.showToast(PersonDataActivity.this, "上传头像失败");
98   }
99  }
 1 /**
 2   * 裁剪图片方法实现
 3   * 
 4   * @param uri
 5   */
 6  public void startPhotoZoom(Uri uri) {
 7 
 8   Intent intent = new Intent("com.android.camera.action.CROP");
 9   intent.setDataAndType(uri, "image/*");
10   // 设置裁剪
11   intent.putExtra("crop", "true");
12   // aspectX aspectY 是宽高的比例
13   intent.putExtra("aspectX", 1);
14   intent.putExtra("aspectY", 1);
15   // outputX outputY 是裁剪图片宽高
16   intent.putExtra("outputX", 320);
17   intent.putExtra("outputY", 320);
18   intent.putExtra("return-data", true);
19   startActivityForResult(intent, 2);
20  }
21 
22  /**
23   * 保存裁剪之后的图片数据
24   * 
25   * @param picdata
26   */
27  private void getImageToView(Intent data) {
28   Bundle extras = data.getExtras();
29   if (extras != null) {
30    Bitmap photo = extras.getParcelable("data");
31    Drawable drawable = new BitmapDrawable(photo);
32    img_touxiang.setImageDrawable(drawable);
33   }
34  }
35 
36 /**
37 
38 *压缩图片
39 
40 *
41 
42  private Bitmap yasuo(Uri uri) {
43   Bitmap bitmap = null;
44   try {
45 
46    BitmapFactory.Options options = new BitmapFactory.Options();
47    options.inJustDecodeBounds = true;
48    bitmap = BitmapFactory.decodeStream(this.getContentResolver()
49      .openInputStream(uri), null, options);
50    int picWidth = options.outWidth;
51    int picHeight = options.outHeight;
52    WindowManager windowManager = getWindowManager();
53    Display display = windowManager.getDefaultDisplay();
54    int screenWidth = display.getWidth();
55    int screenHeight = display.getHeight();
56    options.inSampleSize = 1;
57    if (picWidth > picHeight) {
58     if (picWidth > screenWidth)
59      options.inSampleSize = picWidth / screenWidth;
60    } else {
61     if (picHeight > screenHeight)
62      options.inSampleSize = picHeight / screenHeight;
63    }
64    options.inJustDecodeBounds = false;
65    bitmap = BitmapFactory.decodeStream(this.getContentResolver()
66      .openInputStream(uri), null, options);
67    img_touxiang.setImageBitmap(bitmap);
68    /*
69     * if (bitmap.isRecycled() == false) { bitmap.recycle(); }
70     */
71    System.gc();
72   } catch (Exception e1) {
73   }
74   return bitmap;
75 
76 }
原文地址:https://www.cnblogs.com/ggzjj/p/2858958.html