Html2canvas: SVG<img/> sangat besar

Dibuat pada 11 Apr 2019  ·  9Komentar  ·  Sumber: niklasvh/html2canvas

Pastikan Anda menguji dengan rilis terbaru
Versi lama tidak didukung dan masalah yang dilaporkan untuk mereka akan ditutup.

Harap ikuti langkah pemecahan masalah umum terlebih dahulu:

  • [x] Anda menggunakan versi terbaru
  • [x] Anda menguji menggunakan versi html2canvas yang tidak diperkecil dan memeriksa kemungkinan masalah yang dilaporkan di konsol

Laporan bug:

Jika saya menggunakan <img src="... .svg"> , svg itu sangat meledak. Ini tampaknya hanya terjadi dengan gambar svg "responsif" (gambar di mana tidak ada tinggi atau lebar yang telah ditetapkan dalam penyandian gambar yang sebenarnya). Gambar dan kotak konten dirender dengan ukuran yang benar tetapi saat digambar di kanvas, gambar mengadopsi ketinggian viewport.

Inilah Fiddle: http://jsfiddle.net/1b4mLnfj/2/

screencapture-html2canvas-hertzen-2019-04-10-22_39_56
screencapture-html2canvas-hertzen-2019-04-10-22_40_16

Spesifikasi:

  • versi html2canvas diuji dengan: 1.0.0-rc.1 / 1.0.0-rc.0
  • Browser & versi: Chrome 73 / Opera 58
  • Sistem operasi: OS X
Bug Unverified

Komentar yang paling membantu

Terima kasih, saya akan memeriksanya

Semua 9 komentar

Saya melampirkan Fiddle, yang saya harap memperjelas ini: http://jsfiddle.net/1b4mLnfj/2/

Terima kasih, saya akan memeriksanya

Saya telah mengaduk-aduk ini untuk sementara waktu dan sepertinya batas wadah dihitung dengan benar tetapi gambar vektor itu sendiri mengadopsi dimensi viewport. Sepertinya batas dan batas melengkung baik-baik saja, jadi saya tidak yakin di mana harus membuat perubahan... Ada yang pernah mengalami masalah seperti ini sebelumnya?

Setelah penyelidikan lebih lanjut, sepertinya ini hanya terjadi dengan gambar svg yang "responsif" -- jika Anda membuka svg di Illustrator dan menyimpan tanpa mencentang opsi responsif, ukurannya akan benar... memiliki tinggi dan lebar yang dikodekan di dalamnya (apa yang disebut Illustrator "responsive") maka itu akan mengadopsi dimensi viewport.

Jadi salah satu solusi potensial adalah mengganti <img> dengan <svg> menggunakan perpustakaan seperti svg-inject (https://github.com/iconfu/svg-inject) -- di sini, jika Anda menerapkan tinggi dan lebar ke <img> , itu akan diadopsi oleh <svg> saat disuntikkan dan itu akan mencegah pengubahan ukuran pada kanvas.

Ada beberapa kelemahan untuk ini (seperti saat menggunakan encoded, base64 src, atau jika Anda memiliki beberapa svg dengan struktur yang sama dan gaya kelas inline) tetapi mungkin ini akan membantu orang lain yang berjuang dengan masalah ini. Saya telah mengerjakan ini dengan mantap selama beberapa hari sekarang dan ini adalah solusi terbaik yang saya miliki sejauh ini. Saya tidak dapat menemukan kode html2canvas aktual yang akan mencegah pengubahan ukuran gambar svg di kanvas jika svg tidak memiliki nilai tinggi/lebar yang disandikan.

Jadi saya menyerah pada yang satu ini, tetapi saya menemukan solusi yang terkait dengan bagaimana svg dirender/digambar di kanvas. Secara khusus, di renderNodeContent jika kita dapat mengetahui cara menentukan apakah suatu gambar adalah svg dan juga yang tidak memiliki tinggi/lebar yang disandikan (responsif), maka kita dapat menggambar svg itu dengan dimensi yang cocok dengan viewport ( lebar = viewport.width, height = (image.height * viewport.width) / image.width)) maka secara teoritis ini bisa berhasil. Saya hanya tidak yakin bagaimana menentukan apakah gambar svg tidak memiliki nilai tinggi dan lebar tersebut.

ada update disini?

Bukan dari saya, saya sudah berhenti mengerjakan masalah ini tapi semoga komentar di atas bisa membantu.

Hai saya memiliki masalah yang sama.
Tag Gambar saya berisi gaya style='transition: transform 0.6s;' . Tanpa ini, Gambar ditampilkan dengan benar.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat