react-image-file-resizerで画像のリサイズを行う

公開日時
更新日時

Next.jsアプリで画像アップロード機能を作成する際に、クライアント側で画像のリサイズ(縮小)を行ったものをプレビュー画像として表示したかったので「react-image-file-resizer」を使用した。

READMEのExampleを参考に組み込めば手軽にリサイズを実現できた。

import React, { useState } from 'react'

export const InputImage = () => {
  const [name, setName] = useState('')
  const [thumbnail, setThumbnail] = useState<string | null>(null)

  const resizeFile = (file: Blob): Promise<string> => {
    return new Promise((resolve) => {
      Resizer.imageFileResizer(
        file,
        300,
        300,
        'JPEG',
        100,
        0,
        (uri) => {
          resolve(uri as string)
        },
        'base64'
      )
    })
  }

  const onChange = async (event) => {
    try {
      const file = event.target.files[0]
      const image = await resizeFile(file)
      setThumbnail(image)
      setName(file.name)
    } catch (err) {
      console.error(err)
    }
  }

  return (
    <>
      <input type="file" onChange={onChange} />
      {thumbnail && <img src={thumbnail} alt={name} />}
    </>
  )
}

Related #next.js

Next.js使用時にrecoil-persistのStorageを変更する

クライアント側で実行された場合のみstorageを指定するようにした

Next.jsで環境に応じて特定のページを非表示にする

NODE_ENVでredirectsを出し分けた

Next.jsで動的URLをRewriteする

next.config.jsにrewritesを追加

Next.js + typescriptでpathsのエイリアスがModule not foundになる

next.config.jsに追記する必要があった

Next.js + Algoliaで全文検索UIを実装する

react-instantsearchを利用