HTML ã§ã¯ç»åã« crossorigin
屿§ãæä¾ããé©å㪠CORS ãããã¼ã¨çµã¿åããããã¨ã§ã <img>
è¦ç´ ã§å®ç¾©ããã¦ããä»ã®ãªãªã¸ã³ããèªã¿è¾¼ã¾ããç»åãã <canvas>
ã®ä¸ã§ç¾å¨ã®ãªãªã¸ã³ããèªã¿è¾¼ã¾ããç»åã§ãããã®ããã«æ±ããã¨ãã§ãã¾ãã
crossorigin
屿§ã®ä½¿ãæ¹ã«ã¤ãã¦ã¯ CORS è¨å®å±æ§ãã覧ãã ããã
ãã£ã³ãã¹ã®ããããããå ã®ãã¯ã»ã«ã¯æ§ã ãªã½ã¼ã¹ãä¾ãã°ä»ã®ãã¹ãããåãåã£ãç»åãåç»ãªã©ããæ¥ããã¨ãããã¾ãããã»ãã¥ãªãã£ã®åé¡ãçºçãããã¨ãé¿ãããã¾ããã
CORS ã«ãã許å¯ãªãã«ä»ã®ãªãªã¸ã³ããèªã¿è¾¼ãã ä½ããã®ãã¼ã¿ããã£ã³ãã¹ã«æç»ããã¨ããã£ã³ãã¹ã¯æ±æ (taint) ããã¦ãã¾ãã¾ããæ±æããããã£ã³ãã¹ã¯å®å ¨ã¨ã¿ãªãããªããªãããã®ãã£ã³ãã¹ããç»åãã¼ã¿ãåå¾ãããã¨ããã¨ãä¾å¤ãçºçããã§ãããã
å¤é¨ã³ã³ãã³ãã®å
ã HTML ã® <img>
ã¾ã㯠SVG ã® <svg>
è¦ç´ ã§ãã£ãå ´åããã£ã³ãã¹ã®å
容ãåå¾ãããã¨ãããã¨ã¯è¨±å¯ããã¦ãã¾ããã
HTMLCanvasElement
ã¾ã㯠ImageBitMap
ã®ã©ã¡ããã¨ãã¦åå¾ãããå
ãåä¸ãªãªã¸ã³è¦åã«åããªãç»åããåå¾ããå¤é¨ã®ã³ã³ãã³ãã¯ããã£ã³ãã¹ã®å
容ãèªã¿åããã¨ããã¨ãããã¯ããã¾ãã
æ±æããããã£ã³ãã¹ã§ä»¥ä¸ã®å¼ã³åºããè¡ãã¨ãã¨ã©ã¼ãçºçãã¾ãã
getImageData()
ã®å¼ã³åºãtoBlob()
ãtoDataURL()
ãcaptureStream()
ã® <canvas>
è¦ç´ èªèº«ã«å¯¾ããå¼ã³åºããã£ã³ãã¹ãæ±æããã¦ããå ´åã«ãããã®ä½ãããè¡ãã¨ã SecurityError
ãçºçãã¾ããããã«ãã£ã¦ãå¤é¨ã®ã¦ã§ããµã¤ãã許å¯ãªãã«æ
å ±ãå¼ãåºãããã«ãç»åã使ç¨ãã¦å人çãªãã¼ã¿ãæ´é²ãããã¨ããã¦ã¼ã¶ã¼ãå®ãã¾ãã
ãã®ä¾ã§ã¯ãå¤é¨ã®ãªãªã¸ã³ããç»åãåãåãããã¼ã«ã«ã¹ãã¬ã¼ã¸ã«ä¿åãããã¨ã許å¯ãã¾ãããããå®è£ ããã«ã¯ãã³ã¼ããæ¸ãã ãã§ãªããã®ã¦ã§ããµã¤ãã®ãµã¼ãã¼ãæ§æããå¿ è¦ãããã¾ãã
ã¦ã§ããµã¼ãã¼ã®æ§ææåã«å¿
è¦ãªãã®ã¯ãç»åããã¹ãã£ã³ã°ããç»åãã¡ã¤ã«ã«å¯¾ãããªãªã¸ã³éã®ã¢ã¯ã»ã¹ã許å¯ããããã«ã Access-Control-Allow-Origin
ãããã¼ãæ§æããããµã¼ãã¼ãå¿
è¦ã§ãã
Apache ã使ç¨ãã¦ãµã¤ããæä¾ãã¦ã¿ã¾ãããã HTML5 Boilerplate ã® CORS ç»åã®ããã® Apache ãµã¼ãã¼æ§æãã¡ã¤ã«ãèãã¦ã¿ã¾ãããã
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
<FilesMatch "\.(avifs?|bmp|cur|gif|ico|jpe?g|jxl|a?png|svgz?|webp)$">
SetEnvIf Origin ":" IS_CORS
Header set Access-Control-Allow-Origin "*" env=IS_CORS
</FilesMatch>
</IfModule>
</IfModule>
ã¤ã¾ãããã®æ§æã¯ãµã¼ãã¼ã«ã°ã©ãã£ãã¯ã®ãã¡ã¤ã«ï¼æ¡å¼µåã ".bmp", ".cur", ".gif", ".ico", ".jpg", ".jpeg", ".png", ".svg", ".svgz", ".webp" ã§ãããã®ï¼ããã¤ã³ã¿ã¼ãããã®ã©ãããã§ããªãªã¸ã³éã®ã¢ã¯ã»ã¹ãã§ããããã«ãã¾ãã
ä¿åæ©è½ã®å®è£ãµã¼ãã¼ããªãªã¸ã³éã®ç»åã®åå¾ãã§ããããã«æ§æããã®ã§ãç»åãã³ã¼ããå®è¡ãã¦ããã¨ããã¨åããã¡ã¤ã³ããæä¾ããããã®ã§ãããã®ããã«ãã¦ã¼ã¶ã¼ãç»åããã¼ã«ã«ã¹ãã¬ã¼ã¸ã«ä¿åãããã¨ãã§ããããã«ããã³ã¼ããæ¸ããã¨ãã§ãã¾ãã
éµã¨ãªãã®ã¯ã crossOrigin
ãç»åãèªã¿è¾¼ã¾ãã HTMLImageElement
ã«è¨å®ãããã¨ã§ãcrossorigin
屿§ã使ç¨ãããã¨ã§ããããã§ãã©ã¦ã¶ã¼ã«ç»åãã¼ã¿ããã¦ã³ãã¼ããããã¨ããã¨ãã«ãªãªã¸ã³éã®ãªã¯ã¨ã¹ããå½ãã¾ãã
ãã¦ã³ãã¼ããå§ãã (ã¤ã¾ããã¦ã¼ã¶ã¼ãããã¦ã³ãã¼ãããã¿ã³ãã¯ãªãã¯ããæã®) ã³ã¼ãã¯æ¬¡ã«ããã«ãªãã¾ãã
function startDownload() {
let imageURL =
"https://cdn.glitch.com/4c9ebeb9-8b9a-4adc-ad0a-238d9ae00bb5%2Fmdn_logo-only_color.svg?1535749917189";
let imageDescription = "The Mozilla logo";
downloadedImg = new Image();
downloadedImg.crossOrigin = "anonymous";
downloadedImg.addEventListener("load", imageReceived, false);
downloadedImg.alt = imageDescription;
downloadedImg.src = imageURL;
}
ããã§ã¯ãã¼ãã³ã¼ãã£ã³ã°ããã URL (imageURL
) ã使ç¨ãã¦ãã¾ãããã©ãããã§ãæã£ã¦ããã®ã¯ç°¡åã§ããããç»åã®ãã¦ã³ãã¼ããå§ããããã«ãæ°ãã HTMLImageElement
ã Image()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ãã¦çæãã¾ããããããç»å㯠crossOrigin
屿§ã "Anonymous"
(ã¤ã¾ããèªè¨¼ã®ãªããªãªã¸ã³éã®ç»åã®ãã¦ã³ãã¼ã) ã«è¨å®ãããã¨ã§ããªãªã¸ã³éã®ãã¦ã³ãã¼ããã§ããããã«æ§æãã¾ããç»åè¦ç´ ã§ load
ã¤ãã³ããçºçããå ´åãã¤ã¾ãç»åãã¼ã¿ãåä¿¡ãããå ´åã®ã¤ãã³ããªã¹ãã¼ã追å ãã¾ããç»åã«ä»£æ¿ããã¹ãã追å ããã¾ãã <canvas>
㯠alt
屿§ã«å¯¾å¿ãã¦ãã¾ãããããã®å¤ã使ç¨ã㦠aria-label
ã¾ãã¯ãã£ã³ãã¹ã®å
é¨ã³ã³ãã³ããè¨å®ãããã¨ãã§ãã¾ãã
æå¾ã«ãç»åã® src
屿§ããã¦ã³ãã¼ãããç»åã«è¨å®ãã¾ããããããã¦ã³ãã¼ããå§ããå¼ãéã«ãªãã¾ãã
æ°è¦ã®ç»åã®ãã¦ã³ãã¼ããæ±ãã³ã¼ãã¯ã imageReceived()
ã¡ã½ããã«è¦ããã¾ãã
function imageReceived() {
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
canvas.width = downloadedImg.width;
canvas.height = downloadedImg.height;
canvas.innerText = downloadedImg.alt;
context.drawImage(downloadedImg, 0, 0);
imageBox.appendChild(canvas);
try {
localStorage.setItem("saved-image-example", canvas.toDataURL("image/png"));
} catch (err) {
console.error(`Error: ${err}`);
}
}
imageReceived()
㯠HTMLImageElement
ä¸ã§ãã¦ã³ãã¼ãããç»åãåãåã£ããã¨ã表ã "load"
ã¤ãã³ããæ±ãããã«å¼ã³åºããã¾ãããã®ã¤ãã³ãã¯ããã¦ã³ãã¼ããããã¼ã¿ããã¹ã¦å©ç¨å¯è½ã«ãªã£ããä¸åº¦å¼ã³åºããã¾ããæ°ãã <canvas>
è¦ç´ ã使ãããã¨ããå§ã¾ããç»åããã¼ã¿ URL ã«å¤æãã¦ããã£ã³ãã¹ã®äºæ¬¡å
æç»ã³ã³ããã¹ã (CanvasRenderingContext2D
) ããã夿° context
ã¸ã®ã¢ã¯ã»ã¹ãåå¾ãã¾ãã
ãã£ã³ãã¹ã®å¯¸æ³ã¯åä¿¡ããç»åã«åããã調æ´ããããããã drawImage()
ã使ã£ã¦ç»åããã£ã³ãã¹ã«æç»ãã¾ãããããããã£ã³ãã¹ãææ¸ã«æ¿å
¥ãããç»åãè¦ããããã«ãªãã¾ãã
å®éã«ç»åããã¼ã«ã«ã«ä¿åããæã«ãªãã¾ããããã®ããã«ã¯ã¦ã§ãã¹ãã¬ã¼ã¸ API ã®ãã¼ã«ã«ã¹ãã¬ã¼ã¸ã®ä»çµã¿ã使ç¨ãã localStorage
ã°ãã¼ãã«å¤æ°ãéãã¦ã¢ã¯ã»ã¹ãã¾ãããã£ã³ãã¹ã®ã¡ã½ãã toDataURL()
ã使ç¨ãã¦ç»åã data:// URL ã表ã PNG ç»åã«å¤æãããããã setItem()
ãç¨ãã¦ãã¼ã«ã«ã¹ãã¬ã¼ã¸ã«ä¿åãã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4