Footnotes

  1. alt ↩

  2. 최신 이미지 형식(AVIF 또는 WebP)이 압축을 최대 50%까지 개선하고 시각적으로 매력적으로 보이면서도 바이트당 더 나은 품질을 제공할 수 있는 방법을 강조 ↩

  3. 이미지 사용 및 최적화는 복잡하다. 그래서 개발자가 성능과 품질사이의 균형을 잘 조절해야 한다. 그래서 매번 자체적으로 개발하는 문제 대신 프레임웤 레밸에서 모범사례를 만드는게 중요하다. ↩

  4. css에서 사용가능한 image-set(). type 기능은 아직 진행중. ↩

  5. 반응형 이미지 대응을 위한 가이드 ↩

  6. webp 기능탐지 방법을 가이드하고 있다 ↩

#121
import sharp from 'sharp'
import fg from 'fast-glob'

const entries = await fg('./**/*.png')

for (const entry of entries) {
  const trimmedBuffer = await sharp(entry).trim().toBuffer()
  const trimmedImage = sharp(trimmedBuffer)
  const trimmedMetadata = await trimmedImage.metadata()

  await trimmedImage
    .resize({
      width: Math.round(trimmedMetadata.width / 2),
      height: Math.round(trimmedMetadata.height / 2),
    })
    .png()
    .toFile(entry.replace(/\.png$/, '.half.png'))
}

offset(top, left)값, 이미지 사이즈 설정으로 crop 구현이 가능하다

sharp('img.png')
  .extract({
    left: 50,
    top: 50, 
    width: 200, 
    height: 400
  })

#60

이미지 저장1

  • 페이지에서 JavaScript를 통해 이미지 추출
    • 캔버스에서 이미지 추출
    • 서버에서 이미지 가져오기
  • DevTools 프로토콜을 사용하여 이미지 추출
const client = await page.createCDPSession()
const { frameTree } = await client.send('Page.getResourceTree')

for (const resource of frameTree.resources) {
  const { content, base64Encoded } = await client.send(
    'Page.getResourceContent',
    { frameId: frameTree.frame.id, url: resource.url },
  )
  const contentBuffer = Buffer.from(content, base64Encoded ? 'base64' : 'utf8')
}
page.on('response', async (response) => {
  const url = response.url()
  const buffer = await response.buffer()
})

Footnotes

  1. Saving Images from a Headless Browser ↩

#93