برش تصاویر گالری و دوربین با استفاده از crop در اندورید
پنجشنبه 17 فروردین 1396در این مقاله قصد داریم با استفاده از crop یک عکس را که در گالری گوشی قرار دارد یا اینکه خودمان با استفاده از دوربین گوشی گرفتیم را برش نماییم و بعد از آن تایید کنیم و یا دوباره عکس بگیریم ,و عکس برش داده شده را نمایش دهیم.
در این سمپل شما می توانید یک عکس را از گالری گوشی خود انتخاب نمایید و یا اینکه یک عکس با دوربین بگیرید:
ابتدا باید مجوزهای دسترسی به دوربین را بدهید:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" />
کد های کلاس شما به صورت زیر خواهد بود:
import android.Manifest;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
Button buttonCamera, buttonGallery ;
File file;
Uri uri;
Intent CamIntent, GalIntent, CropIntent ;
public static final int RequestPermissionCode = 1 ;
DisplayMetrics displayMetrics ;
int width, height;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.imageview);
buttonCamera = (Button)findViewById(R.id.button2);
buttonGallery = (Button)findViewById(R.id.button1);
EnableRuntimePermission();
buttonCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClickImageFromCamera() ;
}
});
buttonGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GetImageFromGallery();
}
});
}
public void ClickImageFromCamera() {
CamIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(Environment.getExternalStorageDirectory(),
"file" + String.valueOf(System.currentTimeMillis()) + ".jpg");
uri = Uri.fromFile(file);
CamIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
CamIntent.putExtra("return-data", true);
startActivityForResult(CamIntent, 0);
}
public void GetImageFromGallery(){
GalIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(Intent.createChooser(GalIntent, "Select Image From Gallery"), 2);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0 && resultCode == RESULT_OK) {
ImageCropFunction();
}
else if (requestCode == 2) {
if (data != null) {
uri = data.getData();
ImageCropFunction();
}
}
else if (requestCode == 1) {
if (data != null) {
Bundle bundle = data.getExtras();
Bitmap bitmap = bundle.getParcelable("data");
imageView.setImageBitmap(bitmap);
}
}
}
public void ImageCropFunction() {
// Image Crop Code
try {
CropIntent = new Intent("com.android.camera.action.CROP");
CropIntent.setDataAndType(uri, "image/*");
CropIntent.putExtra("crop", "true");
CropIntent.putExtra("outputX", 180);
CropIntent.putExtra("outputY", 180);
CropIntent.putExtra("aspectX", 3);
CropIntent.putExtra("aspectY", 4);
CropIntent.putExtra("scaleUpIfNeeded", true);
CropIntent.putExtra("return-data", true);
startActivityForResult(CropIntent, 1);
} catch (ActivityNotFoundException e) {
}
}
//Image Crop Code End Here
public void EnableRuntimePermission(){
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.CAMERA))
{
Toast.makeText(MainActivity.this,"CAMERA permission allows us to Access CAMERA app", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{
Manifest.permission.CAMERA}, RequestPermissionCode);
}
}
@Override
public void onRequestPermissionsResult(int RC, String per[], int[] PResult) {
switch (RC) {
case RequestPermissionCode:
if (PResult.length > 0 && PResult[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this,"Permission Granted, Now your application can access CAMERA.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this,"Permission Canceled, Now your application cannot access CAMERA.", Toast.LENGTH_LONG).show();
}
break;
}
}
}
در کلاس بالا یک متد برای باز کردن گالری و یک متد برای گرفتن عکس نوشته شده است
در لایه activity قطعه کد زیر را قرار دهید:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#FFECB3"
tools:context="com.android_examples.cropimage_android_examplescom.MainActivity">
<ImageView
android:layout_width="250dp"
android:layout_height="325dp"
android:id="@+id/imageview"
android:layout_centerHorizontal="true"
/>
<Button
android:text="Click Here For PICK image from Gallery TO CROP"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/imageview"
android:layout_centerHorizontal="true"
android:layout_marginTop="7dp"
android:id="@+id/button1" />
<Button
android:text="Click Here For CLICK image from Camera TO CROP"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_alignRight="@+id/button1"
android:layout_alignEnd="@+id/button1"
android:layout_marginTop="7dp"
android:id="@+id/button2" />
</RelativeLayout>
خروجی کار به صورت زیر خواهد بود:





- Android
- 2k بازدید
- 2 تشکر