
Большинство Android-разработчиков по-прежнему используют форматы JPEG или PNG для сохранения изображений. Это классика, проверенные и надежные форматы. Но представьте, что вы сохраняете то же изображение высокого качества при вдвое меньшем размере файла и без потери деталей.
Это уже не фантастика. Инструмент готов к использованию, и настало время освоить более разумный и эффективный способ работы с медиа на Android.
Что такое HEIF и почему он важен?
HEIF (High Efficiency Image File Format — формат файлов изображений высокого качества) — современный медиа-контейнер, который стал прорывом в индустрии. Он позволяет сохранять фотографии размером на 50 % меньше по сравнению с классическим JPEG при том же визуальном качестве.
HEIF можно считать «WebP для фотографий», но с еще большими возможностями:
- поддержкой HDR (High Dynamic Range — расширенный динамический диапазон);
- последовательностью изображений (идеально подходят для хранения серийных фотографий);
- 10-битной глубиной цвета для более насыщенных и плавных переходов;
- неразрушающим редактированием (можно сохранять инструкции для правок вместе с изображением).
А знаете, что самое приятное? Jetpack для Android обеспечил невероятно простое интегрирование со специальной библиотекой HeifWriter.
Шаг 1: ознакомьтесь с HeifWriter — новым MVP в области мультимедиа
Класс HeifWriter, входящий в состав AndroidX Jetpack, — это специализированный инструмент, предназначенный для работы с форматами нового поколения.
Он позволяет:
- записывать изображения (отдельные кадры или последовательности) в высокоэффективные форматы файлов
.heicили.heif;
- использовать сжатие HEVC (H.265), которое обеспечивает значительную экономию места;
- поддерживать кодирование AVIF (на основе кодека AV1), которое предлагает еще лучшее сжатие, чем HEIF;
- обрабатывать расширенные функции, такие как 10-битная глубина цвета, для приложений профессиональной фотографии;
- безупречно работать с существующим графическим конвейером Android через вход
Surface.
Короче говоря: лучшее качество, значительно меньший размер файлов и готовность к будущему мобильной фотографии.
Шаг 2: почему это революционное изменение для Android-приложений
Если ваше приложение активно работает с мультимедиа, внедрение HeifWriter — стратегический шаг, который напрямую улучшает пользовательский опыт и снижает инфраструктурные затраты.
Это важно, если вы создаете:
- Пользовательское приложение «Camera» («Камера») или «Gallery» («Галерея»): сохраняйте изображения высокого разрешения, которые занимают половину локального хранилища пользователя.
- Приложение для редактирования фотографий или фильтрации: экспортируйте отредактированные файлы, которые быстрее распространяются и загружаются.
- Социальное или мессенджер-приложение с медиаконтентом: сокращайте использование полосы пропускания для загрузки и скачивания, это приведет к более быстрой загрузке для всех.
Результат: более быстрая загрузка, меньший объем необходимого хранилища и заметно более плавный и современный пользовательский опыт.
Шаг 3: интеграция HeifWriter в Kotlin
Начать работу очень просто. Добавьте зависимость в файл build.gradle вашего модуля:
implementation "androidx.heifwriter:heifwriter:1.1.0"
Вот упрощенный пример на Kotlin для записи одного изображения (например, из Bitmap, преобразованного в Surface):
fun writeImageToHeif(
bitmap: Bitmap,
filePath: String
) {
// 1. Определение размера выходного файла и пути к файлу
val width = bitmap.width
val height = bitmap.height
// 2. Создание экземпляра HeifWriter
val heifWriter = HeifWriter.Builder(
filePath, // например, /storage/emulated/0/DCIM/my_photo.heic
width,
height,
HeifWriter.INPUT_MODE_SURFACE // Использование SURFACE для эффективной записи
)
// 3. Установка уровня качества (например, 90 для хорошего баланса)
.setQuality(90)
// 4. По желанию, запрос кодирования AVIF для максимальной эффективности (если поддерживается)
.setEncoding(HeifWriter.HEVC_ENCODING_AVIF)
.build()
try {
// Получение входного surface от модуля записи
val surface = heifWriter.surface
// Использование Canvas для рисования Bitmap на Surface
val canvas = surface.lockCanvas(null)
// Примечание: в продакшене обычно используют HardwareBuffer/OpenGL для поддержания эффективности без копирования
canvas.drawBitmap(bitmap, 0f, 0f, null)
surface.unlockCanvasAndPost(canvas)
// 5. Сигнал о готовности кадра
heifWriter.setEndOfStream()
// 6. Дождаться завершения кодирования и закрыть файл
heifWriter.stop(5000) // Ждать завершения кодирования до 5 секунд
// Комментарий: Успешно! Ваш новый HEIF-файл готов, вероятно, он будет в два раза меньше JPEG.
println("HEIF file written successfully to $filePath")
} catch (e: Exception) {
// Комментарий: Корректно обрабатывайте исключения ввода-вывода, кодека или таймаута
e.printStackTrace()
} finally {
heifWriter.close()
}
}
Шаг 4: версия 1.1.0 — готова к производственному использованию
Недавнее обновление до версии 1.1.0 (выпущенной в конце 2025 года) укрепило позиции HeifWriter как серьезного конкурента для производственных приложений:
- Кодирование AVIF: поддержка передового формата AVIF, предлагающего превосходную компрессию по сравнению с HEIF/HEVC.
- Поддержка 10-битных изображений: необходимо для высокопроизводительных устройств и профессиональных рабочих процессов с изображениями.
- Улучшенная поддержка Kotlin: более качественные аннотации null-safety для чистого и надежного кода Kotlin.
- Улучшения производительности: оптимизированное управление буфером и общее повышение скорости.
Сравнение форматов

Почему вам нужно освоить HeifWriter сейчас?
Игнорируя эти новые форматы, вы, как Android-разработчик, упускаете значительные преимущества в производительности и пользовательском опыте. И Apple, и Google (нативные приложения Android для фотографий/камеры) перешли на HEIF. Instagram и другие крупные платформы уже поддерживают эти форматы для экономии трафика.
Интегрируя HeifWriter сегодня, вы не просто оптимизируете свое приложение — вы готовите его к будущему и приводите в соответствие с медиа-стандартами следующего десятилетия. Эта библиотека абстрагирует сложные детали кодеков, предоставляя вам все преимущества с минимальными затратами на интеграцию.
Часто задаваемые вопросы (FAQ)
Будут ли изображения HEIF/AVIF работать на старых Android-устройствах?
Библиотека HeifWriter сама по себе обратно совместима, но просмотр полученных файлов HEIF/AVIF зависит от версии Android на устройстве и аппаратного декодера. Как правило, Android 9 (Pie) и выше отлично поддерживают HEIF. Для старых устройств нужно будет либо использовать резервный вариант JPEG, либо добавить программный декодер. Однако использование HEIF для сохранения новых изображений уже сейчас подготовит вас к текущему состоянию рынка.
Можно ли использовать этот формат для анимации, как альтернативу GIF?
Конечно! HEIF отлично подходит для хранения последовательностей изображений, часто в формате HEIC. Это превосходная альтернатива GIF, поскольку позволяет хранить несколько кадров с гораздо лучшим сжатием и 10-битным цветом, что делает этот формат идеальным для серийных фотографий, Live Photo или коротких видеороликов.
Влияет ли использование HeifWriter на производительность из-за сложного сжатия?
Да, кодирование HEVC (HEIF) или AV1 (AVIF) требует больше вычислительных ресурсов, чем JPEG. Однако современные Android-устройства имеют специальные аппаратные кодировщики, встроенные в их чипсеты. Библиотека HeifWriter разработана для эффективного использования этих аппаратных кодировщиков. Это означает приемлемую скорость обработки даже при захвате одиночного изображения, предлагая прекрасный компромисс в виде значительного уменьшения размера файла.
Читайте также:
- Улучшение воспроизведения видео с помощью ExoPlayer
- Использование Kotlin Flow для отображения наблюдаемого состояния UI на экране в Android
- Реализация кэширования новостных тем в приложении TrendNow. Часть 5
Читайте нас в Telegram, VK и Дзен
Перевод статьи Sivavishnu: Stop Saving JPEG/PNG: How HEIF & AVIF Cut Android Image Storage by 50%





