Обрезка JPG без потерь без потери EXIF ​​на Android

Я реализую функцию обрезки в приложении Android для файлов JPG с очень строгими требованиями:

  • EXIF должен быть сохранен.
  • Кроп должен быть без потерь (как следствие, обрезать можно только в определенных местах, это нормально).
  • Размер приложения очень строгий, поэтому любая необходимая библиотека должна быть около 300 КБ или меньше, в идеале никакой библиотеки.

Вопрос Манипуляции с изображением без удаления его данных EXIF немного похож, но, к сожалению, в первом решении используется javax.imageio.ImageIO, которого нет на Android, а во втором решении используется слишком большая библиотека, 690 КБ.

Есть ли способ сделать это, желательно со стандартными классами Android?

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

Mohammed Atif 18.03.2019 13:45

@MohammedAtif: К сожалению, я не специалист по JPG, но я считаю, что кадрирование JPG без потерь можно выполнить без распаковки/повторного сжатия, что было бы лучше с точки зрения использования памяти и ЦП. Но ответы, которые не используют эту технику, все еще в порядке, поэтому не стесняйтесь публиковать :-)

Nicolas Raoul 19.03.2019 06:22

Возможно, подойдет lljtran порт для Java? Не знаю размер библиотеки, но вы, вероятно, могли бы вырвать только те части, которые вам нужны.

Harald K 19.03.2019 11:32

@haraldK: Замечательная находка! Это, конечно, лучше, чем заново реализовать алгоритмы JPG самостоятельно. Не стесняйтесь публиковать ответ :-)

Nicolas Raoul 20.03.2019 03:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
223
1

Ответы 1

Вряд ли вы найдете такую ​​вещь в продаже. Вы бы ограничили себя посевами вдоль границ MCU. Размер MCU зависит от частоты дискретизации различных компонентов.

Это не тривиальная задача.

Да точно, кадрирование будет только по границам MCU, вы правильно поняли вопрос.

Nicolas Raoul 20.03.2019 03:38

Другие вопросы по теме