nino

Command Palette

Search for a command to run...

メニュー

Image Cropper

 

 

画像のアップロード、プレビュー、クロップ機能を提供する Compound Component パターンのコンポーネント群です。実装者が Dialog や Popover で柔軟にラップできる設計になっています。

画像をクロップ

インストール

Loading...

構造

ImageCropper は以下の3つの独立したコンポーネントで構成されています:

  • ImageCropper - 画像のクロップ UI(AvatarEditor + Slider + ボタン)
  • ImageCropperFileSelector - ファイル選択とドロップゾーン機能
  • ImageCropperPreview - 画像のプレビュー表示と削除ボタン

使い方

基本的な使い方(Dialog)

Loading...

Popover で使用

Loading...

カスタムプレビュー

ImageCropperFileSelectorchildren に任意の要素を渡すことで、カスタムプレビューを実装できます。

Loading...

クロップなしで使用

クロップ機能が不要な場合は、ImageCropperFileSelector のみを使用できます。

Loading...

React Hook Form と FormField で使用

React Hook Form と shadcn/ui の Form コンポーネントを使用して、フォームバリデーションと統合できます。

Loading...

必須バリデーション付きフォーム

画像を必須フィールドにする場合:

Loading...

カスタムバリデーション

画像のファイルサイズや形式を検証する場合:

Loading...

コンポーネント

ImageCropper

画像のクロップ UI を提供するコンポーネント。Dialog や Popover でラップして使用します。

Props

NameTypeDescription
imageFile | stringクロップする画像ファイル
canvasWidthnumberキャンバスの横幅(ピクセル)。デフォルト: 400
aspectRationumber画像のアスペクト比。デフォルト: 1
resultWidthnumberクロップ後の横幅(ピクセル)
onCrop(dataUrl: string, blob: Blob) => voidクロップ完了時のコールバック
onCancel() => voidキャンセル時のコールバック

onCrop の返り値

  • dataUrl: JPEG 形式の Data URL。プレビュー表示に使用
  • blob: JPEG 形式の Blob。サーバーへのアップロードに使用
Loading...

ImageCropperFileSelector

ファイル選択とドロップゾーン機能を提供するコンポーネント。常にドラッグ&ドロップが有効です。

Props

NameTypeDescription
onFileSelect(file: File) => voidファイルが選択された時のコールバック
maxSizenumber入力画像の最大サイズ(バイト)。デフォルト: 4MB
classNamestringカスタムクラス名(width と aspect-ratio を含む)。デフォルト: "w-full aspect-square"
disabledboolean無効化フラグ
childrenReact.ReactNode子要素(プレビューなど)

children の扱い

  • children がある場合: それを表示(プレビュー画像など)
  • children がない場合: デフォルトの ImagePlus アイコンを表示

ImageCropperPreview

画像のプレビュー表示と削除ボタンを提供するコンポーネント。

Props

NameTypeDescription
srcstringプレビュー画像の URL
altstring代替テキスト
onRemove() => void削除ボタンが押された時のコールバック
showRemoveButtonboolean削除ボタンを表示するか。デフォルト: true

アスペクト比の例

Loading...

サーバーへのアップロード

Blob を使用してサーバーにアップロードする例:

Loading...

実装のヒント

画像の品質とサイズ

resultWidth を適切に設定することで、画像のサイズと品質をコントロールできます:

Loading...

ファイルサイズ制限

maxSize prop で受け入れるファイルサイズを制限できます:

Loading...

ドラッグ&ドロップの視覚フィードバック

ImageCropperFileSelector は自動的にドラッグ中の視覚フィードバックを提供します。カスタマイズする場合は、CSS で border-primarybg-primary/10 を調整してください。

使用例

  • プロフィール画像のアップロード
  • 商品画像の登録
  • カバー画像の設定
  • アバター画像の編集
  • SNS 投稿の画像選択

参考