мы реализовали сжатие изображений с помощью Expo Image Manipulator. Проблема, с которой мы столкнулись, заключается в том, что некоторые фотографии, полученные с помощью функции сжатия, испорчены. Пример:
https://i.stack.imgur.com/JezvB.png
Изображения никогда не путаются на устройствах iOS, это происходит случайным образом на Android (12, 11), в основном на телефонах Samsung.
Стек технологий: EXPO SDK 43 (управляемый рабочий процесс) React Native 0.64.3
Код, который мы используем для обработки сжатия:
cameraParsing = async (result) => {
if (result.cancelled) {
return
}
const { uri, width, height } = result
const percentage = this.getResizePercentage(width, height)
const croppedImage = await manipulateAsync(
uri,
[
{
resize: {
width: width - width * percentage,
height: height - height * percentage,
},
},
],
{
compress: 0.4,
},
)
const fileName = uri.split('/')[uri.split('/').length - 1]
this.setState({
selectedFile: fileName,
selectedUri: croppedImage.uri,
})
this.props.setFieldValue(this.props.field.key, {
uri: croppedImage.uri,
type: mime.lookup(fileName),
name: fileName,
})
}
getResizePercentage = (width, height) => {
let percentage = 0
let newWidth = width
let newHeight = height
while (newWidth > 1200 || newHeight > 1150) {
percentage += 0.01
newWidth = width - width * percentage
newHeight = height - height * percentage
}
return percentage
}
Может кто сталкивался с такой проблемой и может помочь решить?
Решение проблемы
это происходит, когда вы задаете высоту + ширину изображения, оно будет растягивать изображение, если изображение, например, если у вас есть альбомное изображение, но вы хотите иметь квадратное изображение (100 ширина 100 высота), тогда оно обрежет его таким образом. Я бы предложил определить только ширину, чтобы она имела автоматическую высоту.
Комментариев нет:
Отправить комментарий