swap out cropper library (#8327)

* mostly implement

* type errors

* unused import

* rm comment

* stop accidentally deleting the image while compressing

* upgrade

* type fixes

* upgrade, remove timeout

* bump

* rm mock

* bump

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>
This commit is contained in:
hailey
2025-05-06 10:54:08 -07:00
committed by GitHub
parent 973538d246
commit 521ec8e044
23 changed files with 145 additions and 215 deletions
+23 -25
View File
@@ -1,36 +1,34 @@
import {
Image as RNImage,
openCamera as openCameraFn,
openCropper as openCropperFn,
} from 'react-native-image-crop-picker'
import ExpoImageCropTool, {type OpenCropperOptions} from 'expo-image-crop-tool'
import {type ImagePickerOptions, launchCameraAsync} from 'expo-image-picker'
import {CameraOpts, CropperOptions} from './types'
export {openPicker} from './picker.shared'
export {openPicker, type PickerImage as RNImage} from './picker.shared'
export async function openCamera(opts: CameraOpts): Promise<RNImage> {
const item = await openCameraFn({
width: opts.width,
height: opts.height,
freeStyleCropEnabled: opts.freeStyleCropEnabled,
cropperCircleOverlay: opts.cropperCircleOverlay,
cropping: false,
forceJpg: true, // ios only
compressImageQuality: 0.8,
})
export async function openCamera(customOpts: ImagePickerOptions) {
const opts: ImagePickerOptions = {
mediaTypes: 'images',
...customOpts,
}
const res = await launchCameraAsync(opts)
if (!res || !res.assets) {
throw new Error('Camera was closed before taking a photo')
}
const asset = res?.assets[0]
return {
path: item.path,
mime: item.mime,
size: item.size,
width: item.width,
height: item.height,
path: asset.uri,
mime: asset.mimeType ?? 'image/jpeg',
size: asset.fileSize ?? 0,
width: asset.width,
height: asset.height,
}
}
export async function openCropper(opts: CropperOptions) {
const item = await openCropperFn({
export async function openCropper(opts: OpenCropperOptions) {
const item = await ExpoImageCropTool.openCropperAsync({
...opts,
forceJpg: true, // ios only
format: 'jpeg',
})
return {