Ryota

← プロジェクト一覧に戻る

画像形式変換ツール

ブラウザ上で完結する、複数画像の形式を一括変換するWebアプリケーション。

TECHNICAL STACK

  • フロントエンド: HTML, CSS, JavaScript (フルスクラッチ)
  • 主要技術: Canvas API, File API, Web Blob
  • ライブラリ: JSZip.js

1. 課題と開発コンセプト

WebPへの変換や、スクリーンショット(PNG)のJPEG化など、画像形式の変換は頻繁に発生する作業です。しかし、専用ソフトウェアのインストールや、Webサービスへのファイルアップロードは手間がかかり、特に機密性の高い画像を外部サーバーに送信することにはプライバシー上の懸念がありました。

この課題に対し、サーバーにデータを送信せず、すべての処理がブラウザ内で完結することをコンセプトとしたツールを開発しました。これにより、高速かつセキュアな画像変換体験を提供することを目指しました。

2. 技術的特徴とアーキテクチャ

① クライアントサイド完結のアーキテクチャ

  • プライバシー保護: ユーザーが選択した画像ファイルは外部サーバーに一切送信されません。File APIを用いてローカルでファイルを読み込み、処理結果もブラウザ内で生成するため、情報漏洩のリスクがありません。
  • サーバーレス動作: バックエンドが不要なため、静的なWebサーバーにホスティングするだけで動作します。これにより、インフラコストを最小限に抑えることができます。

② Canvas APIによる画像形式変換

  • 中核技術: 変換処理の心臓部にはCanvas APIを採用。選択された画像を一度非表示のCanvas要素に描画し、canvas.toBlob()メソッドを利用して、指定されたMIMEタイプ(`image/png`, `image/jpeg` 등)のBlobオブジェクトとして出力します。
  • 柔軟な対応: この手法により、ブラウザがサポートする任意の画像形式への変換を、JavaScriptのみで柔軟に実装することができました。

3. 主な機能と実装詳細

一括変換機能

複数の画像ファイルを一度に選択し、指定したフォーマットへ一括で変換可能。作業効率を大幅に向上させます。

ZIPファイルの入出力

JSZip.jsライブラリを活用し、画像が含まれたZIPファイルを直接読み込んで処理する機能と、変換後の全画像を単一のZIPファイルとして一括ダウンロードする機能の両方を実装しました。

対応フォーマット

Webで広く利用されているPNG, JPEG, WebPの3形式について、相互に変換が可能です。

プレビューと個別ダウンロード

変換後の画像は一覧でプレビュー表示され、結果を確認しながら必要なものだけを個別にダウンロードすることもできます。

動的なUI制御

ファイルが選択されるまで「一括変換」ボタンを無効化するなど、ユーザーの操作状況に応じてUIの状態を動的に変更し、誤操作を防ぐ設計にしています。

エラーハンドリング

対応していない拡張子のファイルが選択された場合や、ZIPファイルの解凍に失敗した場合に、エラーメッセージを分かりやすく表示します。

4. 成果と今後の展望

本プロジェクトを通じて、File API、Canvas API、Blobといった、ブラウザでバイナリデータを扱うためのモダンなWeb技術への理解を深めることができました。 特に、ユーザーのプライバシーと利便性を両立させるクライアントサイド完結のアプリケーション設計は、大きな学びとなりました。 今後は、リサイズや品質調整機能の追加、さらなる対応フォーマットの拡充などを検討していきたいと考えています。