꾸준히 공부하는 개발자

[Node.js] Jimp crop을 이용하여, 사진 자르기 본문

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
}
Comments