Bagaimana cara menggambar guratan gambar (batas) berkualitas dengan Imagemagick atau PIL?

Saya mencoba menggambar guratan gambar (batas) pada gambar png saya. asliph_res
(*diharapkan hasil gaya lapisan guratan 19px oleh Photoshop)

dan saya menemukan skrip bermanfaat dari forum imagemagick. (wacana imagemagick)

convert source.png -background '#2a7940' -alpha background -channel A -blur 9x11 stroked.png

tapi uji coba terbaik saya jauh dari hasil Photoshop. im_res

Saya mencoba banyak kombinasi Radius*Sigma tetapi sepertinya hasil terbaik dari trik blur.. (-blur 9x11 untuk yang satu ini)

Pertanyaan
* Bisakah saya mendapatkan gambar yang lebih baik stroke dari Imagemagick atau PIL atau alat CLI lainnya?
*Kalau iya, bagaimana..?
Terima kasih banyak telah membaca pertanyaan ini.


person sngjuk    schedule 03.06.2019    source sumber
comment
Perintah Anda convert source.png -background '#2a7940' -alpha background -channel A -blur 9x11 stroked.png tidak mereproduksi gambar yang Anda tampilkan!   -  person fmw42    schedule 03.06.2019
comment
@ fmw42 Terima kasih telah memberi tahu saya! Saya menggunakan 7.0.8-47 dan sekarang saya tahu ada masalah blur, terima kasih!   -  person sngjuk    schedule 04.06.2019
comment
@sngjuk. Di Imagemagick 7, saat diburamkan, saluran alfa akan buram kecuali Anda menambahkan -channel rgb sebelum -blur dan kemudian +channel sesudahnya.   -  person fmw42    schedule 04.06.2019
comment
Terkait: stackoverflow.com/questions /33888028/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.01.2021


Jawaban (3)


Saat Anda memerlukan tepian yang bersih pada efek yang Anda buat dengan ImageMagick, Anda dapat menggandakan ukuran gambar masukan, menjalankan operasi, lalu mengubah ukurannya kembali ke ukuran masukan aslinya. Dibutuhkan waktu lebih lama untuk menjalankan operasinya, namun hasilnya dapat ditingkatkan secara signifikan. Berikut ini contoh perintah...

convert bomb-source.png -write mpr:in -resize 200% \
   -channel A -morphology dilate disk:38 +channel \
   -fill green -colorize 100 -resize 50% mpr:in -composite result.png

Perintah itu dimulai dengan membaca gambar masukan dan menyimpan salinannya dalam register memori bernama mpr:in.

Kemudian mengubah ukuran input menjadi 200% dan menggunakan -morphology untuk melebarkan bentuk sekitar 38 piksel. Itu akan menjadi sekitar 19 piksel setelah gambar diperkecil kembali ke ukuran masukannya.

Selanjutnya ia mewarnai bentuk baru itu menjadi hijau dan mengubah ukurannya 50%, yang kembali ke ukuran aslinya.

Perintah diakhiri dengan mengembalikan salinan mpr:in dari gambar asli dan menyusunnya di atas bagian hijau yang dimodifikasi.

Menambah ukuran, mengerjakannya, dan memperkecilnya setelah dimodifikasi disebut super sampling. Ini adalah teknik umum yang menghasilkan tepian yang lebih halus, namun mengorbankan kecepatan.

Diedit untuk menambahkan gambar keluaran... masukkan deskripsi gambar di sini

person GeeMack    schedule 03.06.2019
comment
Yang pasti kualitasnya terbaik!! Terima kasih atas teknik yang membantu (+daftar penggunaan) terima kasih lagi! - person sngjuk; 04.06.2019

Ini mungkin bisa membantu Anda memulai:

convert bomb-source.png \
  \( +clone -alpha extract -morphology edge-out disk:19 -fill green -opaque white \) \
  -compose lighten -composite -transparent black result.png

masukkan deskripsi gambar di sini

-transparent black di bagian akhir tidak optimal jika gambar tengah Anda berisi warna hitam, jadi saya akan memikirkannya lagi...

Jika Anda menambahkan -write stroke.png setelah kata disk:19 Anda akan mendapatkan file baru bernama stroke.png yang menunjukkan apa yang dilakukan morfologi.

person Mark Setchell    schedule 03.06.2019
comment
Jangan terburu-buru menerima jawaban ini -Saya pikir beberapa orang akan memiliki ide yang lebih baik :-) - person Mark Setchell; 03.06.2019

Berikut adalah cara lain di mana saya menggunakan -blur untuk anti-alias stroke di ImageMagick.

Memasukkan:

masukkan deskripsi gambar di sini

Line1 - read input
Line2 - clone it and make it fully opaque green
Line3 - clone the input, extract the alpha channel, dilate it to 19 or 20, then blur by 0x1 to antialias and use -level to remove the inner side of the blur
Line4 - put the dilated alpha into the alpha channel of the green image
Line5 - remove the temporary clones, swap the remaining two images and overlay the original over the green
Line6 - write the output

convert bomb-source.png \
\( -clone 0 -alpha off -fill green -colorize 100 \) \
\( -clone 0 -alpha extract -morphology dilate disk:20 -blur 0x1 -level 50x100% \) \
\( -clone 1,2 -compose copy_opacity -composite \) \
-delete 1,2 +swap -compose over -composite \
result.png

masukkan deskripsi gambar di sini

Jika Anda membutuhkan lebih banyak antialiasing, tingkatkan blur menjadi 0x2.

Untuk ImageMagick 7, ganti convert dengan tenung.

person fmw42    schedule 03.06.2019
comment
Ini adalah kualitas terbaik dengan waktu pemrosesan yang wajar! terima kasih banyak dari belahan bumi lain!! - person sngjuk; 04.06.2019