Android: взять изображение с камеры и обрезать его

Я постараюсь быть максимально кратким, я разрабатываю приложение для банкомата компании, где мне необходимо иметь следующую функцию:

Нажмите на изображение --> Открыть диалоговое окно --> Выбрать (сделать новое изображение, выбрать существующее изображение) --> После выбора или получения изображения --> Обрезать изображение с соотношением сторон 1:1, чтобы оно стало квадратным.

Я успешно реализовал эту функцию некоторое время назад, но потом я понял, что качество изображения резко снижается. После некоторых исследований (6 часов) я понял, что если вы не передадите каталог для сохранения изображения для кадрирования, он возвращает " Thumbnail», который в моем случае практически бесполезен, и вот список вопросов, которые у меня есть:

1- Я не могу указать, где находится каталог для сохранения изображения (я хочу сохранить его в галерее и, если возможно, создать новую папку с именем моего приложения и сохранить его в нее)

2- Мне удалось получить обрезанное изображение с хорошим качеством, но, конечно, оно большого размера, поэтому, когда я кодирую его в строку Base64 и отправляю на сервер, это занимает много времени, хотелось бы знать, какой подход лучше (сжать его на 10%, а затем измените его размер или только измените его размер или только сожмите его)

3- Есть ли какой-то учебник по такой последовательности, который я мог бы прочитать??

4- Я понял, что, поскольку я сохраняю изображение из намерения Open Camera, а затем из намерения Crop, оно сохраняется дважды, как я могу удалить один из них??


person user3822316    schedule 05.11.2014    source источник


Ответы (1)


  1. То, что вы получаете миниатюру, когда место назначения явно не указано, это нормально, полное изображение все равно записывается на диск. См. раздел Android Camera: намерение данных возвращает null. Посмотрите на «официальный» пример кода на developer.android.com для лучшего упражняться. Обратите внимание, что на некоторых устройствах/ПЗУ все еще могут возникать сбои, см. захват изображений с намерением MediaStore.ACTION_IMAGE_CAPTURE в android. На самом деле, когда вы используете намерение, оно может в конечном итоге быть выполнено сторонним rd приложением камеры, установленным конечным пользователем, и их поведение может быть произвольным.

  2. Изменение размера не эквивалентно сжатию. Пожалуйста, уточните, что вас больше всего беспокоит. Я не знаю, почему вы должны использовать base64 для своего изображения, чтобы загрузить его, но эмпирическое правило будет состоять в том, чтобы масштабировать обрезанный результат до размеров, ожидаемых на стороне сервера, и после этого настроить коэффициент сжатия Jpeg для достижения ожидаемого файла. размер.

  3. Вы можете начать с Википедии.

  4. Если ваше приложение имеет соответствующие разрешения, вы можете. См. раздел Удаление изображения из галереи после того, как камера сделала снимок намерения < /а>.

person Alex Cohn    schedule 05.11.2014