Saya ingin menyimpan kanvas saya ke img. Saya memiliki fungsi ini:
function save() {
document.getElementById("canvasimg").style.border = "2px solid";
var dataURL = canvas.toDataURL();
document.getElementById("canvasimg").src = dataURL;
document.getElementById("canvasimg").style.display = "inline";
}
Ini memberi saya kesalahan:
Uncaught SecurityError: Gagal mengeksekusi 'toDataURL' pada 'HTMLCanvasElement': Kanvas tercemar tidak boleh diekspor.
Apa yang harus saya lakukan?
javascript
html5-canvas
pengguna3465096
sumber
sumber
Jawaban:
Untuk alasan keamanan, drive lokal Anda dinyatakan sebagai "domain lain" dan akan mencemari kanvas.
(Itu karena info Anda yang paling sensitif kemungkinan ada di drive lokal Anda!).
Saat pengujian coba solusi berikut ini:
Letakkan semua file terkait halaman (.html, .jpg, .js, .css, dll) di desktop Anda (bukan di dalam sub-folder).
Posting gambar Anda ke situs yang mendukung berbagi lintas domain (seperti dropbox.com). Pastikan Anda meletakkan gambar Anda di folder publik dropbox dan juga mengatur tanda asal silang saat mengunduh gambar (var img = Gambar baru (); img.crossOrigin = "anonim" ...)
Instal server web di komputer pengembangan Anda (server web IIS dan PHP keduanya memiliki edisi gratis yang berfungsi dengan baik di komputer lokal).
sumber
Pada tag img atur crossorigin ke Anonymous.
sumber
Jika seseorang melihat jawaban saya, Anda mungkin dalam kondisi ini:
1. Mencoba mendapatkan tangkapan layar peta di kanvas menggunakan openlayers (versi> = 3)
2. Dan melihat contoh mengekspor peta
3. Menggunakan ol.source.XYZ untuk merender lapisan peta
Bingo!
Menggunakan ol.source.XYZ.crossOrigin = 'Anonim' untuk menyelesaikan kebingungan Anda. Atau suka kode berikut:
sumber
Jika Anda menggunakan
ctx.drawImage()
fungsi, Anda dapat melakukan hal berikut:Dan dalam panggilan balik Anda sekarang Anda dapat menggunakan
ctx.drawImage
dan mengekspornya menggunakantoDataURL
sumber
Tainted canvases may not be exported.
pesan kesalahan.Dalam kasus saya, saya menggambar ke tag kanvas dari video. Untuk mengatasi kesalahan kanvas tercemar saya harus melakukan dua hal:
sumber
Sepertinya Anda menggunakan gambar dari URL yang belum menyetel tajuk Akses-Kontrol-Bolehkan-Asal yang benar dan karenanya menjadi masalah .. Anda dapat mengambil gambar itu dari server Anda dan mendapatkannya dari server Anda untuk menghindari masalah CORS ..
sumber
Saya menyelesaikan masalah menggunakan
useCORS: true
opsisumber
Lihat [CORS enabled image] [1] dari MDN. Pada dasarnya Anda harus memiliki server hosting gambar dengan header Access-Control-Allow-Origin yang sesuai.
Anda akan dapat menyimpan gambar-gambar itu ke Penyimpanan DOM seolah-olah mereka disajikan dari domain Anda jika tidak, Anda akan mengalami masalah keamanan.
sumber
Sama seperti build pada jawaban @ markE — jika Anda ingin membuat server lokal. Anda tidak akan memiliki kesalahan ini di server lokal.
Jika Anda menginstal PHP di komputer Anda:
php -S localhost:3000
← Perhatikan ibukota 'S'atau
Jika Anda memiliki Node.js diinstal di komputer Anda:
npm init -y
npm install live-server -g
atausudo npm install live-server -g
di maclive-server
dan itu akan secara otomatis membuka tab baru di browser dengan situs web Anda terbuka.Catatan: ingat untuk memiliki file index.html di root folder Anda atau Anda mungkin memiliki beberapa masalah.
sumber
Saya juga memecahkan kesalahan ini dengan menambahkan
useCORS : true,
kode saya seperti -sumber