画像読み込みと1200×900固定Canvasの基礎構造
スクリーンショットデバイスモックアップ作成ツールは,ユーザーのブラウザ上で画像を読み込み,指定された固定寸法のキャンバス上で描画処理を行うシンプルなアーキテクチャを採用しています.処理の中核となるのは,HTML5のCanvas APIを活用した二次元描画コンテキストです.
本ツールでは,出力されるモックアップ画像の解像度を幅1200ピクセル,高さ900ピクセルの固定サイズに設計しています.ユーザーがデバイス上に保存されているスクリーンショット画像を選択すると,ファイル読み込みAPIを介して画像データがメモリ上に展開され,即座にCanvas上の指定座標へと描画される仕組みとなっています.
この固定寸法のCanvasアプローチにより,ブラウザのウィンドウサイズや閲覧環境に依存せず,常に同一の出力結果を得ることが可能となっています.Canvasの生成時においては,まず幅1200ピクセル,高さ900ピクセルの描画領域が確保され,その上に背景,影,デバイス枠,そしてスクリーンショット画像が順次重ね合わせて描画されるレイヤー構造が形成されます.
この際,外部サーバーへ画像データを送信することなく,すべてクライアントサイドのメモリ上で処理が完結する設計を採用していますが,ブラウザのキャッシュやストレージの状況によっては完全なオフライン動作を意図したものではなく,あくまでブラウザのセッション内での一時的な画像生成として機能します.
また,画像読み込み時には単一の画像ファイルのみを受け付ける仕様となっており,複数画像の同時読み込みやバッチ処理といった機能は含んでいません.これにより,処理フローが単一のCanvas描画パイプラインに集約され,安定した画像合成を実現しています.
3種類の汎用枠(iPhone風・MacBook風・モニター風)の描画ロジック
本ツールでは,特定の最新機種や公式の製品デザインテンプレートをそのまま使用するのではなく,Canvasのベクター描画機能を活用してプログラム上で動的に生成される「iPhone風」「MacBook風」「モニター風」という3種類の汎用的なデバイス枠を提供しています.
これらの枠は,すべてパス描画の基本メソッドを組み合わせて描画されており,外部の画像素材に依存していません.たとえば,iPhone風の枠を選択した場合,Canvasの中央に幅340ピクセル,高さ680ピクセルの角丸矩形が描画され,上部には動的アイランド風の黒いノッチ領域が追加されます.
MacBook風の枠では,幅700ピクセル,高さ430ピクセルのディスプレイ領域に加え,その下部にキーボードデッキとトラックパッドを模したシルバーの矩形が配置され,ノートパソコン特有の形状を再現しています.モニター風の枠では,幅740ピクセル,高さ440ピクセルの大きなディスプレイ枠の下に,幅90ピクセルのスタンドと幅200ピクセルの台座部分が描画され,デスクトップ環境を表現します.
これらの枠はあくまで汎用的な形状を模したものであり,実機の正確な寸法や公式のデザインガイドラインに沿ったものではありません.また,パディングの調整機能は実装されておらず,デバイス枠内のスクリーン領域は各枠の定義によって固定されています.このシンプルな描画ロジックにより,多様なスクリーンショットに対して,統一感のあるモックアップ枠を瞬時に生成することが可能となっています.
スクリーンショット画像の矩形引き伸ばしとクリッピング処理
読み込まれたスクリーンショット画像は,選択された汎用デバイス枠のスクリーン領域に対して描画されますが,この際,入力画像の元々の縦横比(アスペクト比)は保持されず,スクリーン領域の矩形に合わせて完全に引き伸ばされる仕様となっています.たとえば,iPhone風の枠では,外枠から一定のオフセットを設けた内部の矩形領域がスクリーンとして定義されており,入力画像はこの幅と高さに強制的にリサイズされて描画されます.
この処理は,Canvas APIの画像描画メソッドに対して,描画対象のX座標,Y座標に加えて,スクリーン領域の幅と高さを指定することで実現されています.画像を枠内に収めるためのトリミング位置の調整や,余白を埋めるフィット方式の選択機能は実装されていません.さらに,スクリーン領域の角が丸みを帯びているデバイス枠(iPhone風など)においては,画像が枠からはみ出さないようにクリッピング処理が適用されます.
具体的には,画像を描画する直前に現在のCanvasの状態を保存し,スクリーン領域のパスを描画した後にクリッピングのメソッドを呼び出します.これにより,その後に描画されるスクリーンショット画像は,定義されたパスの内部にのみ表示され,パスの外部にあるピクセルはマスクされます.
画像の描画が完了した後は,保存した状態を復元することでクリッピング状態を解除し,後続の描画処理(ノッチの追加など)に影響を与えないように制御しています.このように,縦横比を無視した引き伸ばしとクリッピングの組み合わせにより,いかなる寸法の入力画像であっても,デバイス枠のスクリーン領域を隙間なく埋め尽くすことが保証されます.
背景の描画機構とグラデーション・単色の適用
モックアップ画像の背景は,1200×900ピクセルのCanvas全体を塗りつぶす形で描画されます.本ツールでは,「グラデーション」「単色」「背景透過」の3種類の背景設定を提供しています.グラデーション背景が選択された場合,Canvasのメソッドを用いて,左上から右下への線形グラデーションが生成されます.
ツール内にはあらかじめ5種類のカラープリセットが定義されており,ユーザーが選択したプリセットの開始色と終了色がグラデーションのカラーストップとして適用されます.このグラデーションオブジェクトを塗りつぶしのスタイルに設定し,Canvas全体に矩形描画を実行することで,色鮮やかな背景が描画されます.
一方,単色背景が選択された場合は,ユーザーがカラーピッカーから指定したHTMLカラーコードが直接スタイルに設定され,同様にCanvas全体が塗りつぶされます.背景透過が選択された場合は,Canvasの初期化時に実行されるクリアメソッドによってCanvas全体が透明な状態にリセットされた後,背景を塗りつぶす処理がスキップされます.
これにより,最終的に出力されるPNG画像はアルファチャンネル(透過情報)を保持し,他のデザインツールなどで重ね合わせて使用する際に便利な透過背景のモックアップが生成されます.なお,これらの背景描画処理は,デバイス枠やスクリーンショット画像を描画する一番最初のステップとして実行されるため,後から描画される要素の背後に正しく配置されるレイヤー順序が担保されています.
ドロップシャドウの適用とCanvasコンテキスト設定
デバイス枠に対して立体感を与えるために,本ツールではドロップシャドウの切り替え機能を実装しています.影の適用が有効化されている場合,デバイス枠を描画する直前にCanvasコンテキストのシャドウプロパティが設定されます.具体的には,影の色に半透明の黒を指定し,ぼかしの半径,および垂直方向のオフセット値が与えられます.
これにより,Canvas APIが自動的に描画パスの形状に基づいた影を生成し,背景の上にデバイスが浮いているような視覚効果を生み出します.影の生成はCanvasの標準機能に依存しており,光源の角度や影の広がりなどの細かな三次元パースペクティブ計算は行っていません.
また,スクリーンショット画像をクリッピングして描画する際や,MacBook風枠の内部スクリーンなど,影が不要な領域を描画する直前には,必ず影の色を透明に設定し,ぼかしやオフセットをリセットすることで,意図しない影の描画を防いでいます.このように,Canvasコンテキストの状態管理を適切に行うことで,汎用デバイス枠の外側にのみ自然な影を落遵守する仕組みを実現しています.
影の設定はユーザーインターフェースからオン・オフを切り替えることが可能であり,フラットなデザインを好む場合や,後から独自の影を追加したい場合には,影なしのクリーンな状態で画像を生成することもできます.
1200×900固定のPNGエクスポートと制限事項
すべての描画処理が完了したCanvasは,最終的に1枚の画像ファイルとしてエクスポートされます.エクスポート処理にはCanvasをBlobオブジェクトに変換するメソッドが使用され,MIMEタイプとしてPNG形式が指定されます.これにより,1200×900ピクセルの固定解像度を持つPNG画像が生成されます.
JPEGやWebPなど他の画像形式での出力機能は実装されておらず,また,高画質を保証するような解像度のアップスケーリングやオーバーサンプリング処理も行われません.生成されたBlobオブジェクトは,ブラウザ内の一時的なURLに変換され,プレビュー表示およびダウンロード用のリンクとして機能します.
ユーザーがダウンロードボタンをクリックすると,元のファイル名にサフィックスが付与されたファイル名でPNG画像がローカルに保存されます.本ツールはページ上で録画片を保持する構成ですが,Canvasの最大解像度や画像デコードに使用できるメモリ空間は,実行しているブラウザや端末の仕様に依存します.
そのため,極端に巨大な入力画像を処理した場合の挙動は環境によって異なる可能性があります.また,出力画像は常に縦横比4:3の1200×900ピクセルとなるため,特定のプラットフォームが推奨する画像比率や,公式のApp Store向けスクリーンショット規定寸法などに自動調整する機能は持ち合わせていません.
文字入れ機能や複数デバイスの同時配置などの複雑な要件には対応しておらず,シンプルに一つの画像を汎用デバイス枠に引き伸ばしてはめ込み,固定寸法のPNGとして出力するという単一の目的に特化したツール設計となっています.