Saya memiliki SVG dengan banyak teks di atasnya. Ini peta tempat parkir dengan nomor ruang tertulis di atasnya. Saya menampilkan ini di browser web dan berkat bug kecil yang luar biasa di Firefox , browser membuat teks salah. Boo.
Jadi saya mengubah teks menjadi path. Kita bicara tentang 4000 label terpisah. Mungkin 15.000 bentuk baru sekarang mereka vektor. Ini 4MB. Biasanya Anda mungkin berpendapat ini akan memberikan kompresi, tetapi saya harus memasukkan SVG ini ke dalam HTML . Saya menambahkan perubahan CSS secara dinamis dan ini adalah satu-satunya cara saya mendapat dukungan lintas-browser. Jadi, output mentah — bahkan yang sudah digosok — ini terlalu besar untuk berguna.
Apa yang mengejutkan saya di sini adalah semua nomor ruang ini berbagi mesin terbang yang umum. Nol hingga sembilan. Mengapa saya menyertakan definisi bentuk untuk setiap instance dari setiap angka? Bisakah saya menghapus duplikat ini?
Saya menggunakan Inkscape tapi saya terbuka untuk saran.
path|simplify
membantu Anda sama sekali? Huruf kecil "s" dikonversi ke jalur 28 titik, sederhanakan srop menjadi 17, dan overlay versi yang disederhanakan dan tidak disederhanakan bahkan diperbesar sehingga satu "s" mengisi layar tidak ada perbedaan.Jawaban:
The
<use>
elemen memungkinkan Anda untuk menggunakan kembali objek didefinisikan di tempat lain dalam dokumen. Misalnya, Anda bisa mendefinisikan setiap mesin terbang sebagai<symbol>
dan kemudian menggunakannya kembali beberapa kali. Berikut adalah bagus artikel tentang itu: Penataan, Pengelompokan, dan Mengacu pada SVG - The<g>
,<use>
,<defs>
dan<symbol>
Elements .Saya tidak tahu bagaimana melakukannya secara langsung di Inkscape, meskipun - terutama untuk sekelompok teks yang sudah Anda miliki sebagai teks. Anda mungkin harus menulis skrip untuk memposting-proses SVG dan menemukan semua jalur yang dapat digunakan kembali.
sumber
<use>
adalah apa yang saya pikirkan ketika saya bertanya ini, scripting adalah bagaimana. Tampaknya konyol bahwa tidak ada yang bisa menduplikasi markup yang hampir identik.<symbol>
s (atau sepertinya Anda bisa<def>
mesin terbang teks-ke-path AndaAda beberapa opsi kompresi yang tersedia yang akan menawarkan berbagai tingkat keberhasilan. Untuk mengujinya, saya membuat file karya seni yang hanya memiliki banyak teks berulang. Tidak diperluas, ukuran file adalah 13,8 KB. Diperluas, ukuran file adalah 1,42 MB .
Pilihan bagus: Gunakan SVGZ - 46.5 KB
Menyimpan karya seni yang diperluas sebagai SVGZ memberi saya file output 46,5 KB yang secara signifikan lebih kecil dari SVG standar. Perhatikan bahwa dukungan dapat bervariasi .
Opsi Lebih Baik: Kompres dengan Scour - 21.1 KB
Scour adalah alat yang akan menggosok dan mengoptimalkan file SVG Anda untuk Anda. Menggunakan perintah "kompresi maksimum"
scour -i input.svg -o output.svgz --enable-viewboxing --enable-id-stripping --enable-comment-stripping --shorten-ids --indent=none
, karya seni yang diperluas dikurangi menjadi 21,1 KB. Tidak jauh dari ukuran file asli yang tidak diperluas!sumber
scour
tidak kompres. Itu juga dapat membuang file melalui gzip untuk Anda tetapi ID dan hal-hal kecil spasi adalah pertunjukan utamanya.Ini adalah solusi di-browser atau di server
Ada banyak cara untuk mengoptimalkan file SVG. Sepertinya Anda sudah melakukan sedikit hal yang adil.
Beberapa sumber yang saya temukan sangat berguna adalah artikel trik-css yang berfokus pada detail yang sangat spesifik. Dan secara khusus, alat itu menggunakan SVGO .
Jika Anda memiliki banyak, jalur berulang, saya akan mempertimbangkan menggunakan javascript untuk membuat bentuk secara dinamis. Ada contoh di sini . Satu arah adalah memiliki fungsi yang ditentukan untuk setiap mesin terbang, dan cukup memiliki setiap jalur dalam elemen svg yang dibuat oleh permintaan untuk fungsi itu. Atau ambil string penuh, dan / atau array argumen, untuk membuat inline svg Anda. Ini, tentu saja, mengharapkan bahwa jalur Anda lebih panjang dari panjang kode yang diperlukan untuk meminta fungsi tersebut (asumsi cukup mudah).
sumber
<use xlink:href="#digit_one">
manadigit_one
ada pathDi sini, pada tingkat yang sangat tinggi, apa yang harus dilakukan skrip Anda. Jangan ragu untuk menggunakan bahasa dan lingkungan pilihan Anda, ini hanyalah titik awal untuk logika yang akan memberi Anda apa yang Anda cari.
<defs>
bagian yang sesuai mendefinisikan informasi jalur untuk setiap digit.<g>
parkir dan ganti dengan a<use xlink:href="#digit" x=x y=y />
Saya dapat meramalkan beberapa komplikasi yang harus Anda tangani, dan semoga berhasil dengan itu.
Semoga ini membantu. Semoga berhasil.
sumber