การครอบตัดรูปภาพโดยใช้เครื่องมือบรรทัดคำสั่งเท่านั้น


34

ฉันต้องการครอบตัดรูปภาพบน CLI ของฉันเท่านั้น Ubuntu โดยใช้เครื่องมือบรรทัดคำสั่งระบุเฉพาะพิกเซลเพื่อครอบตัดทั้งสี่ทิศทาง (เหมือนกับที่พบใน libreoffice)

ตัวอย่างเช่น:

crop image.jpg -top 5px -bottom 7px -right 14px -left 3px

มีเครื่องมือดังกล่าว (ไม่ใช่ GUI) หรือไม่?



@ThomasWeller นี่คือการขอบรรทัดคำสั่งและไม่ใช่เครื่องมือ GUI บวกกับคำถามที่เชื่อมโยงที่คุณให้มาเป็นเรื่องเกี่ยวกับ GUI ดังนั้นโปรดอ่านคำถามอีกครั้ง
Maythux

2
คำถามที่เชื่อมโยงไม่ได้ระบุประเภทของเครื่องมือ คำตอบที่สองเป็นเรื่องเกี่ยวกับเครื่องมือบรรทัดคำสั่ง: imagemagick ฉันรู้ว่ามีการอภิปรายเกี่ยวกับ SO ว่าคำถามจะซ้ำกันหรือไม่ในกรณีที่คำตอบเหมือนกัน ผู้คนอาจเห็นด้วยหรือไม่เห็นด้วย
โทมัสเวลเลอร์

1
@ThomasWeller แต่คำตอบนั้นไม่สะดวกยิ่งกว่านั้นมันไม่ได้แสดงให้เห็นว่าทำไมและทำไมเขาถึงใช้ตัวเลือก .. คุณเข้าใจตัวเลือกที่ใช้ใช่ไหม? ตัวฉันเองไม่สามารถรับข้อมูลได้มันเป็นเพียงคำตอบแรกที่นี่ไม่มีคำอธิบายที่ทำให้คำตอบมีคุณภาพต่ำ
Maythux

@ downvoters ฉันควรจะรู้เรื่องอะไรกับคุณเหรอ? !!
Maythux

คำตอบ:


38

นี่คือการแก้ปัญหาโดยใช้convertจากแพ็คภาพเวทมนตร์

sudo apt-get install imagemagick

สำหรับรูปภาพ image.jpg

$ identify image.jpg 

image.jpg JPEG 720x482 720x482+0+0 8-bit DirectClass 100KB 0.000u 0:00.009

ดังที่แสดงด้านบนภาพอินพุตเป็น 720x482px

ตอนนี้การปลูกพืชคุณต้องพิจารณาปัจจัยสองประการ:

  1. จุดเริ่มต้นของการครอบตัด (รวม 2 ทิศทาง)
  2. ขนาดสี่เหลี่ยมผืนผ้าครอบตัด (ที่นี่คุณสามารถรวมทิศทางอื่น ๆ ได้)

ตอนนี้กลับไปที่รูปภาพimage.jpgด้านบนฉันต้องการครอบตัด:

  • 5px อันดับแรก
  • ด้านล่าง 7px
  • ขวา 14px
  • เหลือ 3px

จากนั้นคุณสามารถทำได้ด้วย ( รูปแบบwidthx height+ left+ top/ wx h+ l+ t):

convert image.jpg -crop 703x470+3+5 output.jpg

ตอนนี้

$ identify output.jpg 

output.jpg JPEG 703x470 703x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000

2
มีคำกล่าวว่า Imagemagick 7 ใช้คำสั่ง "magick" แทนที่ "convert" หากใครพบcommand not found: convertปัญหาลองmagick
iplus26

1
นี่เป็นความช่วยเหลือที่ยิ่งใหญ่ แต่ฉันใช้เวลาสักครู่เพื่อตัดหัวของฉันรอบ "การคำนวณ" ฉันมีชุดภาพ 1280x1024 ที่ฉันต้องการตัดด้านบนและด้านล่างจากนั้นภาพสุดท้ายจะมี "กลาง" 718 พิกเซลจากต้นฉบับ (ถอดแถบสีดำด้านบนและล่าง) ฉันต้องใช้สิ่งนี้: convert in.png -crop 1280x718+0+152 out.pngที่ฉันเข้าใจว่าบรรทัดนั้นหมายถึง: convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.pngถึงแม้ว่ามันจะไม่ตรงกับหมายเลขของ @ Maythux ... FWIW!
Dɑvïd

3
ไม่ควรที่จะเป็น703x470แทน713x470? ในฐานะที่เป็นซ้าย + การปลูกพืชที่เหมาะสม= 3+14 = 17pxว่าเมื่อหักออกจาก720มีและไม่703 713
Mooncrater

สิ่งนี้ช่วย! ฉันยังแนะให้แก้ไขในการแก้ไขปัญหาทั้ง 703px แทน 713px (ซึ่งผมเห็นด้วยกับการ) และกลับไปทางซ้ายและด้านบนในรูปแบบWxH+l+t
El-teedee


9

เพื่อสร้างตัวเลือก "ผู้ใช้ที่เป็นมิตร" สคริปต์ด้านล่างนี้สามารถใช้ได้ เพียงเรียกใช้คำสั่ง:

<script> <image> <crop_left> <crop_right> <crop_top> <crop_bottom>

มันสร้างภาพที่ถูกครอบตัดของimage.jpegชื่อimage[cropped].jpegในไดเรกทอรีเดียวกัน

บท

#!/usr/bin/env python3
import subprocess
import sys

# image, crop- dimensions
img = sys.argv[1]; left = sys.argv[2]; right = sys.argv[3]; top = sys.argv[4]; bottom = sys.argv[5]
# arrange the output file's name and path
img_base = img[:img.rfind(".")]; extension = img[img.rfind("."):]; path = img[:img.rfind("/")]
img_out = img_base+"[cropped]"+extension
# get the current img' size
data = subprocess.check_output(["identify", img]).decode("utf-8").strip().replace(img, "")
size = [int(n) for n in data.replace(img, "").split()[1].split("x")]
# calculate the command to resize
w = str(size[0]-int(left)-int(right)); h = str(size[1]-int(top)-int(bottom)); x = left; y = top
# execute the command
cmd = ["convert", img, "-crop", w+"x"+h+"+"+x+"+"+y, "+repage", img_out]
subprocess.Popen(cmd)

วิธีใช้

  1. สคริปต์ใช้ imagemagick

    sudo apt-get install imagemagick
    
  2. บันทึกสคริปต์ข้างต้นเป็นcrop_image(ไม่มีนามสกุล) ~/binใน

  3. สร้างไดเรกทอรีถ้าจำเป็น ในกรณีที่ยังใช้เพื่อให้การแสดงไดเรกทอรีขึ้นมาในsource ~/.profile$PATH
  4. ทำให้สคริปต์เรียกใช้งานได้

ตอนนี้เพียงเรียกใช้สคริปต์ด้วยชื่อของมันดังที่ได้กล่าวไว้เช่น:

crop_image /path/to/image.jpg 20 30 40 50

ช่องว่างไม่มีปัญหาตราบใดที่คุณใช้เครื่องหมายคำพูด:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50

@Maythux ไม่แน่ใจว่าสิ่งที่คุณแก้ไขล่าสุดหมายถึงคุณหมายความว่าวิธีการแก้ปัญหาข้างต้นไม่ทำงานในระบบของคุณ? เป็น cli เท่านั้น
Jacob Vlijm

ฉันขอโทษฉันถูกปิดสามวันที่ผ่านมาดังนั้นฉันไม่ทราบว่าทำไมคุณได้รับ downvote แทนที่นี่ +1 ของฉันเพราะคุณสมควรได้รับ
Maythux

แต่ฉันคิดว่าแม้มันจะใช้งานได้มันจะค่อนข้างยากสำหรับมือใหม่มากกว่าการใช้เครื่องมือครอบตัด แต่สำหรับฉันฉันชอบวิธีการของคุณสวยเท่ห์ขอโทษอีกครั้งสำหรับความล่าช้า
Maythux

ว้าวขอบคุณ. downvote ที่ฉันได้รับเพราะสิ่งนี้: meta.askubuntu.com/questions/14082/ …
Jacob Vlijm

ฉันไม่รู้ว่าทำไมคำตอบ / คำถามที่ดีจึงถูกลดระดับลงถ้าไม่ใช้ชื่อเสียง hhhh ฉันไม่เข้าใจว่าทำไม
Maythux

3

คุณสามารถใช้คำสั่งแปลงเป็นimage magickชุด
การติดตั้งหรือsudo apt-get install imagemagick จากนั้นใช้เพื่อครอบตัดรูปภาพ อ่านเพิ่มเติมได้ที่นี่sudo yum install ImageMagick
-crop geometry


ครอบตัดตามอัตราส่วนและไม่มีระยะ
ห่าง

Nope, -cropตัวเลือกให้xและที่มีการชดเชยและy gravityเพื่อให้คุณสามารถใช้เวลาในการปลูกพืชสี่เหลี่ยม
M.Fooladgar

ฉันโพสต์เป็นคำตอบขอขอบคุณสำหรับความช่วยเหลือของคุณ แต่คุณควรเขียนว่าในคำตอบของคุณก่อน 4
Maythux

@Arronical ขอบคุณฉันได้รับมันแล้วและโพสต์เป็นคำตอบ โปรดตรวจสอบ
Maythux

3

mogrify -crop <W>x<H>+<X>+<Y> <files>ใช้

ระวัง: ไฟล์จะถูกเขียนทับโดยไม่ต้องแจ้งให้ทราบล่วงหน้า


1

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

ตอนนี้ให้จดสิ่งเหล่านี้ลง 4 ข้อ:

  1. ความกว้าง (W) ในหน่วยพิกเซลของสี่เหลี่ยม
  2. ความสูง (H) ของสี่เหลี่ยม
  3. ระยะทางของแนวตั้งด้านซ้ายของสี่เหลี่ยมจากระยะขอบซ้าย / สิ้นสุด (L) ของภาพ
  4. ระยะห่างจากด้านบนของสี่เหลี่ยมผืนผ้าจากระยะขอบด้านบน / จุดสิ้นสุดของภาพ (T)

ดังนั้นตอนนี้คุณมีค่า W, H, L และ T จนถึงตอนนี้ดีมาก หากต้องการทราบว่าพิกเซลคุณสามารถติดตั้งเครื่องมือkruleใน Ubuntu มีประโยชน์มาก.

ตอนนี้เปิดเทอร์มินัลแล้วไปที่โฟลเดอร์ที่เก็บภาพไว้ ใช้คำสั่งต่อไปนี้และวางค่าของ W, H, L และ T อย่างถูกต้อง:

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