Библиотека Android для безпотерьной трансформации JPEG (поворот/обрезка/объединение)

Вопрос или проблема

jpegtran позволяет поворачивать/обрезать/соединять JPG файл без потери качества и увеличения размера файла.

Существует ли библиотека на Java или Kotlin для достижения этих безупречных операций в Android?

Не решения:

  • Java библиотека libjpeg-turbo почти идеальна, но, к сожалению, не реализует операцию соединения (называемую -drop), хотя C библиотека того же проекта это делает. Вероятно, её будет легче портировать, если это необходимо.
  • AndroidMediaUtil и LLCrop также не поддерживают соединение.
  • maven-jpegtran-plugin вызывает исполняемый файл jpegtran из ОС, так что это не 100% Java.
  • Исходный код Android включает jpegtran.c, но я не нашел способа, чтобы приложение могло его вызвать, полагаю, его используют только внутренне, возможно, он присутствует только потому, что является частью libjpeg.

Должен быть с открытым исходным кодом.
Библиотеки, которые выполняют только одну операцию, например только обрезку, также приветствуются!

LLCrop с открытым исходным кодом. Надеюсь, это поможет!

Ответ или решение

Вопрос о наличии библиотек для безпотерьного преобразования JPEG на платформе Android, таких как вращение, обрезка и соединение изображений, актуален в современных условиях, когда пользовательские требования к качеству изображений растут. Ниже описаны некоторые аспекты, которые помогут вам найти подходящие решения.

Актуальные библиотеки для безпотерьной обработки JPEG на Android

1. LLCrop

LLCrop — это библиотека с открытым исходным кодом, которая поддерживает функцию безпотерьной обрезки изображений JPEG. Несмотря на то, что она не реализует функцию соединения (join), её способность работать с обрезкой без потерь делает её полезной для определенных задач.

2. libjpeg-turbo

Хотя libjpeg-turbo имеет Java-обертку, она не поддерживает операцию соединения (-drop). Тем не менее, библиотека на C предоставляет такие возможности, и, возможно, вы сможете адаптировать её, если у вас есть опыт работы с C и JNI (Java Native Interface).

3. AndroidMediaUtil

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

Альтернативные подходы

  1. Портирование существующих библиотек
    Вы можете рассмотреть возможность портирования функций из jpegtran.c, доступного в исходном коде Android. Это потребует значительных усилий, но если ваш проект требует полного контроля над процессом преобразования, этот путь может оказаться оправданным.

  2. Вызов внешних решений
    Использование maven-jpegtran-plugin подразумевает вызов исполняемого файла jpegtran, что может оказаться не совсем соответствующим требованиям для приложения, работающего исключительно на Java или Kotlin. Однако, если у вас нет строгих ограничений по архитектуре, это решение может быть временным.

Выводы

К сожалению, в настоящее время нет идеальной библиотеки для Android, поддерживающей все три операции (вращение, обрезка и соединение) без потерь качества. Тем не менее, существующие решения, такие как LLCrop и возможности, предоставляемые libjpeg-turbo, могут покрыть часть ваших потребностей. В зависимости от ваших требований к проекту, возможно, лучше всего будет адаптировать существующие решения или изучить возможность реализации недостающих функций самостоятельно.

Мы рекомендуем отслеживать обновления репозиториев и форумы разработчиков, где могут появляться новые решения и библиотеки для достижения безпотерьной обработки JPEG на Android.

Оцените материал
Добавить комментарий

Капча загружается...