Вопрос или проблема
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 также не поддерживает функцию соединения, но предоставляет некоторые инструменты для изменения формата и обработки изображений.
Альтернативные подходы
-
Портирование существующих библиотек
Вы можете рассмотреть возможность портирования функций изjpegtran.c
, доступного в исходном коде Android. Это потребует значительных усилий, но если ваш проект требует полного контроля над процессом преобразования, этот путь может оказаться оправданным. -
Вызов внешних решений
Использование maven-jpegtran-plugin подразумевает вызов исполняемого файлаjpegtran
, что может оказаться не совсем соответствующим требованиям для приложения, работающего исключительно на Java или Kotlin. Однако, если у вас нет строгих ограничений по архитектуре, это решение может быть временным.
Выводы
К сожалению, в настоящее время нет идеальной библиотеки для Android, поддерживающей все три операции (вращение, обрезка и соединение) без потерь качества. Тем не менее, существующие решения, такие как LLCrop и возможности, предоставляемые libjpeg-turbo, могут покрыть часть ваших потребностей. В зависимости от ваших требований к проекту, возможно, лучше всего будет адаптировать существующие решения или изучить возможность реализации недостающих функций самостоятельно.
Мы рекомендуем отслеживать обновления репозиториев и форумы разработчиков, где могут появляться новые решения и библиотеки для достижения безпотерьной обработки JPEG на Android.