Как захватить и выбирать изображения в JetPack Compose и KMP с ImagePickerkmp

Как захватить и выбирать изображения в JetPack Compose и KMP с ImagePickerkmp

31 июля 2025 г.

Если вы строите приложения, используя многоплатформу Kotlin или JetPack Compose - и вам нужно сфотографировать или выбрать изображения из галереи -ImagePickerkmpэто библиотека, которую вы ждали.

Он легко работает на Android и iOS, поддерживает как JetPack Compose Multiplatform, так и Android, и дает вам полный контроль над доступом к камере, выбору галереи и настройке пользовательского интерфейса.

Что такое ImagePickErkmp?

ImagePickerkmpЯвляется ли многоплатформенная библиотека с открытым исходным котлом, которая позволяет вам:

  • Запустите камеру устройства с помощью флэш -переключателя, переднего/заднего переключателя и предварительного просмотра изображения
  • Откройте галерею с поддержкой для одиночного или множественного выбора
  • Обрабатывать разрешения и доступ к фото на Android и iOS без хлопот
  • Настроить диалоги подтверждения и компоненты пользовательского интерфейса (при необходимости)
  • Используйте один и тот же API в Compose Multiplatform и Android Native

Он построен для разработчиков, которые хотят простоты, гибкости и истинного многоплатформенного поведения.

Использование ImagePickerkMP в Kotlin Multiplatform / Compose Multiplatform

Шаг 1: Добавьте зависимость

В вашемcommonMainbuild.gradle.kts:

implementation("io.github.ismoy:imagepickerkmp:1.0.1")

Не забудьте настроить iOS-специфические разрешения в вашем файле info.plist:

<key>NSCameraUsageDescription</key>
<string>We need access to the camera to capture a photo.</string>

Шаг 2: запустите камеру

 var showCamera by remember { mutableStateOf(false) }
 var capturedPhoto by remember { mutableStateOf<CameraPhotoHandler.PhotoResult?>(null) }
if (showCamera) {
    ImagePickerLauncher(
        context = context, // Take a context in your App.kt
        config = ImagePickerConfig(
            onPhotoCaptured = { result ->
                capturedPhoto = result
                showCamera = false
            },
            onError = {
                showCamera = false
            }
        )
    )
}

Button(onClick = { showCamera = true }) {
    Text("Take Photo")
}
var showGallery by remember { mutableStateOf(false) }
var selectedImages by remember { mutableStateOf<List<GalleryPhotoHandler.PhotoResult>>(emptyList()) }
if (showGallery) {
    GalleryPickerLauncher(
        context = context, // Take a context in your App.kt
        onPhotosSelected = { photos ->
            selectedImages = photos
            showGallery = false
        },
        onError = { error ->
            showGallery = false
        },
        allowMultiple = true, // False for single selection
        mimeTypes = listOf("image/jpeg", "image/png") // Optional: filter by type
    )
}

Button(onClick = { showGallery = true }) {
    Text("Choose from Gallery")
}

Для получения дополнительной настройки (просмотры подтверждения, фильтрации MIME и т. Д.),Проверьте руководство по интеграции для KMP.

Использование ImagePickerkMP в Android Native (JetPack Compose)

Даже если вы не используете KMP, вы можете использовать ImagePickerkMP в Pure Android Projects с JetPack Compose.

Шаг 1: Добавьте зависимость

implementation("io.github.ismoy:imagepickerkmp:1.0.1")

Шаг 2: Пример запуска камеры

var showCamera by remember { mutableStateOf(false) }
var capturedPhoto by remember { mutableStateOf<CameraPhotoHandler.PhotoResult?>(null) }
val context = LocalContext.current
if (showCamera) {
    ImagePickerLauncher(
        context = context,
        config = ImagePickerConfig(
            onPhotoCaptured = { result ->
                capturedPhoto = result
                showCamera = false
            },
            onError = {
                showCamera = false
            }
        )
    )
}

Button(onClick = { showCamera = true }) {
    Text("Take Photo")
}
var showGallery by remember { mutableStateOf(false) }
var selectedImages by remember { mutableStateOf<List<GalleryPhotoHandler.PhotoResult>>(emptyList()) }
val context = LocalContext.current
if (showGallery) {
    GalleryPickerLauncher(
        context = context,
        onPhotosSelected = { photos ->
            selectedImages = photos
            showGallery = false
        },
        onError = { error ->
            showGallery = false
        },
        allowMultiple = true, // False for single selection
        mimeTypes = listOf("image/jpeg", "image/png") // Optional: filter by type
    )
}

Button(onClick = { showGallery = true }) {
    Text("Choose from Gallery")
}

УвидетьРуководство по интеграции Android нативноеДля получения дополнительной информации об использовании.

Зачем его использовать?

  • Один API для Android и iOS
  • Нативный пользовательский интерфейс и обработка разрешений под капюшоном
  • Отлично работает с проектами JetPack Compose и Multiplatform
  • Открытый исходный код, лицензированный MIT и активно поддерживаемые Final Monds ImagePickerkMP-это универсальное и простое в интегральном решении, которое удаляет боль выбора изображений на разных платформах. Независимо от того, используете ли вы мультиплатформ Kotlin или просто разрабатываете для Android, он покрывает вас - с современным API и полной поддержкой. Используйте его, расширяйте и сделайте его своим.

Репозиторий GitHub


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE