Как получить изображение из галереи, обрезать его и сохранить в приложении - PullRequest
0 голосов
/ 10 января 2020

В моем проекте я использую круговое изображение для отображения изображения, которое я получаю из галереи телефона, а затем изображение устанавливается на просмотр изображения, и здесь все работает нормально.

Но проблема в том, что когда я выполняю транзакции из одного фрагмента в другой, изображение удаляется.

Поэтому мне нужен фрагмент кода, который поможет мне выбрать изображение из галереи и обрезать его, а затем отобразить изображение в изображение навсегда.

PS: это изображение также было загружено в хранилище Fire Base. так помогите мне, как я могу решить это

для извлечения изображения

@Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE && resultCode == RESULT_OK){

            Uri imageUri = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), imageUri);
                profileImage.setImageBitmap(bitmap);

            }catch (IOException e){
                Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    }

для выбора изображения

profileImage = view.findViewById(R.id.profile_image);
        profileImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent gallery = new Intent();
                gallery.setType("image/*");
                gallery.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(gallery,"Select Profile Image"), PICK_IMAGE);
            }
        });

1 Ответ

1 голос
/ 11 января 2020

Купите мне кофе

Я предлагаю вам использовать это. это изображение обрезки https://github.com/ArthurHub/Android-Image-Cropper

для сохранения результата растрового изображения в sharedPrf вы должны преобразовать растровое изображение в base64, а для загрузки вы должны преобразовать его в файл

пример для файла

File f = new File(context.getCacheDir(), filename);
f.createNewFile();

//Convert bitmap to byte array
Bitmap bitmap = your bitmap;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();

//write the bytes in file
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();

для base64:

 ByteArrayOutputStream baos = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

byte[] imageBytes = baos.toByteArray();

String base64String = Base64.encodeToString(imageBytes, Base64.NO_WRAP);

Для декодирования строки base64 обратно в растровое изображение:

byte[] decodedByteArray = Base64.decode(base64String, Base64.NO_WRAP);
Bitmap decodedBitmap = BitmapFactory.decodeByteArray(decodedByteArray, 0, decodedString.length);
...