🖼 Photo_html_Display.convertImageToBase64()
async convertImageToBase64(url, maxWidth = 300) {
return new Promise((resolve, reject) => {
const image = new Image();
image.crossOrigin = 'anonymous';
image.onload = function () {
const ratio = Math.min(1, maxWidth / this.width);
const canvasWidth = this.width * ratio; // 1920px → 300px (約16%)
const canvasHeight = this.height * ratio;
const canvas = document.createElement('canvas');
canvas.width = canvasWidth;
canvas.height = canvasHeight;
const ctx = canvas.getContext('2d');
ctx.drawImage(this, 0, 0, canvasWidth, canvasHeight);
const dataUrl = canvas.toDataURL('image/jpeg');
resolve(dataUrl);
};
image.onerror = reject;
image.src = url;
});
}
観察メモ
- `maxWidth` は 300 固定。元画像が 1920×1080 の場合、幅は 300px、高さは約 169px まで圧縮される。
- JPEG の BASE64 に変換することで外部ドメイン依存を無くしている。
- 画質は大きく落ちるが、キャッシュなしでも描画できるメリットを優先した構造。
- ギャラリーがミニチュア化され、3D 空間で貼り付けても 300px 相当の解像度しか残らない。