برش تصاویر گالری و دوربین با استفاده از 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
- 1k بازدید
- 2 تشکر