วิธีการแยกภาพในแนวตั้งโดยใช้บรรทัดคำสั่ง?


19

ว่าฉันมีภาพขนาดใหญ่ 800x5000; ฉันจะแยกออกเป็น 5 ภาพแยกด้วยขนาด 800x1000 โดยใช้บรรทัดคำสั่งได้อย่างไร


2
โปรดอย่าเพิ่มโซลูชันลงใน Q. ของคุณทำเครื่องหมายคำตอบด้านล่างนี้เป็นที่ยอมรับ
slm

คำตอบ:


27

แก้ไขโดยใช้ convert -crop geometry + repage:

convert -crop 100%x20% +repage image.png image.png

หากคุณต้องการใช้สิ่งนี้กับชุดของไฟล์ลองสิ่งนี้:ls -1 *.png | sed 's,.*,& &,' | xargs -n 2 convert -crop 100%x20% +repage
JPT

23

ใช้ ImageMagick:

$ convert -crop 800x1000 image.png cropped_%d.png

จะสร้างลำดับของไฟล์ที่มีชื่อcropped_1.png, cropped_2.pngและอื่น ๆ

อ้างอิง


convert -crop geometry +repageสหกรณ์บอกว่าเรื่องนี้แก้ไขได้โดยใช้ ตัวอย่างเช่นconvert -crop 100%x20% +repage image.png image.png.
slm

1
+repage ข้อควรพิจารณาเรื่อง: รูปแบบที่มีความสามารถในการชดเชยภาพเป็นต้น

สิ่งนี้เปรียบเทียบกับคำตอบของ @ shley ได้อย่างไร
CMCDragonkai

@CMCDragonkai โดยพื้นฐานแล้วมันเหมือนกันพวกมันใช้เปอร์เซ็นต์ดังนั้นมันจะแบ่งภาพขนาดใด ๆ ออกเป็น 5 ชิ้นตามแนวตั้งแทนที่จะเขียนเป็นพิเศษสำหรับเคส 800x5000
ออกเป็น

1

ImageMagick จะพังกับฉันเพราะภาพใหญ่เกินกว่าจะจัดการได้ฉันจึงต้องหันไปใช้วิธีอื่น

ฉันลงเอยด้วยการใช้ Python Image Library

คำตอบที่รวดเร็วและสกปรกสำหรับคำถาม OP มีดังนี้:

from PIL import Image

im = Image.open("YourImage.yourformat")

for h in range(0, im.height, 1000):
     nim = im.crop((0, h, im.width-1, min(im.height, h+1000)-1))
     nim.save("PartialImage." + str(h) + ".yourformat")

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.