ImageMagick: รวม 4 ขอบจากภาพหนึ่งไปยังอีกภาพหนึ่งแบบเคียงข้างกัน

ฉันใช้ Perl 5.16 กับ ImageMagick 6.8 (อาจจะเก่าไปแล้ว แต่ใช้งานได้ :) ฉันกำลังพยายามแยกขอบเขตขอบทั้ง 4 ด้านออกจากรูปภาพหนึ่งและรวมเข้าด้วยกันเป็นอีกรูปภาพหนึ่ง วางเคียงข้างกัน ในแนวตั้ง

Illustrationj

ฉันสามารถแยกขอบและหมุนได้ แต่ไม่สามารถชดเชยออฟเซ็ตในภาพเป้าหมายได้ ขอบจะจบลงที่ด้านบนของกันและกัน ฉันลอง x=›$marg, Translate=›$marg,0, เรขาคณิตพร้อมออฟเซ็ต: ไม่มีลูกเต๋า ตัวแปร: $marg = ความกว้างของขอบ, $im = แหล่งที่มา, $im2 = เป้าหมาย, $ext = ขอบเขตที่แยกออกมา

# left edge
$ext=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext);

# top edge
$ext=sprintf("%dx%d+%d+%d",$w,$marg,0,0);
$geo=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext,rotate=>90,translate=>"$marg,0");

person MrSparkly    schedule 25.06.2021    source แหล่งที่มา


คำตอบ (1)


ฉันไม่ได้ใช้การผูก PerlMagick มาหลายปีแล้ว แต่ฉันคิดว่าคุณจะต้องการสร้างแถบขอบทั้ง 4 เส้น จากนั้นใช้ +append เพื่อจัดวางในแนวนอน เคียงข้างกัน นี่คือตัวอย่างคร่าวๆ ใน Terminal:

magick -size 20x50 xc:red xc:lime xc:blue +append result.png

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

ตอบคำถามของคุณโดยเฉพาะมากขึ้น และเริ่มต้นด้วยภาพนี้:

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

ซึ่งจะมีลักษณะเช่นนี้:

#!/bin/bash

magick ~/sample/images/blocks-RGB.png -resize 100x100 +repage -write MPR:orig +delete \
    \( MPR:orig -gravity northwest -crop 30x+0+0 \) \
    \( MPR:orig -gravity northwest -crop x30+0+0 -rotate 90 \) \
    \( MPR:orig -gravity southwest -crop x30+0+0 -rotate 90 \) \
    \( MPR:orig -gravity northeast -crop 30x+0+0 \) \
    +append result.png
    

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

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

person Mark Setchell    schedule 25.06.2021
comment
ขอบคุณ. ฉันคิดว่าฉันสามารถแปลสิ่งนี้เป็นภาษา Perl ได้ ฉันถือว่าตรรกะเป็นดังนี้: repage หมายถึงการสร้างสำเนาใหม่ของต้นฉบับสำหรับการดำเนินการแต่ละครั้ง (จากนั้นลบต้นฉบับ) การดำเนินการครอบตัด 4 รายการต่อไปนี้จะแยกขอบตามลำดับในแต่ละสำเนา จากนั้นส่วนต่อท้ายคือสิ่งที่วางพวกมันไว้เคียงข้างกันในเป้าหมาย - person MrSparkly; 25.06.2021
comment
เกือบ. repage หมายถึง ลืมผืนผ้าใบเสมือนและออฟเซ็ต MPR คือ Magick Persistent Register ซึ่งเป็นเพียงหน่วยความจำที่มีชื่อซึ่งฉันเก็บต้นฉบับไว้ แทนที่จะไปที่ดิสก์เพื่อโหลดอิมเมจเริ่มต้นซ้ำสำหรับการครอบตัดทั้ง 4 รายการ - person Mark Setchell; 25.06.2021