0

Giới thiệu thư viện xoay, cắt ảnh đơn giản.

Lời nói đầu :

Chắc hẳn làm việc với image ai cũng đã có lần phải động tới việc xoay cắt ảnh , riêng với mình thì đã làm tương đối nhiều với mấy vụ cắt gọt này nên nhân đây chia sẻ cho mọi người 1 thư viện xoay , cắt ảnh hết sức đơn giản có thể dễ dàng custom cũng như sử dụng.

Chức năng chính của thư viện

cũng như mình chia sẻ mực đích chính của thư viện là xoay cắt ảnh nên bao gồm các chức năng sau: Suorce code mình sưu tầm trên github : https://github.com/biokys/cropimage

  • Chọn ảnh từ thư viện, hoặc trực tiếp từ camera
  • Crop ảnh , zom ảnh
  • Xoay ảnh
  • Lưu ảnh đã chỉnh sửa ( 😄 )

Chi tiết sử dụng :

Chọn ảnh từ thư viện :

    private void openGallery() {

        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, REQUEST_CODE_GALLERY);
    }

Mở camera chụp ảnh

    private void takePicture() {

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        try {
        	Uri mImageCaptureUri = null;
        	String state = Environment.getExternalStorageState();
        	if (Environment.MEDIA_MOUNTED.equals(state)) {
        		mImageCaptureUri = Uri.fromFile(mFileTemp);
        	}
        	else {
	        	mImageCaptureUri = InternalStorageContentProvider.CONTENT_URI;
        	}	
            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
        } catch (ActivityNotFoundException e) {

            Log.d(TAG, "cannot take picture", e);
        }
    }

Chú ý trong activity sử dụng 2 hàm chọn ảnh và mở camera, bạn override hàm onActivityResult như sau :

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

        if (resultCode != RESULT_OK) {

            return;
        }

        Bitmap bitmap;

        switch (requestCode) {

            case REQUEST_CODE_GALLERY:

                try {

                    InputStream inputStream = getContentResolver().openInputStream(data.getData());
                    FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp);
                    copyStream(inputStream, fileOutputStream);
                    fileOutputStream.close();
                    inputStream.close();

                    startCropImage();

                } catch (Exception e) {

                    Log.e(TAG, "Error while creating temp file", e);
                }

                break;
            case REQUEST_CODE_TAKE_PICTURE:

                startCropImage();
                break;
            case REQUEST_CODE_CROP_IMAGE:

                String path = data.getStringExtra(CropImage.IMAGE_PATH);
                if (path == null) {

                    return;
                }

                bitmap = BitmapFactory.decodeFile(mFileTemp.getPath());
                mImageView.setImageBitmap(bitmap);
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

Hàm crop image :

 private void startCropImage() {

        Intent intent = new Intent(this, CropImage.class);
        intent.putExtra(CropImage.IMAGE_PATH, mFileTemp.getPath());
        intent.putExtra(CropImage.SCALE, true);

        intent.putExtra(CropImage.ASPECT_X, 3);
        intent.putExtra(CropImage.ASPECT_Y, 2);

        startActivityForResult(intent, REQUEST_CODE_CROP_IMAGE);
    }

Các thông số được sử dụng : CropImage.IMAGE_PATH : link ảnh từ máy CropImage.SCALE : có scale ảnh hay ko CropImage.ASPECT_X : tỉ lệ scale X CropImage.ASPECT_Y : tỉ lệ scale Y (để 1:1 thi ảnh sẽ vuông cái này để chia tỉ lệ ảnh 16:9 ....)

Các class quan trọng nhất

 - CropImage.java
 - CropImageView.java
 - HighlightView.java
 - RotateBitmap.java

Trong khuôn khổ bài viết mình chỉ chia sẻ cách sử dụng chứ không đi chi tiết, để hiểu sâu và custom các bạn có thể xem chi tiết các class quan trọng nhé. Thanks Mình xin cung cấp lại nguồn suorce code :

https://github.com/biokys/cropimage

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí