<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <code class="DOMi" xml:lang="en">HTMLCanvasElement</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">toDataURL</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は、 <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data:</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> による表現を返します。</p><section><h1>画像形式</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">画像形式</anchor>を指定できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
省略された場合の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既定値</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PNG</anchor> (<code class="MIME" xml:lang="en">image/png</code>)
です。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PNG</anchor> 出力は、必ず<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装</anchor>しなければならないことになっています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JPEG</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JFIF</anchor> (<code class="MIME" xml:lang="en">image/jpeg</code>)
を指定することもできます。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装</anchor>は必須とはなっていませんが、
多くの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>は対応しています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">写真</anchor>を扱う <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JPEG</anchor>
と指定していることがあります。最悪 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PNG</anchor> でも良いのかもしれませんが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JPEG</anchor> の方が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイルサイズ</anchor>その他の都合は良さそうです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JPEG</anchor> にすると<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">透過色</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">不透明</anchor>になります。</p></section><section><h1>濫用</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 
<cite xml:lang="ja">ゆみやさんはTwitterを使っています: 「超・evilなスクレイピング対策として、canvasに突っ込む画像を配信する際にわざとCORS違反すると、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">canvas</anchor>が「汚染」されてtoDataURL()が使えなくなるという手法がある https://t.co/gnSEry083G」 / Twitter</cite>, <time>午後10:25 · 2023年5月28日<attrvalue xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">2023-05-28T13:25:49.000Z</attrvalue></time>, <time>2023-05-30T03:32:21.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://twitter.com/stepney141/status/1662812420333764610">https://twitter.com/stepney141/status/1662812420333764610</anchor-external><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <cite xml:lang="ja">フシハラさんはTwitterを使っています: 「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ジャンプ+</anchor>でやってみたけど&quot;Tainted canvases may not be exported.&quot;で弾かれた。これは対策済みという理解でいいのかな? CORSポリシーで別ドメインの画像を配置するとこうなるらしい。意図的にやればちょっと強力だな。 devtoolでチョイチョイ程度ではこれは回避出来無さそう https://t.co/XSu2UH3GY2」 / Twitter</cite>, <time>午前3:24 · 2023年5月29日<attrvalue xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">2023-05-28T18:24:09.000Z</attrvalue></time>, <time>2023-05-30T03:32:21.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://twitter.com/Fushihara/status/1662887499625267200">https://twitter.com/Fushihara/status/1662887499625267200</anchor-external></li></ul></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 
悪質な人には何の対策にもならず、一般利用者には不便になるだけの「対策」。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">技術者倫理</anchor>はどうなっているのか。</p></section><section><h1>歴史</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 元々 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hixie</anchor> は <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">src</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>が <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data:</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> を返す形で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Applications 1.0</anchor> に規定しましたが、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Bugzilla</anchor>
での議論を踏まえて <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">toDataURL</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>となりました。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(当初の <anchor>Hixie</anchor> の案では <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLCanvasElement</anchor></code> は <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLImageElement</anchor></code> を<anchor>継承</anchor>していました。今はしていません。)</weak></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite>Bug 291218 – Canvas .toDataURL() method (was: src attribute)</cite>
( (<time>2011-01-20 00:01:18 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://bugzilla.mozilla.org/show_bug.cgi?id=291218">https://bugzilla.mozilla.org/show_bug.cgi?id=291218</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> この議論を経て <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Gecko</anchor> に実装されたのが2005年4月以降のことでした。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> ちょうど2005年3月に <code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&lt;input type=uri&gt;</anchor></code> が 
<code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&lt;input type=url&gt;</anchor></code> に改名されています。それと関係あるのか無いのか、
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal> では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> にしようという案は出ていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Applications 1.0</anchor> 仕様にはじめて入ったのは2005年4月21日版です。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://replay.waybackmachine.org/20050422013652/http://whatwg.org/specs/web-apps/current-work/#todataurl">http://replay.waybackmachine.org/20050422013652/http://whatwg.org/specs/web-apps/current-work/#todataurl</anchor-external></comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Android</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>はなぜか常に <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data:,</anchor></code> を返します。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">iPhone</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Mobile Safari</anchor> では問題ないので、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebKit</anchor>
の不具合ではなさそうです。 <time>2011-01-19T15:09:24.600Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Android</anchor> 版のブラウザが古い <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebKit</anchor> から派生しているためらしいです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ニンテンドー3DS</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターネットブラウザー</anchor>でも正しく動作しない模様です。</p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <cite xml:lang="en-US">HTMLCanvasElement.toDataURL() - Web API Interfaces | MDN</cite>
(<time>2015-06-21 09:00:07 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL">https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL</anchor-external></figcaption><blockquote><p>Chrome also supports the image/webp type.</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <cite>Issue 170565 - chromium - <strong></strong>[<strong></strong>Canvas<strong></strong>]<strong></strong> toDataURL does not export WEBP with alpha channel - An open-source project to help move the web forward. - Google Project Hosting</cite>
(<time>2015-06-24 00:57:24 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://code.google.com/p/chromium/issues/detail?id=170565">https://code.google.com/p/chromium/issues/detail?id=170565</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en">Safari 4.0</cite>
(<time>2015-11-04 22:55:25 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://developer.apple.com/library/safari/releasenotes/General/WhatsNewInSafari/Articles/Safari_4_0.html#//apple_ref/doc/uid/TP40014305-CH4-SW18">https://developer.apple.com/library/safari/releasenotes/General/WhatsNewInSafari/Articles/Safari_4_0.html#//apple_ref/doc/uid/TP40014305-CH4-SW18</anchor-external></figcaption><blockquote><p>WebKit now implements the HTML5 canvas pixel manipulation standard along with the toDataURL() method standard.</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <cite xml:lang="en">Use USVString for all URLs</cite>
( (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">domenic</anchor>著, <time>2016-05-20 22:02:29 +09:00</time>))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3">https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <cite xml:lang="en">Make quality an explicit argument for canvas image conversion</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">domenic</anchor>著, <time>2016-08-27 03:42:08 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/7d25c4c2452b705220417ffb951c9b89e04ba50b">https://github.com/whatwg/html/commit/7d25c4c2452b705220417ffb951c9b89e04ba50b</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">Define encoder failure actions for toDataURL/toBlob</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">junov</anchor>著, <time>2017-02-11 23:42:36 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/93c0a157dbe238582584a0e8c2f621958bb39a45">https://github.com/whatwg/html/commit/93c0a157dbe238582584a0e8c2f621958bb39a45</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <cite xml:lang="en">Give toDataURL() and toBlob() default parameter values</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GloverDonovan</anchor>著, <time>2019-01-31 05:57:14 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/b799322188cf33c7caef336bb27fe9223d995b24">https://github.com/whatwg/html/commit/b799322188cf33c7caef336bb27fe9223d995b24</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite xml:lang="en">Give &lt;canvas&gt;'s toDataURL() and toBlob() default parameter values · Issue #3430 · whatwg/html</cite>
(<time>2020-08-31 18:22:17 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/issues/3430">https://github.com/whatwg/html/issues/3430</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <cite xml:lang="en">Give toDataURL() and toBlob() default parameter values by GloverDonovan · Pull Request #3477 · whatwg/html</cite>
(<time>2020-08-31 18:22:41 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/pull/3477">https://github.com/whatwg/html/pull/3477</anchor-external></p></section></body></html>