ç»åã Base64 ããŒã¿ URL ã«å€æããæ¹æ³
Base64 ç»åããŒã¿ URL ãšã¯äœã§ããïŒ
Base64 ç»åããŒã¿ URL ã¯ãç»åãã¡ã€ã«å šäœãããã¹ãæååãšã㊠Web ææžã«çŽæ¥åã蟌ã¿ãç»åãèªã¿èŸŒãããã®åå¥ã® HTTP ãªã¯ãšã¹ããäžèŠã«ããŸãããã©ãŠã¶ãå€éšãã¡ã€ã«ãååŸãã代ããã«ãç»åããŒã¿ã¯ HTML ã CSS å ã«ãã§ã«ååšããŠããŸãã
圢åŒã¯æ¬¡ã®ããã«ãªããŸã:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==
åè§£ãããš:
data:â ããŒã¿ URI ã¹ããŒã ã®ãã¬ãã£ãã¯ã¹image/pngâ åã蟌ãŸããç»åã® MIME ã¿ã€ã;base64â Base64 ãšã³ã³ãŒãã£ã³ã°ã瀺ããŸã,iVBORw0...â å®éã® Base64 ãšã³ã³ãŒããããç»åããŒã¿
ãªãç»åã Base64 ã«å€æããã®ã§ããïŒ
ç»åã Base64 ãšããŠåã蟌ãããšã¯ãããã€ãã®ã·ããªãªã§åœ¹ç«ã¡ãŸã:
HTTP ãªã¯ãšã¹ããæžãã
å€éšç»åãã¡ã€ã«ããšã«åå¥ã® HTTP ãªã¯ãšã¹ããå¿ èŠã§ããBase64 ããŒã¿ URL ã¯ãããã®ãªã¯ãšã¹ããæé€ããããŒãžã®èªã¿èŸŒã¿æéãæ¹åã§ããŸã â ç¹ã«é«é å»¶ã®æ¥ç¶ããå°ããªã¢ã»ããã倿°ããããŒãžã§å¹æçã§ãã
èªå·±å®çµåããã¥ã¡ã³ã
Base64 ç»å㯠HTML ãã¡ã€ã«ãå®å šã«ç§»æ€å¯èœã«ããŸããBase64 ç»åã䜿ã£ãã¡ãŒã«ãã³ãã¬ãŒãã¯ãåä¿¡è ã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ããå€éšãªãœãŒã¹ããããã¯ããŠãæ©èœããŸããåæ§ã«ãç»åãåã蟌ãã HTML ããã¥ã¡ã³ãã¯ãå£ããç»åãã¹ãæ°ã«ããããšãªãåäžã®ãã¡ã€ã«ãšããŠå ±æã§ããŸãã
ããã©ãŒãã³ã¹éèŠã®ããŒãž
ãã¡ãŒã¹ããã¥ãŒã®ããŒããŒç»åãéèŠãª UI èŠçŽ ã§ã¯ãäœåãªã©ãŠã³ãããªãããæé€ããããšã§ãLargest Contentful PaintïŒLCPïŒãªã©ã®ææšãæ¹åã§ããŸãããã ããããã¯å°ããªç»åã«ã®ã¿æå¹ã§ã â 倧ããªç»åã§ã¯ãã€ã³ã©ã€ã³åã¯é广ã«ãªããŸãã
ãªãã©ã€ã³ã§ãæ©èœãã
ç»åãããŒã¿ URL ãšããŠåã蟌ãŸããŠããå Žåããããã¯ãŒã¯ã¢ã¯ã»ã¹ãªãã§æ©èœããŸããããã¯ãªãã©ã€ã³ Web ã¢ããªã±ãŒã·ã§ã³ãããã°ã¬ãã·ã Web ã¢ããªïŒPWAïŒã«ãšã£ãŠäŸ¡å€ããããŸãã
ç»åã Base64 ã«å€æããæ¹æ³
æ¹æ³ 1: ãªã³ã©ã€ã³ããŒã«ã䜿çšããïŒæãç°¡åïŒ
ç»åã Base64 ã«å€æããæãæã£åãæ©ãæ¹æ³ã¯ãå°çšã®ãªã³ã©ã€ã³ããŒã«ã䜿çšããããšã§ããç»åãç¡æã®ãªã³ã©ã€ã³ Base64 ãšã³ã³ãŒãã«ã¢ããããŒãããããã©ãã°ïŒãããããããšãã³ãŒãã«è²Œãä»ããæºåãã§ããå®å šãªããŒã¿ URL ãåŸãããŸãã
æ¹æ³ 2: ãã©ãŠã¶ã§ JavaScript ã䜿çšãã
FileReader API ã¯ããŠãŒã¶ãŒãéžæããç»åã Base64 ã«å€æããç°¡åãªæ¹æ³ãæäŸããŸã:
function imageToBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(new Error('Failed to read file'));
reader.readAsDataURL(file);
});
}
// Usage with a file input
document.getElementById('imageInput').addEventListener('change', async (event) => {
const file = event.target.files[0];
if (!file) return;
const dataUrl = await imageToBase64(file);
console.log(dataUrl);
// Output: data:image/jpeg;base64,/9j/4AAQ...
});
æ¹æ³ 3: Canvas API ã䜿çšãã
Base64 ã«å€æããåã«ç»åã®ãªãµã€ãºãã¯ããããå§çž®ãè¡ãå¿ èŠãããå ŽåãCanvas API ãæé©ã§ã:
function canvasToBase64(canvas, format = 'image/webp', quality = 0.8) {
return canvas.toDataURL(format, quality);
}
// Example: Resize an image before converting
async function resizeImageToBase64(file, maxWidth = 800) {
const bitmap = await createImageBitmap(file);
const canvas = document.createElement('canvas');
const ratio = Math.min(maxWidth / bitmap.width, 1);
canvas.width = bitmap.width * ratio;
canvas.height = bitmap.height * ratio;
const ctx = canvas.getContext('2d');
ctx.drawImage(bitmap, 0, 0, canvas.width, canvas.height);
return canvas.toBase64('image/jpeg', 0.85);
}
æ¹æ³ 4: Node.js ã䜿çšãã
ãµãŒããŒåŽã§ã¯ãfs ã¢ãžã¥ãŒã«ãš Buffer ã䜿çšããŠç»åãã¡ã€ã«ã Base64 ã«å€æããŸã:
const fs = require('fs');
const path = require('path');
function encodeImageToBase64(filePath) {
const buffer = fs.readFileSync(filePath);
const base64 = buffer.toString('base64');
// Detect MIME type from extension
const ext = path.extname(filePath).toLowerCase();
const mimeTypes = {
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.gif': 'image/gif',
'.webp': 'image/webp',
'.svg': 'image/svg+xml',
'.ico': 'image/x-icon',
};
const mimeType = mimeTypes[ext] || 'image/png';
return `data:${mimeType};base64,${base64}`;
}
const dataUrl = encodeImageToBase64('logo.png');
console.log(dataUrl);
æ¹æ³ 5: ã³ãã³ãã©ã€ã³ã䜿çšãã
Linux ãš macOS ã§ã¯ãçµã¿èŸŒã¿ã® base64 ã³ãã³ãã䜿çšã§ããŸã:
# Encode to Base64 and wrap as a data URL
echo "data:image/png;base64,$(base64 -w 0 image.png)"
HTML ã§ Base64 ç»åã䜿çšããæ¹æ³
<img> ã¿ã°ã«çŽæ¥:
<img
src="data:image/webp;base64,UklGRpYCAABXRUJQVlA4WAoAAAA..."
alt="Inline Logo"
width="200"
height="100"
/>
CSS ã§ Base64 ç»åã䜿çšããæ¹æ³
èæ¯ç»åãšããŠ:
.icon-warning {
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjEyIiB5MT0iOCIgeDI9IjEyLjAxIiB5Mj0iOCIvPjwvc3ZnPg==');
width: 24px;
height: 24px;
}
ããã©ãŒãã³ã¹ã®èæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
Base64 ç»åã圹ç«ã€å Žå
- 10 KB æªæºã®å°ããªã¢ã€ã³ã³ãš UI èŠçŽ
- ã¬ã³ããªã³ã°ããããã¯ããéèŠãªãã¡ãŒã¹ããã¥ãŒç»å
- ããŒãžå šäœã§äœ¿çšãããã¹ãã©ã€ããš SVG ã¢ã€ã³ã³
- å€éšç»åããã°ãã°ãããã¯ãããã¡ãŒã«ãã³ãã¬ãŒã
- ãªãã©ã€ã³ãã¡ãŒã¹ãã® Web ã¢ããªãšèªå·±å®çµåããã¥ã¡ã³ã
Base64 ç»åãé广ã«ãªãå Žå
- 倧ããªåçãé«è§£å床ã®ç»åïŒ100 KB 以äžïŒâ Base64 ã®ãªãŒããŒããããšè§£æã®é å»¶ãããã©ãŒãã³ã¹ãæãªããŸã
- é »ç¹ã«å€æŽãããç»å â 倧ã㪠HTML ãã€ããŒãã®ãã©ãŠã¶ãã£ãã·ã¥ãç¡å¹åããã®ã¯ç¡é§ã§ã
- å€ãã®ããŒãžã§å ±æãããç»å â å€éšãã¡ã€ã«ã¯å ±æãã©ãŠã¶ãã£ãã·ã¥ã®æ©æµãåããŸã
- CDN é ä¿¡ç»å â CDN ã¯ã€ã³ã©ã€ã³åãããããŒã¿ãããåªãããã¡ã€ã«é ä¿¡ãæé©åããŸã
10 KB ã®çµéšå
åºãåŒçšãããŠããã¬ã€ãã©ã€ã³: ç»åã 10 KB æªæºã®å Žåã¯ãBase64 ãšããŠã€ã³ã©ã€ã³åããããšãæ€èšããŠãã ããããããã倧ããå Žåã¯ãå¥ãã¡ã€ã«ãšããŠé ä¿¡ããŠãã ãããããã«ãããHTTP ãªã¯ãšã¹ãã®ãªãŒããŒããããšãHTML å ã® Base64 ãšã³ã³ãŒããããããŒã¿ã®ãªãŒããŒãããã®ãã©ã³ã¹ãåããŸãã
ãã ããæé©ãªãããå€ã¯ç¶æ³ã«ãã£ãŠç°ãªããŸã:
- HTTP/2 ãã«ããã¬ãã·ã³ã°ã¯è€æ°ãªã¯ãšã¹ãã®ããã«ãã£ã軜æžããå€éšãã¡ã€ã«ãããé åçã«ããŸã
- äœéãªæ¥ç¶ã§ã¯ããã倧ããªç»åã§ããªã¯ãšã¹ããæé€ããããšã䟡å€ããããŸã
- ã¯ãªãã£ã«ã«ã¬ã³ããªã³ã°ãã¹ã®ãªãœãŒã¹ã§ã¯ãã©ãŠã³ãããªããã 1 åæžããªãããã倧ããªç»åã§ãã€ã³ã©ã€ã³åããŠãã ãã
å§çž®ã«é¢ããèæ ®äºé
JPEG ã PNG ç»åã Base64 ã«å€æããå Žåã¯ã代ããã« WebP ã®äœ¿çšãæ€èšããŠãã ãããWebP ã¯åãå質ã¬ãã«ã§åªããå§çž®ãæäŸããããå°ã㪠Base64 æååã«ãªããŸããå€ãã®ãªã³ã©ã€ã³ããŒã«ã§ã¯ãBase64 ã«å€æããåã«ç»åãåãšã³ã³ãŒãã§ããŸãã
ç»åã Base64 ã«å€æãã
ã³ãŒãã«ç»åãçŽæ¥åãèŸŒãæºåã¯ã§ããŸãããïŒç¡æã®ãªã³ã©ã€ã³ Base64 ãšã³ã³ãŒããšãã³ãŒãã䜿çšããŠç»åãã¢ããããŒãããHTMLãCSSãJavaScript çšã®å®å šãªããŒã¿ URL ãååŸããŸããã â ã€ã³ã¹ããŒã«ã¯äžèŠã§ãã