JavaScriptでHTMLページ上の画像をデータURIに変換する方法
Web開発では、ページ上の画像をデータURI(Base64エンコードされた文字列)に変換したい場面があります。例えば、画像をそのままHTMLやCSSに埋め込んだり、サーバーへのリクエストを減らしたりするケースです。
JavaScriptを使ってHTMLページ内の<img>タグの画像をデータURIに変換するには、以下の手順を実行します。
canvas要素を作成する- canvasの幅と高さを対象の画像と同じサイズに設定する
- canvas上に画像を描画する
toDataURL()メソッドを呼び出す
基本的な仕組み
toDataURL()メソッドは、canvasに描画された内容をBase64エンコードされたデータURIとして返します。引数にMIMEタイプ(例:'image/jpeg'や'image/png')を指定することで、出力形式を選択できます。指定しない場合はデフォルトでPNG形式になります。
実装例
例えば、idが「my-image」である画像要素がある場合、次のようなコードでデータURIを取得できます。
function getDataUrl(img) {
// canvas要素を作成
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 幅と高さを画像に合わせて設定
canvas.width = img.width;
canvas.height = img.height;
// canvasに画像を描画
ctx.drawImage(img, 0, 0);
return canvas.toDataURL('image/jpeg');
}
// 画像要素を取得
const img = document.querySelector('#my-image');
img.addEventListener('load', function (event) {
const dataUrl = getDataUrl(event.currentTarget);
console.log(dataUrl);
});このコードのポイントは、loadイベントリスナーを使っている点です。画像が完全に読み込まれていない状態で描画すると、空のcanvasになってしまうため、必ず画像の読み込み完了後に変換処理を実行しましょう。
出力結果
このコードを実行すると、コンソールに次のような形式のデータURIが出力されます。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAADSCAMAAABThmYtAAAAXVB
注意点
- CORS制限: 別ドメインから読み込んだ画像の場合、サーバー側で適切なCORSヘッダーが設定されていないと、canvasが汚染(tainted)され、
toDataURL()がセキュリティエラーをスローします。その場合は、画像にcrossorigin="anonymous"属性を設定してください。 - ファイルサイズ: Base64エンコードにより、元の画像より約33%ほどサイズが大きくなります。大きな画像には不向きな場合があります。
- 画質の劣化:
'image/jpeg'を指定した場合、第2引数で品質(0〜1)を指定できます。例:canvas.toDataURL('image/jpeg', 0.8)
この手法を活用すれば、画像のプレビュー表示、クライアントサイドでの画像アップロード、CSSへのインライン埋め込みなど、さまざまな用途に対応できます。
-
JavaScriptで画像をBlobに変換する方法【サンプルコード&解説つき】
JavaScriptで画像をBlobに変換するには?Webアプリケーション開発では、画像などのファイルデータを「Blob(Binary Large Object:バイナリラージオブジェクト)」として扱いたい場面が多くあります。たとえば、画像のアップロード処理やCanvasへの描画、サーバーへのデータ送信などがその代表例です。JavaScriptでは、fetch()メソッドとBlobオブジェクトを組み合わせることで、URLから取得した画像を簡単にBlobへ変換できます。以下に実際のサンプルコードを示します。サンプルコード<!DOCTYPE html> <html lang=&q
-
JavaScriptを使ってキャンバス(Canvas)に画像を描画する方法
HTML5の<canvas>要素に画像を描画するには、Canvas APIが提供するdrawImage()メソッドを使用します。このメソッドを利用することで、ページ上の<img>要素やJavaScriptで生成したImageオブジェクトを、キャンバス上の任意の位置に自由に配置できます。 サンプルコード 以下は、JavaScriptを使ってキャンバスに画像を描画するコード例です。ボタンをクリックすると、あらかじめ用意された画像がキャンバス内に描画されます。 <!DOCTYPE html> <html lang="ja"> <