本文记录使用Android时关于图片所遇到的坑。
主要记录以下问题:
- 如何获取相册中的图片
- 如何剪裁所得到的图片
- 如何拍照并剪裁图片
- 如何压缩图片
- 图片保存在手机本地的存取
- 图片在APP与服务器之间的传输
如何获取相册中的图片
简单来说,我们就是要写一个Intent去相册中挑选图片,见代码:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(intent, GET_FROM_GALLERY);
这样我们就能改onActivtyResult中接收的到的数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case GET_FROM_GALLERY:
if(resultCode == Activity.RESULT_OK){
//获取所选照片的URI
Uri selectedImage = data.getData();
// 设置照片
// Bitmap bitmap = null;
// try {
// bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
// } catch (IOException e) {
// e.printStackTrace();
// }
// image.setImageBitmap(bitmap);
performCrop(selectedImage);
}
break;
这样我们就能简单的获得所选图片的Uri,从而进一步对图片操作,剪裁图片的方法就再performCrop(selectedImage)里。如果你想直接将所选择的图片设置起来,就是上面代码片段中被注释掉的那一部分了。
如何剪裁所得到的图片
首先我们要的到图片的Uri,然后再写一个Intent,没错,剪裁其实是调用了系统的图片编辑器,所以还是要用Intent,如果你想实现自己的剪裁器或某些特效(比如微信的头像剪裁),那就要辛苦一下自己写个工具类了。
关于启动系统剪裁的Intent是这么写的:
/**
* 剪裁图片, 要得到图片的uri才能使用, 可以先启动选择图片的intent, 然后在onActivityResult中
* 得到uri, 然后再调用这个方法
* @param contentUri 需要剪裁的图片的uri
*/
private void performCrop(Uri contentUri) {
try {
//Start Crop Activity
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(contentUri, "image/*");
// set crop properties
cropIntent.putExtra("crop", "true");
// indicate aspect of desired crop
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY",