JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

UIWebViewでHTML5 CanvasをRetinaディスプレイに対応させる方法

RetinaディスプレイでHTML5 Canvasの画像を鮮明に表示するには

iPhoneなどのRetinaディスプレイは、物理ピクセル数がCSSピクセル数の2倍(devicePixelRatio = 2)になっています。そのため、UIWebView内でHTML5 Canvasに画像をそのまま描画すると、解像度が足りず画像がぼやけて表示されることがあります。

Retinaサイズの画像をCanvasにきれいに表示するには、Canvasの実サイズを window.devicePixelRatio 倍に拡大し、その後 scale() メソッドで座標系を調整するのがポイントです。以下のコード例を参考にしてください。

var context = myCanvas.getContext("2d");

context.attr("width", width * window.devicePixelRatio);
context.attr("height", height * window.devicePixelRatio);

context.scale(window.devicePixelRatio, window.devicePixelRatio);
context.drawImage(img, x, y, width, height);

コードのポイント解説

1. Canvasのサイズを拡大する
Canvasのwidth・heightに window.devicePixelRatio を掛けた値を設定します。これにより、Canvasの実際の描画領域がRetina解像度に合わせて拡大されます。

2. 座標系をスケーリングする
context.scale() を使って描画座標系をdevicePixelRatio分だけ拡大します。これにより、以降の描画命令では従来どおりCSSピクセル単位の座標やサイズを指定できるようになります。

3. 画像を描画する
drawImage() で画像を描画します。座標系がすでに調整されているため、論理サイズ(width・height)を指定するだけで、高解像度のまま鮮明に描画されます。

この手法はUIWebViewに限らず、WKWebViewやモバイルSafariなど、高DPIディスプレイを搭載した環境全般で有効です。画像だけでなく、Canvas上に描画するテキストや図形も同様にくっきりと表示できるようになります。

  1. HTML5のCanvas要素を印刷する方法【サンプルコード付き】

    HTML5 Canvas要素を印刷するには HTML5の<canvas>要素は、そのままの状態では印刷ダイアログから意図どおりに出力できないことがあります。そこで一般的なのが、Canvasの描画内容をPNG画像のデータURLに変換し、それを新しいブラウザウィンドウに表示してから印刷を実行するという手法です。 ここでは、代表的な2つの実装方法を紹介します。 方法1:printElementプラグインを使う jQueryのprintElement系プラグインを利用すると、Canvas要素をシンプルな記述で印刷できます。まず、HTML側に印刷用のリンクを配置します。 <a hre

  2. HTML5 Canvasの変換(トランスフォーム)基本解説

    HTML5のCanvas APIには、変換行列(transformation matrix)を直接操作できるメソッドが用意されています。変換行列は初期状態で単位変換(identity transform)となっており、その後、各種の変換メソッドを呼び出すことで自由に調整できます。 主な変換メソッド translate(x, y):座標原点を指定した位置へ移動します。 rotate(angle):指定した角度(ラジアン)だけ描画内容を回転させます。 scale(x, y):横方向・縦方向に拡大・縮小します。 transform(a, b, c, d, e, f):現在の変換行列に、指定した行列