0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ウェブ画像を自動抽出して保存するiOSアプリをFlutterで作った

0
Posted at

はじめに

ウェブ上の画像をワンタップで取得・保存できるiOSアプリ「画像ダウンローダー」をリリースしました。本記事では、実装における技術的なポイントや工夫した点を紹介します。

App Store: https://apps.apple.com/jp/app/id6807882065

使用技術

  • Flutter(iOS向け)
  • WebView(内蔵ブラウザ)
  • JavaScript連携(画像の抽出)
  • 各種権限・写真ライブラリ連携
  • AdMob(バナー広告)

実装のポイント

1. 内蔵ブラウザと画像抽出の連携

内蔵ブラウザとしてWebViewを採用し、ページ読み込み完了後にJavaScriptを注入してDOMを走査する構成にしました。imgタグのsrcを収集するだけでなく、getComputedStyleで各要素のbackground-imageを取得することで、CSS背景画像にも対応しています。

// 抽出した画像URLをJS側から受け取るイメージ
final result = await controller.runJavaScriptReturningResult(jsCode);

2. imgタグ+CSS背景画像の両対応

imgタグだけでは取りこぼしが多いため、全要素を走査してbackground-imageにurl(...)が含まれるものを正規表現で抽出しました。相対URLはページのベースURLと結合して絶対URLに変換しています。

3. サムネイル一覧とまとめて保存

抽出した画像はサムネイル一覧で表示し、複数選択して一括ダウンロードできるUIにしました。大量の画像を扱うため、サムネイル表示は遅延読み込みとし、スクロール性能を確保しています。

4. アプリ内ギャラリーと写真アプリ連携

ダウンロードした画像はアプリ内のギャラリーで一覧管理し、タップで拡大表示。写真アプリへの転送やShareSheetでの共有にも対応させました。不要な画像の削除もアプリ内で完結します。

工夫した点

  • 画像抽出をJS側に寄せることで、Flutter側の処理を軽量化
  • 相対URL・絶対URLの両方を正しく扱えるよう正規化処理を実装
  • 一覧UIはサムネイルの遅延読み込みでスクロールを快適に
  • 無料提供のためバナー広告を画面下部に配置

おわりに

「ウェブ閲覧中に画像を保存したい」というシンプルな課題を、ブラウザ機能と画像抽出を組み合わせて解決しました。FlutterのWebViewとJavaScript連携は、DOM操作を伴うアプリと相性が良いと感じています。

App Store: https://apps.apple.com/jp/app/id6807882065

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?