JavaScriptを使用して、ソースコンテンツを<img>
htmlタグからbase64Stringに変換しました。画像がはっきりと表示されました。次に、javascriptを使用してそのイメージをユーザーのディスクに保存します。
<html>
<head>
<script>
function saveImageAs () {
var imgOrURL;
embedImage.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA" +
"AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO" +
"9TXL0Y4OHwAAAABJRU5ErkJggg==";
imgOrURL = embedImage;
if (typeof imgOrURL == 'object')
imgOrURL = embedImage.src;
window.win = open(imgOrURL);
setTimeout('win.document.execCommand("SaveAs")', 0);
}
</script>
</head>
<body>
<a href="#" ONCLICK="saveImageAs(); return false" >save image</a>
<img id="embedImage" alt="Red dot">
</body>
</html>
<img>
htmlタグのソースとして画像パスを設定すると、このコードはうまく機能しました。ただし、base64Stringが機能しないため、ソースを渡すと。
私が望むものを達成する方法は?
ユーザーが画像またはその他のファイルをダウンロードできるようにするために、HTML5 download
属性を使用できます。
静的ファイルのダウンロード
<a href="/images/image-name.jpg" download>
<!-- OR -->
<a href="/images/image-name.jpg" download="new-image-name.jpg">
動的ファイルのダウンロード
画像を動的にリクエストする場合、そのようなダウンロードをエミュレートすることができます。
画像が既に読み込まれていて、base64
ソース:
saveBase64AsFile(base64, fileName) {
var link = document.createElement("a");
link.setAttribute("href", base64);
link.setAttribute("download", fileName);
link.click();
}
それ以外の場合、イメージファイルがBlob
としてダウンロードされる場合、FileReader
を使用してBase64に変換できます。
saveBlobAsFile(blob, fileName) {
var reader = new FileReader();
reader.onloadend = function () {
var base64 = reader.result ;
var link = document.createElement("a");
link.setAttribute("href", base64);
link.setAttribute("download", fileName);
link.click();
};
reader.readAsDataURL(blob);
}
悪いニュース!注意してください:IEはサポートされていません: Caniuse link
JavaScriptでは、ファイルシステムに直接アクセスすることはできません。ただし、ユーザーが保存場所を選択できるように、ブラウザにダイアログウィンドウをポップアップさせることができます。これを行うには、Base64Stringでreplace
メソッドを使用し、"image/png"
with "image/octet-stream"
:
"data:image/png;base64,iVBORw0KG...".replace("image/png", "image/octet-stream");
また、W3C準拠のブラウザーは、base64でエンコードされたバイナリデータを操作するための2つのメソッドを提供します。
おそらく、あなたはそれらをある意味で有用だと思うでしょう...
ここに、私があなたが必要と理解しているもののリファクタリングされたバージョンがあります:
window.addEventListener('DOMContentLoaded', () => {
const img = document.getElementById('embedImage');
img.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA' +
'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO' +
'9TXL0Y4OHwAAAABJRU5ErkJggg==';
img.addEventListener('load', () => button.removeAttribute('disabled'));
const button = document.getElementById('saveImage');
button.addEventListener('click', () => {
window.location.href = img.src.replace('image/png', 'image/octet-stream');
});
});
<!DOCTYPE html>
<html>
<body>
<img id="embedImage" alt="Red dot" />
<button id="saveImage" disabled="disabled">save image</button>
</body>
</html>