จะวาดเส้นขีดของภาพที่มีคุณภาพ (เส้นขอบ) ด้วย Imagemagick หรือ PIL ได้อย่างไร

ฉันพยายามวาดเส้นขีดของรูปภาพ (เส้นขอบ) ให้กับรูปภาพ PNG ของฉัน ต้นฉบับph_res
(*คาดว่าจะได้ผลลัพธ์สไตล์เลเยอร์เส้นขีด 19px โดย Photoshop)

และฉันพบสคริปต์ที่เป็นประโยชน์จากฟอรัม imagemagick (วาทกรรมของ imagemagick)

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

แต่การทดลองใช้ที่ดีที่สุดของฉันยังห่างไกลจากผลลัพธ์ของ Photoshop im_res

ฉันลองใช้ Radius*Sigma หลายๆ แบบรวมกัน แต่ดูเหมือนว่าจะได้ผลดีที่สุดจากการเบลอภาพ.. (-blur 9x11 สำหรับอันนี้)

คำถาม
* ฉันขอภาพที่ดีกว่านี้ได้ไหม ลากเส้นจาก Imagemagick หรือ PIL หรือเครื่องมือ CLI อื่น ๆ
* ถ้าเป็นเช่นนั้นทำอย่างไร..?
ขอบคุณมากสำหรับการอ่านคำถามนี้


person sngjuk    schedule 03.06.2019    source แหล่งที่มา
comment
คำสั่งของคุณ convert source.png -background '#2a7940' -alpha background -channel A -blur 9x11 stroked.png ไม่สร้างภาพที่คุณแสดงขึ้นมาใหม่!   -  person fmw42    schedule 03.06.2019
comment
@fmw42 ขอบคุณที่แจ้งให้เราทราบ! ฉันใช้ 7.0.8-47 และตอนนี้ฉันรู้แล้วว่ามีปัญหาเบลออยู่บ้าง ขอบคุณ!   -  person sngjuk    schedule 04.06.2019
comment
@sngjuk. ใน Imagemagick 7 เมื่อทำการเบลอ มันจะเบลอช่องอัลฟ่า เว้นแต่คุณจะเพิ่ม -channel rgb ก่อน -blur แล้วตามด้วย +channel หลังจากนั้น   -  person fmw42    schedule 04.06.2019
comment
ที่เกี่ยวข้อง: stackoverflow.com/questions /33888028/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.01.2021


คำตอบ (3)


เมื่อคุณต้องการขอบที่สะอาดตาบนเอฟเฟกต์ที่คุณสร้างด้วย ImageMagick คุณสามารถเพิ่มขนาดรูปภาพอินพุตของคุณเป็นสองเท่า เรียกใช้การดำเนินการ จากนั้นปรับขนาดกลับเป็นขนาดอินพุตดั้งเดิม ใช้เวลาดำเนินการนานขึ้น แต่ผลลัพธ์สามารถปรับปรุงได้อย่างมาก นี่คือตัวอย่างคำสั่ง...

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

คำสั่งนั้นเริ่มต้นด้วยการอ่านอิมเมจอินพุตและจัดเก็บสำเนาไว้ในรีจิสเตอร์หน่วยความจำชื่อ mpr:in

จากนั้นจะปรับขนาดอินพุตเป็น 200% และใช้ -สัณฐานวิทยา เพื่อขยายรูปร่างประมาณ 38 พิกเซล ซึ่งจะได้ผลประมาณ 19 พิกเซลหลังจากที่รูปภาพถูกลดขนาดกลับเป็นขนาดอินพุต

จากนั้นจะเปลี่ยนรูปร่างใหม่ให้เป็นสีเขียวและปรับขนาด 50% ซึ่งจะกลับมาเป็นขนาดดั้งเดิม

คำสั่งจะเสร็จสิ้นโดยนำ mpr:in สำเนาของรูปภาพต้นฉบับกลับมา และนำไปวางซ้อนบนส่วนสีเขียวที่ถูกแก้ไข

การเพิ่มขนาด ดำเนินการแก้ไข และลดขนาดลงหลังจากแก้ไขแล้ว เรียกว่าการสุ่มตัวอย่างขั้นสูง เป็นเทคนิคทั่วไปที่ทำให้ได้ขอบที่เรียบเนียนขึ้น แต่ก็ต้องแลกมาด้วยความเร็ว

แก้ไขเพื่อเพิ่มภาพที่ส่งออก... ป้อนคำอธิบายรูปภาพที่นี่

person GeeMack    schedule 03.06.2019
comment
รับรองว่าคุณภาพดีที่สุดแน่นอน!! ขอบคุณสำหรับเทคนิคที่เป็นประโยชน์ (+ลงทะเบียนการใช้งาน) ขอบคุณอีกครั้ง! - person sngjuk; 04.06.2019

สิ่งนี้อาจช่วยให้คุณเริ่มต้นได้:

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

ป้อนคำอธิบายรูปภาพที่นี่

-transparent black ในตอนท้ายไม่เหมาะสมหากภาพกลางของคุณมีสีดำ ดังนั้นฉันจะคิดดูมากกว่านี้...

หากคุณเพิ่ม -write stroke.png หลังคำว่า disk:19 คุณจะได้ไฟล์ใหม่ชื่อ stroke.png ซึ่งจะแสดงให้คุณเห็นว่าสัณฐานวิทยากำลังทำอะไรอยู่

person Mark Setchell    schedule 03.06.2019
comment
อย่ารีบเร่งที่จะยอมรับคำตอบนี้ - ฉันคิดว่าคนสองสามคนจะมีความคิดที่ดีกว่า :-) - person Mark Setchell; 03.06.2019

นี่เป็นอีกวิธีหนึ่งที่ฉันใช้ -blur เพื่อป้องกันนามแฝงจังหวะใน ImageMagick

ป้อนข้อมูล:

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการการลดรอยหยักเพิ่มเติม ให้เพิ่มความเบลอเป็น 0x2

สำหรับ ImageMagick 7 ให้แทนที่การแปลงด้วย magick

person fmw42    schedule 03.06.2019
comment
เป็นคุณภาพที่ดีที่สุดด้วยเวลาการประมวลผลที่สมเหตุสมผล! ขอบคุณมากจากอีกด้านหนึ่งของโลก!! - person sngjuk; 04.06.2019