Saya memiliki gambar yang saya gunakan di situs web. Saya ingin menggunakan SVG sehingga bisa berapapun ukurannya dan tetap terlihat segar.
- Dropbox ini berisi file SVG dan juga file Illustrator asli.
Ini adalah ekspor JPEG:
SVG memiliki ukuran file yang jauh lebih besar daripada JPG. Apakah mungkin untuk mengoptimalkan SVG sehingga memiliki ukuran file yang serupa? Saya mungkin bisa kehilangan beberapa kualitas jika itu akan membantu. Saya sudah mencoba pengoptimal SVG ini , tetapi tidak ada banyak perbedaan.
Jika saya menyimpan file ilustrator sebagai JPG, lacak hasilnya dan simpan sebagai SVG, maka saya mendapatkan ukuran file yang jauh lebih kecil tetapi beberapa kehilangan kualitas. Ini membuat saya berpikir bahwa mungkin lapisan dalam aslinya menyebabkan ukuran besar? Apakah gambar yang saya kerjakan terlalu rumit untuk cocok untuk SVG?
Jawaban:
SVG Anda berisi grafik piksel yang disematkan untuk naungan di kanan bawah controller. Ini bertanggung jawab atas ⅔ ukuran file. Jika Anda menghapusnya, file SVG Anda setara dengan JPEG Anda. Anda mungkin dapat mencapai efek yang mirip dengan gradien.
Teknik lain untuk mengurangi ukuran file SVG meliputi:
Kecuali jika Anda menggunakan banyak lapisan yang tidak masuk akal (pikirkan satu lapisan untuk setiap objek), layer tidak boleh memberikan kontribusi yang relevan dengan ukuran file, dan bahkan kemudian, itu hanya sebagian kecil.
Jika Anda dapat membuat gambar dari awal ¹ seharusnya tidak terlalu rumit untuk format SVG. Tidak ada ambang batas kompleksitas magis di luar ukuran file yang meledak (mungkin ini berlaku untuk format yang secara wajar tidak jelas). Tentu saja, jika Anda hanya memilih resolusi yang cukup kasar, Anda dapat mengekspor setiap SVG ke JPEG yang memiliki ukuran file lebih kecil. Tetapi itu tidak selalu berarti bahwa Anda tidak boleh menggunakan SVG.
¹ Itu khususnya tanpa pelacakan dan sejenisnya. Untuk memberikan contoh ekstrem: Jika Anda ingin mereproduksi dengan tepat setiap piksel foto dengan SVG primitif (yaitu, tanpa menyematkan grafik piksel dalam SVG), Anda mungkin memang menganggap hasilnya terlalu rumit untuk direpresentasikan secara efisien dalam format SVG. . Tapi semoga itu masuk akal.
sumber
Seperti yang telah ditunjukkan Wrzlprmft, lebih dari 50% ukuran file SVG Anda diambil oleh gambar bitmap PNG yang digunakan untuk menciptakan efek bayangan yang cukup halus pada pengontrol. Hanya menyingkirkan gambar itu, dan menggantinya dengan gradien radial sederhana, sudah cukup untuk mengecilkan SVG menjadi sekitar 10kb.
Gambar asli dengan bayangan bitmap yang mewah di sebelah kiri, versi yang diedit dengan gradien radial sederhana di sebelah kanan.
Saat Anda melakukannya, Anda juga harus memeriksa jalur Anda untuk melihat apakah ada sesuatu yang disederhanakan di sana. Saya tidak menemukan banyak, tetapi garis besar pengontrol Anda memang memiliki beberapa simpul yang berdekatan (dekat bagian atas dan bawah tengah) yang dapat digabungkan tanpa membuat perbedaan yang terlihat.
Itu penghematan 50% mudah di sana, tapi jangan berhenti dulu. Jika Anda tahu sedikit tentang format SVG , Anda dapat melakukan jauh lebih baik dari itu.
Pertama, jalankan "Kekurangan Vakum" di Inkscape untuk menyingkirkan definisi yang tidak berguna, dan kemudian simpan gambar sebagai "SVG biasa". Sekarang, saatnya untuk membukanya di editor teks, dan lihat apa yang bisa kita singkirkan. Idealnya, Anda harus menggunakan editor dengan pratinjau SVG terintegrasi, sehingga Anda dapat dengan cepat melihat apa efeknya (mudah-mudahan, tidak ada) hasil edit Anda pada penampilan gambar. Saya menggunakan emacs untuk itu, tetapi ada editor lain dengan fitur serupa di luar sana.
Bagaimanapun, dengan file SVG dibuka di editor teks Anda, mari kita mulai menyederhanakannya!
Tepat di atas, ada yang tidak berguna
<!-- comment -->
. Hapus saja.Jika Anda mengedit SVG langsung dari Illustrator, ada juga
<!DOCTYPE ... >
baris yang tidak berguna . Hapus juga.Inkscape bersikeras menempelkan blok metadata RDF yang tidak berguna ke dalam gambar Anda. Cukup cari
<metadata ...>
tag dan hapus, beserta semuanya hingga dan termasuk penutupnya</metadata>
.Juga, bahkan jika Anda menyimpan file sebagai "SVG biasa", Inkscape masih menyebarnya dengan banyak atribut khusus. Temukan setiap atribut yang dimulai dengan
inkscape:
atausodipodi:
dan hapus mereka.Dengan hilangnya metadata dan atribut spesifik Inkscape, Anda dapat menghapus semua atribut namespace XML yang tidak digunakan dari
<svg>
tag. Itu harus aman untuk menghapus setidaknyaxmlns:rdf
,xmlns:dc
,xmlns:cc
,xmlns:inkscape
danxmlns:sodipodi
. Jika adaxmlns:svg
atribut yang berlebihan , hapus juga. Atribut namespace hanya yang harus Anda tinggalkan pada titik ini adalah:The
<svg>
tag juga memiliki banyak atribut berguna lainnya Anda dapat dengan aman menghapus, sepertienable-background
danxml:space="preserve"
. (Mereka dimasukkan oleh eksportir Illustrator SVG, dan Inkscape tidak cukup pintar untuk menyadari mereka tidak berguna.) TheviewBox
atribut juga dapat dengan aman dihapus dari gambar ini, karena hanya mengulangi nilai-nilaix
,y
,width
danheight
atribut.Anda juga dapat menghapus
encoding
danstandalone
atribut dari<?xml ... ?>
tag dengan aman.Sekarang mari kita sampai ke nyali data gambar. Untuk beberapa alasan, Inkscape bersikeras menetapkan
id
atribut untuk setiap elemen, bahkan jika mereka tidak pernah direferensikan. Setiapid
atribut yang nilainya tidak pernah diulang di tempat lain di file (mencarinya!) Aman untuk menghapus. Pada dasarnya, satu-satunya ID yang perlu Anda pertahankan adalah yang untuk gradien, dan mungkin untuk objek lain (misalnya jalur) yang ditemukan di dalam<defs>
bagian.Juga, Inkscape suka menghasilkan ID yang panjang suka
linearGradient4277
. Pertimbangkan untuk menyingkat ID apa pun yang tidak bisa Anda hapus menjadi sesuatu yang pendeklg1
.Ada juga beberapa
<defs>
bagian setelah satu sama lain. Menggabungkannya menghemat beberapa byte (dan menyederhanakan struktur dokumen secara umum).Ada juga beberapa grup kosong (
<g>
elemen) di akhir file. Singkirkan mereka. Mungkin juga ada beberapa grup berturut-turut dengantransform
atribut yang sama persis (atau tidak ada sama sekali); aman juga untuk menggabungkannya.Untuk beberapa alasan aneh, Inkscape menyimpan jalur Bezier berlebihan (
d
atribut) untuk<circle>
elemen. Itu memakan ruang tanpa alasan, jadi hapus saja itu. (Biarkand
atribut pada<path>
elemen menjadi; mereka sebenarnya digunakan untuk sesuatu.)Inkscape juga suka menggunakan CSS dalam
style
atribut di mana atribut yang lebih spesifik akan lebih pendek, misalnya menulis ulangfill="#4888fa"
ke yang lebih bertele-telestyle="fill:#4888fa"
. Anda dapat menyimpan beberapa byte dengan memecah gaya-gaya tersebut menjadi atribut individual (dan menghapus yang hanya menggunakan pengaturan default yang tidak berguna), tetapi itu membutuhkan sedikit lebih banyak keakraban dengan format SVG daripada sebagian besar perubahan di atas.Juga, jika ada
<use ... >
elemen apa pun , Anda mungkin dapat menyimpan beberapa byte dengan menggantinya dengan elemen aktual yang mereka tautkan. (Tentu saja, ini hanya menghemat ruang jika elemen terkait hanya digunakan sekali.) Tampaknya juga Inkscape suka mendefinisikan gradien melingkar secara tidak langsung, pertama mendefinisikan berhenti di a<linearGradient>
, dan kemudian referensi mereka di a<radialGradient>
; Anda dapat menyederhanakannya dengan menggerakkan pemberhentian secara langsung di dalam gradien radial, dan menghilangkan gradien linier yang sekarang tidak digunakan. Sebagai bonus, jika, dengan melakukan ini, Anda berhasil menyingkirkan semuaxlink:href
atribut, Anda dapat menghapusxmlns:xlink
atribut dari<svg>
tag.Jika Anda benar-benar ingin memeras setiap byte tambahan terakhir, cari nilai numerik dengan desimal yang terlalu banyak, dan bulatkan ke sesuatu yang lebih masuk akal. Di sinilah pratinjau langsung sangat membantu, karena pratinjau memungkinkan Anda melihat seberapa banyak Anda dapat membulatkan nilainya sebelum mulai terlihat. Meskipun Anda tidak ingin menguji setiap angka dengan hati-hati untuk melihat seberapa banyak itu dapat dibulatkan, Anda setidaknya dapat memetik buah yang tergantung rendah seperti, katakanlah, membulatkan nilai
1.0000859
piksel menjadi adil1
.Akhirnya, bersihkan lekukan dan spasi putih di file. Untuk benar-benar meminimalkan jumlah byte, Anda harus meletakkan semuanya pada satu baris (atau paling tidak, hanya meletakkan break baris di depan atribut, di mana spasi tetap diperlukan), tetapi itu benar-benar sulit dibaca. Namun, masih memungkinkan untuk mencapai keseimbangan yang layak antara keterbacaan dan kekompakan dengan beberapa indentasi sederhana dan konservatif.
Ngomong-ngomong, inilah yang saya berhasil edit gambar SVG Anda menjadi:
Gambar SVG ini terlihat sama sekali tidak dapat dibedakan dari contoh gambar kedua di atas, dan hanya memakan waktu 5189 byte, jauh lebih sedikit daripada gambar JPEG Anda. Saya yakin ini dapat dioptimalkan lebih lanjut, tetapi ini benar-benar hanya contoh dari apa yang dapat Anda lakukan dalam beberapa menit dengan latihan. (Butuh waktu lebih lama untuk mengetikkan jawaban ini daripada benar-benar mengedit kode SVG.)
Akhirnya, mengompresi kode SVG ini dengan gzip menyusut menjadi hanya 1846 byte (!), Hanya lebih dari seperempat ukuran versi JPEG Anda.
sumber
Saya sedikit terkejut tidak ada yang menyebutkan ekstensi " Gerusan ". Ini dibundel dengan Inkscape (pada v0.47), dan melakukan banyak optimasi yang disebutkan oleh Ilmari Karonen.
sumber
Anda dapat mengonversinya menjadi SVG (SVGZ) terkompresi dan meletakkan image.svgz di halaman web Anda:
Atau, di Adobe Illustrator, cukup simpan sebagai "SVG terkompresi", yang akan menulis file image.svgz.
Untuk gambar uji Anda itu masih lebih besar dari JPG, meskipun:
sumber
Baru-baru ini saya menemukan alat di https://petercollingridge.appspot.com/svg-editor ( kode sumber ) yang membantu mengoptimalkan file SVG. Ini memiliki hasil yang baik dalam hal ini, membawa ukuran file ke 3,7 kB, yang hanya lebih dari setengah ukuran JPG, dengan sedikit penyesuaian manual:
Menggunakan alat ini untuk mengoptimalkan file SVG membutuhkan waktu jauh lebih sedikit daripada mem-golf file secara manual.
sumber
SVGOMG! adalah Aplikasi Web yang Luar Biasa untuk Pengoptimalan SVG
Menurut pencipta aplikasi, SVGOMG adalah SVGO 's " M Issing G UI".
Menjalankannya pada gambar yang disediakan membawanya ke hanya
3.42kb
, dan1.4kb
setelah gzip.sumber
<radialGradient>
dan<path>
dari kode yang dioptimalkan dengan tangan saya, SVGOMG mengoptimalkan gambar 5,8 kB yang dihasilkan turun ke 4.02 kB (4,11 kB diraih), dan tampaknya melakukan pekerjaan yang cukup menyeluruh; Saya tidak benar-benar melihat peluang yang terlewatkan. (Bermain dengan itu sedikit lebih, saya memang memperhatikan bahwa kadang-kadang gagal untuk menggabungkan kelompok berturut-turut dengan attrs identik; Inkscape kadang-kadang tampaknya menghasilkan mereka, misalnya ketika menyesuaikan halaman agar sesuai dengan gambar.)