【初心者向け】JavaScriptで画像をBase64に変換する超わかりやすい解説
JavaScript で画像を Base64 文字列に変換する方法
FileReader API は、JavaScript でファイルを読み込むための API です。この API を使用して、画像ファイルを非同期的に読み込み、Base64 文字列に変換することができます。
const input = document.getElementById('image-input');
input.addEventListener('change', function() {
const file = input.files[0];
const reader = new FileReader();
reader.onload = function(event) {
const base64String = event.target.result;
console.log(base64String);
};
reader.readAsDataURL(file);
});
このコードでは、まず image-input
という ID の HTMLInputElement を取得します。次に、change
イベントリスナーをこの要素に追加します。このイベントリスナーは、ユーザーがファイルをアップロードしたときに呼び出されます。
イベントリスナー内では、アップロードされたファイルを取得し、新しい FileReader インスタンスを作成します。次に、readAsDataURL()
メソッドを使用して、ファイルを Base64 文字列に変換します。
onload
イベントハンドラーは、ファイルの読み込みが完了したときに呼び出されます。このハンドラー内では、Base64 文字列をコンソールに記録します。
Canvas API は、JavaScript で画像を描画するための API です。この API を使用して、画像をメモリ上のキャンバスに読み込み、そのキャンバスの Base64 エンコードされた表現を取得することができます。
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const image = new Image();
image.onload = function() {
ctx.drawImage(image, 0, 0);
const base64String = canvas.toDataURL('image/png');
console.log(base64String);
};
image.src = 'https://example.com/image.jpg';
このコードでは、まず canvas
という ID の HTMLCanvasElement を取得します。次に、この要素の 2D コンテキストを取得します。
次に、新しい Image インスタンスを作成し、onload
イベントハンドラーを追加します。このイベントハンドラーは、画像の読み込みが完了したときに呼び出されます。
イベントハンドラー内では、画像をキャンバスに描画し、toDataURL()
メソッドを使用してキャンバスの Base64 エンコードされた表現を取得します。
最後に、Base64 文字列をコンソールに記録します。
- FileReader API は、非同期的に画像を読み込む必要がある場合に適しています。
- Canvas API は、画像を加工してから Base64 文字列に変換する必要がある場合に適しています。
その他の注意点
- Base64 文字列はバイナリデータよりも大きくなります。
- Base64 文字列は URL エンコードする必要はありません。
JavaScript で画像を Base64 文字列に変換するサンプルコード
FileReader API を使用する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像を Base64 に変換</title>
</head>
<body>
<h1>画像を Base64 に変換</h1>
<input type="file" id="image-input">
<script>
const input = document.getElementById('image-input');
input.addEventListener('change', function() {
const file = input.files[0];
const reader = new FileReader();
reader.onload = function(event) {
const base64String = event.target.result;
console.log(base64String);
};
reader.readAsDataURL(file);
});
</script>
</body>
</html>
このコードは、HTML ファイルと JavaScript コードで構成されています。
HTML ファイルには、画像ファイルを選択するための <input type="file">
要素が含まれています。JavaScript コードは、この要素の change
イベントリスナーを定義します。このイベントリスナーは、ユーザーがファイルをアップロードしたときに呼び出されます。
Canvas API を使用する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>画像を Base64 に変換</title>
</head>
<body>
<h1>画像を Base64 に変換</h1>
<canvas id="canvas"></canvas>
<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const image = new Image();
image.onload = function() {
ctx.drawImage(image, 0, 0);
const base64String = canvas.toDataURL('image/png');
console.log(base64String);
};
image.src = 'https://example.com/image.jpg';
</script>
</body>
</html>
HTML ファイルには、画像を表示するための <canvas>
要素が含まれています。JavaScript コードは、この要素の 2D コンテキストを取得します。
この 2 つの例は、基本的な使用方法を示しています。実際の使用例では、必要に応じてコードを拡張することができます。
JavaScript で画像を Base64 文字列に変換するその他の方法
バイナリデータを直接エンコードする
この方法は、比較的新しく、シンプルで高速な方法として注目されています。
const file = document.getElementById('image-input').files[0];
const reader = new FileReader();
reader.onload = function(event) {
const byteArray = event.target.result;
const base64String = btoa(String.fromCharCode(...byteArray));
console.log(base64String);
};
reader.readAsArrayBuffer(file);
利点:
- シンプルで高速
- コード量が少ない
- FileReader API を使用する必要がある
- 古いブラウザではサポートされていない可能性がある
Web Worker を使用する
この方法は、メインスレッドをブロックすることなく、画像を非同期的に Base64 文字列に変換することができます。
const worker = new Worker('image-to-base64.js');
worker.onmessage = function(event) {
const base64String = event.data;
console.log(base64String);
};
worker.postMessage(document.getElementById('image-input').files[0]);
- メインスレッドをブロックしない
- 処理速度を向上させることができる
- コードが複雑になる
ライブラリを使用する
この方法は、コードを簡潔に記述することができます。
const base64String = await toBase64(document.getElementById('image-input').files[0]);
console.log(base64String);
- 開発時間を短縮できる
- ライブラリの読み込みが必要
- ライブラリのアップデートに依存する
- シンプルで高速な方法を求める場合は、バイナリデータを直接エンコードする がおすすめです。
- メインスレッドをブロックしたくない場合は、Web Worker を使用する がおすすめです。
- コードを簡潔に記述したい場合は、ライブラリを使用する がおすすめです。
上記以外にも、様々な方法があります。ご自身のニーズに合った方法を選択してください。
javascript base64