700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android调用系统裁剪功能 Android图片剪裁之调用系统剪裁

android调用系统裁剪功能 Android图片剪裁之调用系统剪裁

时间:2019-03-11 07:28:40

相关推荐

android调用系统裁剪功能 Android图片剪裁之调用系统剪裁

参考:

一. 原理

通过Intent打开系统自带的剪裁Activity,通过Intent设置Extra参数,进行剪裁参数的设定。剪裁结果的缩略图会保存在返回的data中,而大图要通过Uri进行保存(其实就是保存到自己建的文件里面)。

二. 剪裁时候可以设置的参数及简介

这是一张偷来的图片

三. 返回缩略图的使用步骤

获取要剪裁的图片(可以通过相册选择,也可以通过相机拍照)PS:此处演示从相册选择(就是从相册选取图片,然后返回一个图片路径的Uri)

//打开相册

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("image/*");

startActivityForResult(intent, REQ_PIC);

//onActivityResult()里面获取选择的图片

if (requestCode == REQ_PIC) {

mImageUri = data.getData();

crop();//获取到之后开始剪裁

}

设置剪裁Intent及参数

private void cropAndThumbnail(){

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(mImageUri, "image/*");//设置要缩放的图片Uri和类型

intent.putExtra("aspectX", 768);//宽度比

intent.putExtra("aspectY", 1024);//高度比

intent.putExtra("outputX", 768);//输出图片的宽度

intent.putExtra("outputY", 1024);//输出图片的高度

intent.putExtra("scale", true);//缩放

intent.putExtra("return-data", false);//当为true的时候就返回缩略图,false就不返回,需要通过Uri

intent.putExtra("noFaceDetection", false);//前置摄像头

startActivityForResult(intent, REQ_CROP);//打开剪裁Activity

}

startActivityForResult打开剪裁Activity

代码即为上面代码最后一句

onActivityResult回调里面进行数据处理(缩略图保存在返回的Intent的Bundle里面,然后通过data键可以取出)

if (requestCode == REQ_CROP) {

/*缩略图*/

if(data!=null){

Bundle bundle = data.getExtras();

Bitmap bitmap = bundle.getParcelable("data");

mImageView.setImageBitmap(bitmap);

Log.i(TAG, "onActivityResult: smallUri "+mSmallUri);

}

}

四. 返回原图的使用步骤

原图太大,Android不会保存到内存里面去,所以也不会返回到调用的Activity中,因此需要通过Uri保存到外部文件中。

获取要剪裁的图片(可以通过相册选择,也可以通过相机拍照)

代码同上1

设置剪裁Intent及参数

private void crop() {

/*新建用于存剪裁后图片的文件,并转化为Uri*/

File imageFile = createImageFile();

mSmallUri = Uri.fromFile(imageFile);

Log.i(TAG, "crop: " + mSmallUri);

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(mImageUri, "image/*");

intent.putExtra("aspectX", 768);

intent.putExtra("aspectY", 1024);

intent.putExtra("outputX", 768);

intent.putExtra("outputY", 1024);

intent.putExtra("scale", true);

intent.putExtra("return-data", false);//设置为不返回缩略图

intent.putExtra(MediaStore.EXTRA_OUTPUT, mSmallUri);//设置大图保存到文件

intent.putExtra("outputFormat", pressFormat.JPEG.toString());//保存的图片格式

intent.putExtra("noFaceDetection", false);

startActivityForResult(intent, REQ_CROP);

}

startActivityForResult打开剪裁Activity

代码即为上面代码最后一句

onActivityResult回调里面进行数据处理(文件对应的Uri)

try {

if (mSmallUri != null) {

Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(mSmallUri));

mImageView.setImageBitmap(bitmap);

} else {

Log.i(TAG, "onActivityResult: Uri is null");

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

五.源码

public class MainActivity extends AppCompatActivity {

private Button mButton;

private static final int REQ_CROP = 873;

private static final int REQ_PIC = 434;

private Uri mImageUri;

private ImageView mImageView;

private Uri mSmallUri;

private final String TAG = getClass().getSimpleName();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mButton = findViewById(R.id.button);//点击从相册选取照片

mImageView = findViewById(R.id.imageView);//显示剪裁后的图片

mButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("image/*");

startActivityForResult(intent, REQ_PIC);

}

});

}

private void crop() {

/*新建用于存剪裁后图片的文件,并转化为Uri*/

File imageFile = createImageFile();

mSmallUri = Uri.fromFile(imageFile);

Log.i(TAG, "crop: " + mSmallUri);

/*File image = new File(getExternalCacheDir() + "/demo.jpg");

Log.i(TAG, "crop: path " + image.getAbsolutePath());

mSmallUri = Uri.fromFile(image);*/

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(mImageUri, "image/*");

intent.putExtra("aspectX", 768);

intent.putExtra("aspectY", 1024);

intent.putExtra("outputX", 768);

intent.putExtra("outputY", 1024);

intent.putExtra("scale", true);

intent.putExtra("return-data", false);//设置为不返回缩略图

intent.putExtra(MediaStore.EXTRA_OUTPUT, mSmallUri);//设置大图保存到文件

intent.putExtra("outputFormat", pressFormat.JPEG.toString());//保存的图片格式

intent.putExtra("noFaceDetection", false);

startActivityForResult(intent, REQ_CROP);

}

/*缩略图*/

private void cropAndThumbnail() {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(mImageUri, "image/*");//设置要缩放的图片Uri和类型

intent.putExtra("aspectX", 768);//宽度比

intent.putExtra("aspectY", 1024);//高度比

intent.putExtra("outputX", 768);//输出图片的宽度

intent.putExtra("outputY", 1024);//输出图片的高度

intent.putExtra("scale", true);//缩放

intent.putExtra("return-data", false);//当为true的时候就返回缩略图,false就不返回,需要通过Uri

intent.putExtra("noFaceDetection", false);//前置摄像头

startActivityForResult(intent, REQ_CROP);

}

/*用时间创建图片文件,防重名*/

private File createImageFile() {

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

String imageFileName = "JPEG_" + timeStamp + "_";

File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

File imageFile = null;

try {

imageFile = File.createTempFile(imageFileName, ".jpg", storageDir);

} catch (IOException e) {

e.printStackTrace();

}

return imageFile;

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode != RESULT_OK) {

return;

}

if (requestCode == REQ_PIC) {//选取图片

mImageUri = data.getData();

crop();

} else if (requestCode == REQ_CROP) {//剪裁

/*缩略图*/

/*if(data!=null){

Bundle bundle = data.getExtras();

Bitmap bitmap = bundle.getParcelable("data");

mImageView.setImageBitmap(bitmap);

Log.i(TAG, "onActivityResult: smallUri "+mSmallUri);

}*/

/*原图*/

try {

if (mSmallUri != null) {

Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(mSmallUri));

mImageView.setImageBitmap(bitmap);

} else {

Log.i(TAG, "onActivityResult: Uri is null");

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。