Simpan beberapa objek dari file vektor ke file terpisah menggunakan Inkscape / OS / Freeware

9

Saya memiliki file vektor yang diunduh (format AI). File tersebut berisi gambar vektor sederhana dari berbagai jenis anjing. Saya telah memuat file dalam inkscape, memisahkannya dan ingin cara untuk menyelamatkan setiap vektor anjing sebagai file terpisah. Apakah ada cara untuk mengotomatisasi ini dengan Inkscape atau alat OS / Freeware lainnya? Kalau tidak, saya harus memilih masing-masing dan Simpan sebagai. Apapun bantuannya sangat dihargai!

PEMBARUAN Terima kasih kepada JSBueno untuk saran untuk mengedit file SVG yang sebenarnya. Saya tidak menyadari bahwa SVG hanyalah file XML. Saya harus dapat dengan mudah menelusuri file dan mengekspor masing-masing anjing sebagai file terpisah. Ngomong-ngomong, ini akan jauh lebih cepat daripada melakukannya melalui antarmuka yang merupakan tujuan dari posting ini. Terima kasih untuk semua sarannya.

dinki
sumber
Mengapa Anda tidak dapat memilih masing-masing dan menyimpan sebagai? Apakah memang ada begitu banyak gambar sehingga solusi otomatis wajib?
Scott
2
Untuk dapat mengotomatisasi ini, Anda harus dapat mendefinisikan elemen "dog" untuk mengekstrak dari file svg. Pada kenyataannya, elemen-elemen anjing Anda akan terdiri dari garis majemuk tunggal sampai ke kelompok terpotong. Saya sarankan Anda mempelajari cara pintas keyboard yang diperlukan, pilih beberapa musik dan lanjutkan dengan itu.
Ya, saya memiliki 80+ objek individual untuk yang ini. Saya hanya mencari cara yang lebih cepat tetapi akan melakukannya secara manual jika itu yang diperlukan.
dinki
Anda pasti bisa membuat skrip itu. Misalnya, dibutuhkan seseorang yang ahli dalam Python, setidaknya waktu yang diperlukan untuk "menyelamatkan sebagai" 30 dari 80 anjing Anda untuk membuat skrip seperti itu. Seorang programmer yang tidak memiliki keahlian, atau bahkan seseorang yang ahli tetapi tidak mengenal fungsi inkscape helerp / XML dapat membutuhkan waktu lebih lama daripada menyelamatkan 80 anjing.
jsbueno
Ultimatelly, Anda bisa saja memasukkan file SVG ke dalam editor teks (Notepad ++), dan memeriksa apakah setiap anjing terkandung dalam tag SVG yang terpisah - tehm itu sangat menyalin / menempelkan teks daripada melakukannya dengan gambar pada UI inkscape . Mungkin masih lebih cepat menggunakan UI inkscape.
jsbueno

Jawaban:

5

Ada dua solusi yang saya temukan untuk mengekspor beberapa objek dari Inkscape sebagai SVGs. Metode ini memiliki manfaat menjadi skrip yang dapat dijalankan secara otomatis dan tidak perlu mengedit SVG di editor teks.

  1. svg-objek-ekspor

Skrip svg-objek-ekspor bekerja dengan mengekspor semua objek berdasarkan ekspresi reguler. Dalam kasus Anda ini akan bekerja dengan mengekspor semua objek dengan ID tertentu. Untuk menggunakannya, klon pertama atau unduh skrip dari Github .

Di Inkscape Anda perlu mengubah ID semua objek yang ingin Anda ekspor memiliki pola nama file yang sama. Untuk melakukan ini, buka dialog Object Properties dengan masuk ke Object> Object Properties atau tekan Ctrl+ Shift+ O. Dalam bidang ID, ubah semuanya untuk memiliki ID nama bas yang sama Dog_1, misalnya Dog_2,, Dog_3dll. (Objek tidak dapat memiliki ID yang sama).

masukkan deskripsi gambar di sini

Dengan file disimpan dan skrip diunduh, di terminal jalankan perintah berikut

python svg-objects-export.py --pattern 'Dog_*' /path/to/your/file.svg

Ini akan mengekspor semua objek dengan ID nama belakang "Dog_".

  1. inx-exportobjects

Ekstensi inx-exportobjects inkscape hanya akan mengekspor semua objek yang dipilih. Untuk menggunakannya, klon pertama atau unduh ekstensi dari Gitlab . Untuk menginstalnya salin file export_objects.inxdan export_objects.pyke .config/inkscape/extensions/. Di Inkscape Anda akan memiliki opsi yang disebut "Objek ke File ..." di Ekstensi> Ekspor. Pilih objek yang ingin Anda instal dan pilih opsi ini.

masukkan deskripsi gambar di sini

Dalam kotak dialog ini, cukup ubah Direktori Ekspor ke tempat Anda ingin menyimpan file Anda dan ubah Nama Dasar ke nama file yang baru lalu tekan Terapkan.

masukkan deskripsi gambar di sini

File akan diekspor ke direktori yang Anda tentukan.

Masing-masing solusi memiliki banyak pilihan lain, seperti animasi ekspor gif, yang harus Anda coba.

makanan hellocatfood
sumber
Solusi luar biasa @hellocatfood Tip: Sebelum Anda mengekspor, Anda dapat mengubah ukuran kanvas. Dalam kasus saya, saya memiliki banyak ikon. Saya menemukan ikon max-width dan max-height. Dan kemudian mengubah ukuran kanvas dengan tinggi masing-masing x lebar. Selanjutnya, pilih semua objek, dan sejajarkan secara horizontal dan vertikal, dan kemudian mulai proses ekspor. Dengan cara ini, Anda akan mendapatkan svg dengan tinggi dan lebar yang tepat.
Anish Nair
1

Bergantung pada prasyaratnya, bahwa semua benda Anda dikelompokkan dan tidak digabungkan menjadi kelompok yang lebih besar, berikut ini cara melakukannya. (Saya menggunakan kucing dalam contoh, karena anjing tidak tersedia).

masukkan deskripsi gambar di sini Di kanan bawah Anda melihat kucing yang disorot, objek id 5358, yang merupakan jalur tunggal, jadi saya menambahkan lantai hijau kemudian yang mengubahnya menjadi objek 5364 yang akan terjadi kemudian, jadi jangan biarkan membingungkan Anda. :)

Anda mendapatkan editor xml dengan menekan tombol 4 dari kanan (panah 1).

Saya mengubah g5358 ke g-cat-5358 (bidang 4) untuk memudahkan texttool untuk memilih objek-objek ini yang berfungsi untuk sebagian besar elemen yang tidak bertabrakan dengan nama-nama xml-svg (warna, meta, id, ... ).

Di jendela kiri Anda lihat, bahwa sudah ada entitas berganti nama, g-cat-5312 dekat ke atas pada tingkat indentasi yang sama.

Inkscape mengatur id unik untuk grup, tetapi mereka tidak harus berbentuk gNUMBER, Anda dapat mencampur karakter lain. Hanya saja, jangan memilih pengidentifikasi yang sudah ada.

Setelah mengubah pengidentifikasi, tekan 'setzen (set)' (5) untuk mengonfirmasi perubahan Anda. Anda melihat antarmuka Jerman di sini, YMMV.

Simpan svg (sebagai demo-cats.svg). Kami sekarang beralih ke scripting.

for cat in $( grep g-cat- demo-cats.svg )
do
  id=${cat//[^0-9]/}
  echo $id
  (head -n 53 demo-cats.svg; sed -n "/$cat/,/^    <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done

Apa fungsinya? Itu greps (cari dengan grep) untuk pola "g-cat-" yang merupakan awal dari bagian menarik kami. id=${cat//[^0-9]/}ekstrak id di bash dari ekspresi. Echo mencetaknya ke layar yang seharusnya membantu menemukan bug jika terjadi kesalahan. head -n 53 demo-cats.svg mengambil 53 baris pertama dari svg, yang berisi semua svg-boilerplate. Tergantung pada pengaturan Anda dengan berbagai svg-format (inkscape, terkompresi, normal svg, inkscape-terkompresi) ini mungkin berbeda. Dengan nl demo-cats.svg | lessAnda bisa n umerate yang l ines, untuk menemukan titik pemotongan yang tepat dalam kasus Anda.

  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
     <g

^ Hingga bagian ini, garis harus dimasukkan.

Perintah berikutnya dilakukan dengan s tream ed itor sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;kata (-n) tidak ada pencetakan (tapi) searche untuk kelompok kucing, hingga tag penutup g pada lekukan level 2 yang merupakan 4 ruang sebelum </g>jika Anda tidak ubah preferensi Inkscape, yang mungkin Anda ingat jika Anda melakukannya. Kemudian tambahkan tag penutup untuk svg: echo "</svg>". Tulis hasilnya ke file 'cat- $ id.svg' (ini menimpa file yang ada secara diam-diam).

Jadi saya berakhir dengan dua file: cat-5312.svg dan cat-5364.svg.

Solusi yang lebih elegan harus dimungkinkan dengan xmlstarlet atau alat serupa, yang dibuat untuk mencari dan mengedit file xml. Sayangnya saya tidak terbiasa dan tidak berhasil setelah membaca 10 menit dokumentasi. Anda tidak perlu mengganti nama grup di awal.

Pengguna tidak diketahui
sumber