Rumah > hujung hadapan web > tutorial js > Mengapakah Canvas drawImage() saya kosong atau diisi dengan 'A', dan bagaimana saya boleh membetulkan isu CORS semasa melukis imej luaran?

Mengapakah Canvas drawImage() saya kosong atau diisi dengan 'A', dan bagaimana saya boleh membetulkan isu CORS semasa melukis imej luaran?

Barbara Streisand
Lepaskan: 2024-12-16 14:14:10
asal
749 orang telah melayarinya

Why is my Canvas drawImage() empty or filled with

CanvasContext2D drawImage() Isu: Muatkan Imej dan Konfigurasi CORS

Apabila melukis imej pada kanvas sebelum mendapatkan dataURLnya, isu mungkin timbul apabila data yang dikembalikan kosong, mengandungi banyak aksara "A". Selain itu, imej mungkin tidak dilukis apabila kanvas dilampirkan pada dokumen.

Penyelesaian: Muatkan Acara Imej

Untuk menyelesaikan isu ini, adalah penting untuk menunggu sehingga imej dimuatkan sebelum cuba melukisnya pada kanvas. Gunakan pengendali acara beban elemen:

var img = new Image();
img.onload = function() {
  var canvas = document.createElement('canvas');
  // ... code to draw the image and retrieve dataURL ...
};
img.src = "http://somerandomWebsite/picture.png";
Salin selepas log masuk

Konfigurasi CORS untuk Akses Data Pixel

Satu lagi punca yang berpotensi ialah sekatan yang dikenali sebagai "pencemaran" kanvas. Untuk mengatasinya, konfigurasi CORS (Cross-Origin Resource Sharing) yang betul adalah penting.

  • Imej asal yang sama: Tiada masalah.
  • Luaran imej: Pastikan pelayan membenarkan akses silang asal dalam pengepalanya dan tetapkan img.crossOrigin kepada "use-credentials."
  • Permintaan tanpa nama: Tetapkan img.crossOrigin kepada "anonymous" jika pelayan membenarkan akses tanpa nama.

Nota: Pengepala CORS dikawal oleh pelayan. Atribut silang asal hanya menunjukkan keinginan untuk menggunakan CORS. Ia tidak boleh memintas konfigurasi pelayan yang betul.

Kes Tepi: Sumber Imej Bercampur

Jika imej diperoleh daripada pelayan anda dan pelayan berdaya CORS, pertimbangkan untuk menggunakan acara onerror pengendali untuk mengendalikan imej bukan CORS.

function corsError() {
  this.crossOrigin = '';
  this.src = '';
  this.removeEventListener('error', corsError, false);
}
img.addEventListener('error', corsError, false);
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah Canvas drawImage() saya kosong atau diisi dengan 'A', dan bagaimana saya boleh membetulkan isu CORS semasa melukis imej luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan