D. Prameswara
D. Prameswara Tukang ketik yang sedang belajar pemrograman #linux #android #vue #node.js

Cara mudah mengkonversi dan meresize file SVG menjadi PNG di Linux dengan CLI secara batch

Pada suatu saat, saya ingin menambahkan icon pada aplikasi yang saya buat dengan menggunakan Freepascal dan Lazarus, akan tetapi ternyata file icon tersebut bertipe SVG yang saat ini belum disupport oleh Lazarus. Jadi file tersebut harus dikonversi terlebih dahulu menjadi PNG agar layer transparannya tetap terjaga. Oh ya, selain perlu dikonversi, file SVG tersebut juga perlu diubah dimensinya karena terlalu besar.

Semua itu sebenarnya bisa diselesaikan dengan menggunakan GIMP, akan tetapi ini bukan 1 atau 2 file icon saja, melainkan ratusan. Rasanya terlalu membuang waktu dan tenaga. Pada kondisi seperti ini, cara yang paling ideal adalah harus dapat dilakukan via cli dan secara batch.

Kemungkinan solusi pertama adalah dengan menggunakan ImageMagick. Command untuk mengkonversi sekaligus resize adalah sebagai berikut:
convert +antialias -background transparent input.svg -resize 32x32 output.png
Command tersebut memang berhasil, akan tetapi pada kasus saya, file yang dihasilkan ternyata tidak transparan dan gambarnya rusak.

Cara yang lain adalah dengan menggunakan Inkscape. Iya betul Inkscape, aplikasi pengolah gambar vektor yang terus tarang saya baru tahu ternyata dapat dijalankan secara cli.
Pertama, pastikan anda telah menginstall paket inkscape, dengan cara.
sudo apt-get install inkscape
Sintak konversi sederhananya adalah sebagai berikut:
inkscape -f input.svg -w 32 -h 32 -e output.png
-e artinya bahwa file input akan dieksport sebagai file PNG
-w 32 dan -h 32 menunjukkan bahwa file tersebut akan diubah ukurannya menjadi 32x32 pixel (w=width, h=height)

Kemudian, bagaimana melakukan konversi secara batch ? Misalkan file yang akan saya konversi berada pada folder /home/prames/Picture/icon_svg48x48, dan hasilnya ingin saya simpan di dalam folder /home/prames/Picture/icon_png32x32 .

Pertama silahkan buat terlebih dahulu folder tujuan dengan cara:
mkdir /home/prames/Picture/icon_png32x32
Kemudian change dir ke dalam folder asal :
cd /home/prames/Picture/icon_svg48x48
Kemudian tulis command sebagai berikut:

ls *.svg | while read i; do \                                                   
inkscape -f "$i" -w 32 -h 32 -e "../icon_png32x32/$(basename -s .svg $i).png"; \         done 

Di bawah ini adalah contoh screenshot prosesnya.


Penjelasan script di atas kira-kira sebagai berikut.

ls *.svg | while read i; Dilakukan listing semua file dengan ekstensi svg (ls *.svg), kemudian hasilnya di-pipe untuk dibaca secara baris-perbaris dengan looping while. Untuk setiap baris pembacaan dimasukkan ke dalam variable i .
inkscape -f "$i" -w 32 -h 32 untuk setiap file (baris) kemudian dilakukan konversi. Untuk memanggil veriable i, dilakukan dengan menambahkan tanda $ di depannya, dan diapit dengan petik ", yaitu "$i".
-e "../icon_png32x32/$(basename -s .svg $i).png" , file hasil konversi kemudian disimpan di dalam folder icon_png32x32. Karena saat itu proses berada di dalam folder icon_svg48x48, maka untuk mencapai folder icon_png32x32 bisa dilakukan dengan ../icon_png32x32. Atau kalau mau diganti dengan path absolute : /home/prames/Picture/icon_png32x32.
$(basename -s .svg $i) , adalah perintah parameter substitution untuk mendapatkan nama file yang saat itu sedang dikonversi dan mengganti ekstensi dengan png. Contoh lain perintah basename: basename -s .conf /etc/cups/cupsd.conf akan menghasilkan output cupsd

Jika script di atas masih membingungkan, adalah baik jika anda membaca tutorial tentang bash script  terutama pada bagian while read, basename dan parameter substitution.

Semoga bermanfaat.

Diselesaikan di Blitar, 1 Ramadhan 1435 H.

D. Prameswara
D. Prameswara Tukang ketik yang sedang belajar pemrograman #linux #android #vue #node.js
Load comments