Generuję obraz po stronie klienta i wyświetlam go w HTML w następujący sposób:
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgM...."/>
Chcę zaoferować możliwość pobrania wygenerowanego obrazu.
Jak mogę zdać sobie sprawę, że przeglądarka otwiera okno dialogowe zapisywania pliku (lub po prostu pobiera obraz, taki jak chrome lub firefox, do folderu pobierania), które pozwala użytkownikowi zapisać obraz bez klikania prawym przyciskiem myszy i zapisywać jak na obrazie?
Wolałbym rozwiązanie bez interakcji z serwerem. Jestem więc świadomy, że byłoby to możliwe, jeśli najpierw załaduję obraz, a następnie rozpocznę pobieranie.
Wielkie dzięki!
źródło
możesz użyć atrybutu download w tagu ...
<a href="data:image/jpeg;base64,/9j/4AAQSkZ..." download="filename.jpg"></a>
zobacz więcej: https://developer.mozilla.org/en/HTML/element/a#attr-download
źródło
download
atrybut nadal nie jest obsługiwany przez przeglądarki Safari i IE.Chyba img tag jest potrzebny jako dziecko wystąpienia w tagu, w następujący sposób:
<a download="YourFileName.jpeg" href="data:image/jpeg;base64,iVBO...CYII="> <img src="data:image/jpeg;base64,iVBO...CYII="></img> </a>
lub
<a download="YourFileName.jpeg" href="/path/to/OtherFile.jpg"> <img src="/path/to/OtherFile.jpg"></img> </a>
Tylko stosując się znacznik, jak wyjaśniono w # 15 nie pracował dla mnie z najnowszej wersji przeglądarki Firefox i Chrome, ale wprowadzanie tych samych danych obrazu zarówno a.href i img.src tagi pracował dla mnie.
Z JavaScript można to wygenerować w następujący sposób:
var data = canvas.toDataURL("image/jpeg"); var img = document.createElement('img'); img.src = data; var a = document.createElement('a'); a.setAttribute("download", "YourFileName.jpeg"); a.setAttribute("href", data); a.appendChild(img); var w = open(); w.document.title = 'Export Image'; w.document.body.innerHTML = 'Left-click on the image to save it.'; w.document.body.appendChild(a);
źródło
Spójrz na FileSaver.js . Zapewnia przydatną
saveAs
funkcję, która rozwiązuje większość dziwactw specyficznych dla przeglądarki.źródło