implementation 'com.github.yalantis:ucrop:2.2.5'
1.갤러리 호출
private void getImageUri() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(MediaStore.Images.Media.CONTENT_TYPE); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, 2222); } |
2.사진 선택후 onActivityResult에서 crop 라이브러리 호출
List<Uri> imageUris = new ArrayList<>(); // 갤러리에서선택된 이미지 리스트 List<Uri> cropedUris = new ArrayList<>(); //크랍 처리된 이미지 리스트 int cropCount = 0; //이미지 개수 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 2222 && resultCode == RESULT_OK) { if (data == null) { Toast.makeText(getApplicationContext(), "이미지를 선택하지 않았습니다.", Toast.LENGTH_LONG).show(); } else { if (data.getClipData() == null) { Log.e("single choice: ", String.valueOf(data.getData())); } else { // 이미지를 여러장 선택한 경우 imageUris.clear(); cropedUris.clear(); cropCount = 0; ClipData clipData = data.getClipData(); if (clipData.getItemCount() > 5) { //개수 제한 Toast.makeText(getApplicationContext(), "사진은 5장까지 선택 가능합니다.", Toast.LENGTH_LONG).show(); } else { for (int i = 0; i < clipData.getItemCount(); i++) { Uri imageUri = clipData.getItemAt(i).getUri(); imageUris.add(imageUri); } if (imageUris.size() > 0) { callCrop(0, imageUris.get(0)); } } } } } else if (resultCode == RESULT_OK && requestCode == UCrop.REQUEST_CROP) { final Uri resultUri = UCrop.getOutput(data); cropedUris.add(resultUri); cropCount++; if (cropCount == imageUris.size()) { showImages(); } else { callCrop(cropCount, imageUris.get(cropCount)); } } } |
3.crop 요청 (요청후에는 UCrop.REQUEST_CROP)를 타게된다.
private void callCrop(int i, Uri imageUri) { UCrop uCrop = null; //uCrop 라이브러이 이용해서 이미지 크롭 UCrop.Options options = new UCrop.Options(); options.setCompressionQuality(50); try { uCrop = UCrop.of(imageUri, Uri.fromFile(createImageFile())); } catch (IOException e) { e.printStackTrace(); } uCrop.withOptions(options); uCrop.withAspectRatio(200, 200); uCrop.start(baseActivity); } |
4.이미지 파일 생성
private File createImageFile() throws IOException { //크랍된 이미지 파일 생성 String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); String tempImg = "temp_" + timeStamp + ""; File storageDir = new File(getFilesDir() + "/mz/"); if (!storageDir.exists()) { storageDir.mkdirs(); } File image = File.createTempFile( tempImg, ".jpg", storageDir ); return image; } |
5.이미지 보여주기
private void showImages() { for (int i = 0; i < cropedUris.size(); i++) { String filepath = cropedUris.get(i).getPath(); //파일 경로로 Glide등을 이용해서 이미지 뷰에 보여주면 됩니다. Glide.with(mContext).load(filepath).error(R.drawable.thumbnail_no_img).into(img01); } |
'안드로이드' 카테고리의 다른 글
WorkerManager android java (0) | 2024.01.17 |
---|---|
안드로이드 문자 , 카카오톡 알림 캐치 (0) | 2024.01.16 |
PDF 파일 불러와서 Sign하기(JAVA) (0) | 2024.01.08 |
이미지 공유시 Uri 얻기 (0) | 2023.12.14 |
android 10 이상 스크린 캡쳐 후 파일저장(screen capture view java) (0) | 2023.11.16 |