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

SharedArrayBuffer updates in Android Chrome 88 and Desktop Chrome 92

クロスオリジン分離対応を実施

react-hook-formとReact Datepickerを組み合わせる

Hook FormのControllerを使う

Next.jsで生成したサイトで特定のページのみnoindexを設定する

タグに紐づく記事一覧ページはnoindexにした

Next.jsでAdsenseタグを埋め込んだら Only one AdSense head tag supported per page エラーが発生

Only one AdSense head tag supported per page. The second tag is ignored.