ImageCollector2は、Webページ上の画像を効率的に収集し、ユーザーに視覚的に表示し、ダウンロードリンクを提供するUserscriptです。TampermonkeyやFirefoxの右クリックメニューから起動し、収集した画像をモーダルウィンドウ内でグリッドレイアウトで表示します。
- 使用技術: Userscript (JavaScript), HTML, CSS
- リクエスト: CORS制限を回避するため、全て
GM_xmlhttpRequest
を使用。fetch
は使用しない。 - 構造: クラスベースで構造化された実装を採用。
- デバッグ: クラスは
unsafeWindow
に露出され、コンソールから操作可能。
- 起動: Tampermonkeyメニューまたは右クリックメニュー(Firefoxのみ)から起動。
- 進捗表示: 進捗表示バーで収集状況を表示。
- 画像収集: 裏で画像収集を実行。
- モーダル表示: 収集した画像をグリッドレイアウトでモーダル内に表示。
- ユーザー操作: 全画面表示、ダウンロード、元リンク表示などの操作が可能。
- 終了: 閉じるボタンまたはモーダルの欄外クリックでモーダルを閉じる。
- 背景: 黒めの灰色で覆い、モーダルが際立つデザイン。欄外クリックで閉じることが直感的に分かる。
- モーダル本体: 半透明のガラススタイル(Frosted Glass)。
- 閉じるボタン: モーダル内に配置。
- グリッドレイアウト: 画像が美しく理路整然と配置され、少し透けたスタイル。
- 全画面モード:
- 画像をクリックで全画面表示。
- 上部にファイル名を表示。
- ダウンロードボタンと元リンクへのリンクを提供。
- 巨大ファイル対応: ファイルサイズが大きすぎる画像はプレースホルダーを表示し、サイズ確認後に読み込み可能。
-
MenuRegister
- Tampermonkeyのメニューを管理。
- 起動コマンドを登録。
-
UIBuilder
- モーダルやグリッドレイアウトのUIを構築。
-
UIStyles
- UI用のCSSスタイルを管理。
- 半透明ガラススタイルやグリッドデザインを定義。
-
UIBatchUpdater
- 構築済みのUIに画像データをバッチ処理で追加。
-
UIEventHandler
- モーダルのクリック、全画面表示、ダウンロードなどのイベントを処理。
-
ImageCollectorMain
- 画像収集の心臓部。詳細は後述。
-
BadImageHandler
- 小さすぎる、大きすぎる、表示不可、リクエスト失敗などの画像を除去。
-
Toast
- トースト通知を表示(成功・失敗通知など)。
-
ProgressBar
- 収集進捗をプログレスバーで表示。
-
RequestBatchLimiter
- リクエスト制限とバッチ処理を管理。
- サーバー負荷を考慮した非同期処理。
以下の方法で画像を取得し、RequestBatchLimiter
と連携して低負荷・高速処理を実現。
img
要素:src
属性から取得。picture
要素:source
要素から取得。a
要素:href
から画像URLを取得。- 背景画像:
background-image
スタイルから取得。 - リダイレクト対応:
- URL内に別のURLが含まれる場合(例:
https://www.example.com/redirect?https://www.example2.com/example.jpg
)、リダイレクトを検知・解決。
- URL内に別のURLが含まれる場合(例:
- SNS対応:
- Twitter(X)やその他SNSの画像URLに対応。
- イメージホスト対応:
- 世界の有名イメージホストサービスのURLをサポート。
- URLリストは一元管理され、後から簡単に追加可能。
- 非同期処理:
GM_xmlhttpRequest
を使用し、非同期でリクエスト。 - 負荷考慮: イメージホストおよびファーストパーティサーバーへの負荷を最小限に。
- 柔軟性: 新しい収集方法やURLパターンを簡単に追加可能。
- CORS制限:
fetch
を使わず、GM_xmlhttpRequest
で回避。 - サーバー負荷:
RequestBatchLimiter
でリクエストを制限・バッチ化。 - 巨大ファイル:
BadImageHandler
でプレースホルダー表示を管理。
- 全てのクラスは
unsafeWindow
に露出。 - コンソールからクラスインスタンスを操作可能。
- 新しい画像ホストやSNSのURLパターンを追加する際、設定ファイルを更新するだけで対応可能。
- UIのカスタマイズ性を高めるため、
UIStyles
にテーマ機能を追加予定。 - ファイル名はImageCollector2.user.jsとする。