Node.js
[Node.js] Jimp crop을 이용하여, 사진 자르기
kauboy
2019. 11. 19. 21:28
큰 이미지를 규격에 750 사이즈를 맞춰 잘라 앱에 효율적으로 보이게끔 하고 싶어서 jimp내의 crop이라는 함수를 사용했다.
crop(x,y,w,h) 으로
사진 왼쪽위가 0,0 기준이다.
또 이미지가 잘려서 리턴되는게 아니라 원본이 이미지가 바뀌는 거라서 처음에 깊은복사로 cloneDeep을 사용했지만,
너무 무거워서 찾아보니 img.clone() 을 이용하니 한결 가벼워졌다.
export const cutImages = async (options, data) => {
const cutImage = await Promise.all(options.data.images.map(async (image) => {
let imageArray = []
if (image.rawFile) {
const rawFile = image
let longImageResize = await Jimp.read(rawFile.rawFile.preview)
longImageResize.resize(750, Jimp.AUTO)
const count = Math.ceil(longImageResize.bitmap.height / 750)
console.log(count)
for (let i = 0; i < count; i++) {
const cropImage = longImageResize.clone()
if (i === count - 1) cropImage.crop(0, i * 750, 750, longImageResize.bitmap.height % 750)
else cropImage.crop(0, i * 750, 750, 750)
const buffer = await cropImage.getBufferAsync(rawFile.rawFile.type)
await cropImage.getBufferAsync(rawFile.rawFile.type)
const newRawFile = {rawFile: {preview: buffer, type: image.rawFile.type}}
imageArray.push(newRawFile)
}
} else {
imageArray = image
}
return imageArray
}))
options.data.images = cutImage
options.data.images = options.data.images.flat()
return options
}