Bagaimana cara mengonversi bitmap menjadi SVG?

13

Saya memiliki banyak bitmap skala abu-abu yang perlu saya konversikan ke format vektor, seperti SVG. Saya telah menggunakan Inkscape, yang memberikan hasil yang bagus, tetapi ini membutuhkan waktu sekitar 10-15 menit untuk membuka, mengonversi, dan menyimpan file. Apakah ada kumpulan atau alat baris perintah yang dapat mengubahnya?

Desa
sumber
Anda mungkin ingin melihatnya potracejuga.
Stéphane Chazelas
juga dimungkinkan untuk menggunakan inkscape sebagai tautan

Jawaban:

19

potrace

Saya menemukan contoh ini di SO dalam T&J berjudul: Bagaimana cara mengubah gambar JPEG menjadi format SVG menggunakan ImageMagick? . Salah satu jawaban yang disarankan potrace.

$ convert input.jpg output.ppm
$ potrace -s output.ppm -o svgout.svg

Hasil

           ss # 1             ss # 2

Melihat potracesitus web Anda tampaknya dapat langsung dari BMP ke SVG.

$ potrace -s input.bmp -o output.svg

autotrace

Pilihan lain potraceadalah autotrace.

$ autotrace -output-file ouput.svg -output-format svg --color-count 4 input.bmp

Anda mungkin harus bermain dengan --color-countuntuk mendapatkan gambar yang sesuai dengan kebutuhan Anda.

Hasil

                                                 ss # 3

Yang mana untuk digunakan?

Dari 2 ini sangat tergantung pada bahan sumbernya. Jika Anda mengonversi gambar, potracekemungkinan itu adalah opsi yang lebih baik. Untuk bahan non-foto seperti font dan benda mati seperti pemandangan yang mencakup hal-hal seperti jalan, lalu autotracedengan --centerlinesakelarnya.

Meskipun tidak optimal untuk foto, itu bekerja dengan baik pada seni garis dan gambar seperti poster. Tidak terlalu bagus dengan warna. Autotrace memiliki beberapa fitur yang tidak tersedia di dialog Potrace tertanam di Inkscape. Misalnya, ada sakelar garis tengah yang sangat berguna untuk melacak jalan (di peta) atau karakter font.

Konversi batch

Anda bisa membungkus salah satu dari perintah ini dalam loop for di Bash, yang akan memudahkan melakukan tugas konversi massal.

$ for i in *.bmp; do <CONVERSION TOOL> ... "$i"; done

Referensi

slm
sumber
tidak perlu menyimpan file perantara dari JPEG. sebagai one-liner yang saya gunakan:convert -channel RGB -compress None input.jpg bmp:- | potrace -s - -o output.svg
Louis Maddox
9

Autotrace

Anda dapat mencoba autotrace .

Dengan menggunakan perintah berikut, Anda mendapatkan hasil berikut:

autotrace --output-format svg --output-file output.svg --color-count 4 imgsrc.jpg

Saya harus mengambil screencapture dari svg yang dihasilkan dan simpan sebagai png untuk menampilkan output.

Berikut ini adalah gambar sumber jpg:

sumber tengkorak

Ini adalah gambar yang dihasilkan:

konversi tengkorak

rking
sumber
7

Biasanya, saya melakukan semua tugas manipulasi gambar dengan convertdari ImageMagic tapi saya tidak bisa membuatnya bermain bagus dengan file svg. Namun, Anda dapat menggunakan inkscapedirinya sendiri dari baris perintah:

for i in *bmp; do inkscape -f "$i" -l "$i.svg"; done

Itu akan membuat file yang disebut foo.bmp.svg. Untuk memperbaikinya, coba ini:

for i in *bmp; do inkscape -f "$i" -l "${i%.bmp}.svg"; done

Masalah dengan pendekatan ini adalah, setidaknya pada sistem saya, muncul dialog grafis yang mengganggu menanyakan apakah saya ingin menautkan atau menanamkan gambar:

                                 masukkan deskripsi gambar di sini

Jadi, Anda masih perlu mengklik OK secara manual, tetapi masih jauh lebih cepat daripada melakukannya file per file.

Gambar output identik sejauh yang saya tahu:

   masukkan deskripsi gambar di sini


Secara teoritis, keduanya convertdan rsvg-convertseharusnya bisa melakukan ini tetapi saya tidak bisa membuatnya bekerja dengan baik pada gambar saya dalam beberapa menit saya habiskan untuk mencoba. Keduanya sama-sama layak untuk dilihat.

terdon
sumber
Saya tidak positif tetapi di situs web Inkscape itu mengatakan bahwa itu sekarang telah potracetertanam, jadi saya ingin tahu apakah itu hanya menggunakan alat itu? kutipan: "Potrace sekarang disematkan ke Inkscape. Anda tidak perlu menjalankannya secara terpisah." - wiki.inkscape.org/wiki/index.php/Tools
slm
5
Saya menduga Inkscape hanya akan menyematkan gambar bitmap di dalam SVG, karenanya terlihat identik.
user2428118
@ user2428118 Saya curiga Anda benar. Itu mungkin atau tidak masalah tergantung pada apa yang ingin Anda lakukan dengan gambar-gambar ini.
terdon
1

potraceadalah alat untuk itu. Anda dapat memprosesnya secara massal, tetapi pertama-tama Anda harus mengonversi gambar menjadi monokrom:

ls ./*.jpg | xargs -L1 -I {}  convert -monochrome {} {}.ppm
ls -1 ./*.ppm | xargs -L1 -I {} potrace {} -r 300 -b svg -o {}.svg

Instal di Ubuntu:

sudo apt install potrace

Jika Anda ingin mengonversi gambar yang bukan monokrom, Inkscapememiliki alat pelacak berbasis potrace yang mendukung banyak warna, pertama-tama ia mengubah gambar menjadi lapisan warna dan kemudian melacaknya dan menggabungkan hasilnya.

Untuk menggunakan pelacak, memuat atau mengimpor gambar, pilih, dan pilih Path > Trace Bitmap item, atau Shift+ Alt+B.

Lihat

Tutorial di sini!

Eduard Florinescu
sumber