Fix image compression for avis and banner images
This commit is contained in:
parent
7215da135b
commit
29020fbcee
3 changed files with 37 additions and 19 deletions
|
@ -1,6 +1,5 @@
|
|||
import RNFetchBlob from 'rn-fetch-blob'
|
||||
import ImageResizer from '@bam.tech/react-native-image-resizer'
|
||||
import {Image as PickedImage} from 'react-native-image-crop-picker'
|
||||
|
||||
export interface DownloadAndResizeOpts {
|
||||
uri: string
|
||||
|
@ -11,6 +10,14 @@ export interface DownloadAndResizeOpts {
|
|||
timeout: number
|
||||
}
|
||||
|
||||
export interface Image {
|
||||
path: string
|
||||
mime: string
|
||||
size: number
|
||||
width: number
|
||||
height: number
|
||||
}
|
||||
|
||||
export async function downloadAndResize(opts: DownloadAndResizeOpts) {
|
||||
let appendExt
|
||||
try {
|
||||
|
@ -58,7 +65,10 @@ export interface ResizeOpts {
|
|||
maxSize: number
|
||||
}
|
||||
|
||||
export async function resize(localUri: string, opts: ResizeOpts) {
|
||||
export async function resize(
|
||||
localUri: string,
|
||||
opts: ResizeOpts,
|
||||
): Promise<Image> {
|
||||
for (let i = 0; i < 9; i++) {
|
||||
const quality = 1.0 - i / 10
|
||||
const resizeRes = await ImageResizer.createResizedImage(
|
||||
|
@ -73,7 +83,13 @@ export async function resize(localUri: string, opts: ResizeOpts) {
|
|||
{mode: opts.mode},
|
||||
)
|
||||
if (resizeRes.size < opts.maxSize) {
|
||||
return resizeRes
|
||||
return {
|
||||
path: resizeRes.path,
|
||||
mime: 'image/jpeg',
|
||||
size: resizeRes.size,
|
||||
width: resizeRes.width,
|
||||
height: resizeRes.height,
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Error(
|
||||
|
@ -81,16 +97,18 @@ export async function resize(localUri: string, opts: ResizeOpts) {
|
|||
)
|
||||
}
|
||||
|
||||
export async function compressIfNeeded(img: PickedImage, maxSize: number) {
|
||||
export async function compressIfNeeded(
|
||||
img: Image,
|
||||
maxSize: number,
|
||||
): Promise<Image> {
|
||||
const origUri = `file://${img.path}`
|
||||
if (img.size < maxSize) {
|
||||
return origUri
|
||||
return img
|
||||
}
|
||||
const resizeRez = await resize(origUri, {
|
||||
return await resize(origUri, {
|
||||
width: img.width,
|
||||
height: img.height,
|
||||
mode: 'stretch',
|
||||
maxSize,
|
||||
})
|
||||
return resizeRez.uri
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue