) => void;
+ onImageLoad: (size: Size) => void;
+ onResetCrop: () => void;
+ onAspectLockedChange: (next: boolean) => void;
+ onSplitCountChange: (next: number) => void;
+ onSplit: () => void;
+}) => (
+ <>
+
+ 画像を選んで四隅付近をドラッグすると、一番近い角から切り抜き範囲を調整できます。「分割する」を押すと指定した数に均等分割した画像をそれぞれダウンロードできます。
+
+
+
+ 画像を選択
+
+
+ {imageUrl ? (
+
+
{
+ const { naturalWidth, naturalHeight } = e.currentTarget;
+ onImageLoad({ width: naturalWidth, height: naturalHeight });
+ }}
+ />
+ {cropRect && naturalSize
+ ? (() => {
+ const left = pctNum(cropRect.x, naturalSize.width);
+ const top = pctNum(cropRect.y, naturalSize.height);
+ const width = pctNum(cropRect.width, naturalSize.width);
+ const height = pctNum(cropRect.height, naturalSize.height);
+ const right = left + width;
+ const bottom = top + height;
+ return (
+ <>
+
+
+
+
+
+ {Array.from({ length: splitCount - 1 }, (_, i) => (
+
+ ))}
+ {(["nw", "ne", "sw", "se"] as const).map(corner => (
+
+ ))}
+
+ >
+ );
+ })()
+ : null}
+
+ ) : null}
+ {imageUrl ? (
+
+ 元画像の縦横比を固定する
+
+ ) : null}
+ {imageUrl ? (
+
+ ) : null}
+ {imageUrl ? (
+
+
+ 切り抜きをリセット
+
+
+ {isSplitting ? "分割中…" : "分割する"}
+
+
+ ) : null}
+ >
+);
+
+export default ImageTrimScene;
diff --git a/packages/web/src/feature/page-path.ts b/packages/web/src/feature/page-path.ts
index 0530ab9..8f2e7f7 100644
--- a/packages/web/src/feature/page-path.ts
+++ b/packages/web/src/feature/page-path.ts
@@ -5,3 +5,4 @@ const PAGE_ROOT = new PageEntry(BASE_URL);
export const PAGE_TOP = PAGE_ROOT;
export const PAGE_ABOUT = PAGE_ROOT.child("about");
+export const PAGE_IMAGE_SPLITTER = PAGE_ROOT.child("image-splitter");
diff --git a/packages/web/src/pages/image-splitter/TODO.md b/packages/web/src/pages/image-splitter/TODO.md
new file mode 100644
index 0000000..225465f
--- /dev/null
+++ b/packages/web/src/pages/image-splitter/TODO.md
@@ -0,0 +1,7 @@
+# 画像分割ツール 今後のタスク
+
+- [x] 分割数指定を range にする
+- [x] ダウンロード時のファイル名が都度変わるようにする(分割完了時のタイムスタンプをつけるなど)
+- [ ] トリミング範囲の移動もやっぱりできるようにする
+- [ ] デザインをあてる
+- [ ] aspect-man との統合
diff --git a/packages/web/src/pages/image-splitter/index.tsx b/packages/web/src/pages/image-splitter/index.tsx
new file mode 100644
index 0000000..56034c3
--- /dev/null
+++ b/packages/web/src/pages/image-splitter/index.tsx
@@ -0,0 +1,17 @@
+import { makeSubPageMetadata } from "~/feature/defaultMetadata";
+import { PAGE_IMAGE_SPLITTER } from "~/feature/page-path";
+import ImageSplitterScene from "~/component/ImageSplitterScene";
+import PageMeta from "~/component/PageMeta";
+
+const metadata = makeSubPageMetadata({
+ page: PAGE_IMAGE_SPLITTER,
+ subPageTitle: "画像分割ツール"
+});
+
+const PageImageSplitter = () => (
+
+
+
+);
+
+export default PageImageSplitter;