Cắt ảnh chỉ bằng công cụ dòng lệnh


34

Tôi muốn cắt hình ảnh trên CLI chỉ Ubuntu của mình bằng công cụ dòng lệnh chỉ hiển thị pixel để cắt cho bốn hướng. (giống như được tìm thấy trong libreoffice)

Ví dụ:

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

Có một công cụ như vậy (không phải GUI)?



@ThomasWeller đây là yêu cầu dòng lệnh chứ không phải công cụ GUI cộng với câu hỏi được liên kết mà bạn cung cấp là về GUI, vì vậy vui lòng chỉ cần đọc lại câu hỏi
Maythux

2
Câu hỏi được liên kết không chỉ định loại công cụ. Câu trả lời thứ hai là về một công cụ dòng lệnh: fantemagick. Tôi biết có các cuộc thảo luận về SO cho dù một câu hỏi là trùng lặp trong trường hợp câu trả lời là như nhau. Mọi người có thể đồng ý hoặc không đồng ý.
Thomas Weller

1
@ThomasWeller nhưng câu trả lời không thuận tiện, hơn nữa nó không cho thấy cách thức và lý do tại sao anh ta sử dụng các tùy chọn .. Thực sự bạn có hiểu các tùy chọn được sử dụng không?! Bản thân tôi không thể có được thông tin đó, đây chỉ là câu trả lời đầu tiên ở đây, không có lời giải thích nào khiến câu trả lời có chất lượng thấp
Maythux

@downvoters Tôi có nên biết vấn đề với bạn là gì không? !!
Maythux

Câu trả lời:


38

Đây là một cách giải quyết sử dụng converttừ gói magick hình ảnh.

sudo apt-get install imagemagick

Cho một bức tranh image.jpg

$ identify image.jpg 

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

Như được hiển thị ở trên, hình ảnh đầu vào là 720x482px.

Bây giờ để cắt xén bạn phải xác định hai yếu tố:

  1. điểm bắt đầu của việc cắt xén (bao gồm 2 hướng)
  2. Kích thước hình chữ nhật được cắt (Ở đây bạn có thể bao gồm các hướng khác)

Bây giờ trở lại hình ảnh image.jpgtrên, tôi muốn cắt:

  • top 5px
  • dưới 7px
  • đúng 14px
  • còn lại 3px

sau đó bạn có thể làm điều đó với định dạng ( widthx height+ left+ top/ wx h+ l+ t):

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

Hiện nay

$ identify output.jpg 

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

2
Người ta nói rằng Imagemagick 7 sử dụng lệnh "magick" thay cho "convert". Nếu bất cứ ai gặp sự command not found: convertcố, hãy thửmagick
iplus26

1
Đây là một sự trợ giúp lớn, nhưng tôi phải mất một lúc để xoay quanh "tính toán". Tôi đã có một bộ ảnh 1280x1024 tôi cần để cắt từ trên xuống và từ dưới lên, vì vậy hình ảnh cuối cùng sẽ có 718 pixel "giữa" so với ban đầu (cởi bỏ phần trên và dưới của dải màu đen). Tôi cần sử dụng điều này: convert in.png -crop 1280x718+0+152 out.pngnơi tôi hiểu dòng đó có nghĩa là : convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.png, mặc dù điều đó dường như không khớp với số của @ Maythux ... FWIW!
Dɑvïd

3
Không nên 703x470thay thế 713x470? Khi cắt trái + phải = 3+14 = 17px, mà khi trừ đi 720703, và không 713.
Mooncrater

Điều này đã giúp! Tôi cũng đã đề xuất chỉnh sửa thành FIX cả 703px thay vì 713px (mà tôi đồng ý) và đảo ngược sang trái và trên cùng ở định dạngWxH+l+t
el-teedee

12

Nếu bạn muốn cắt bớt các vùng trắng, hãy imagemagickcó một lệnh đặc biệt cho nó:

convert -trim input.jpg output.jpg

9

Để tạo tùy chọn "thân thiện với người dùng", tập lệnh bên dưới có thể được sử dụng. Đơn giản chỉ cần chạy lệnh:

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

Nó tạo ra một hình ảnh cắt của image.jpeg, được đặt tên image[cropped].jpegtrong cùng thư mục.

Kịch bản

#!/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)

Cách sử dụng

  1. Kịch bản sử dụng imagemagick

    sudo apt-get install imagemagick
    
  2. Lưu tập lệnh ở trên dưới dạng crop_image(không có phần mở rộng) trong ~/bin.

  3. Tạo thư mục nếu cần thiết. Trong trường hợp đó, cũng chạy source ~/.profileđể làm cho thư mục hiển thị trong $PATH.
  4. Làm cho kịch bản thực thi.

Bây giờ chỉ cần chạy tập lệnh theo tên của nó, như đã đề cập, ví dụ:

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

Dấu cách không có vấn đề gì, miễn là trong trường hợp đó, bạn sử dụng dấu ngoặc kép:

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

@Maythux Không chắc ý nghĩa chỉnh sửa mới nhất của bạn là gì, ý bạn là giải pháp trên không hoạt động trên hệ thống của bạn? Nó chỉ là cli.
Jacob Vlijm

Tôi xin lỗi tôi đã nghỉ ba ngày trước, vì vậy tôi không biết tại sao bạn lại bị downvote, thay vào đó là +1 của tôi vì bạn xứng đáng.
Maythux

Nhưng tôi nghĩ thậm chí nó còn hoạt động, điều này sẽ khó hơn đối với người mới một chút so với sử dụng công cụ cắt xén bản địa, nhưng đối với tôi, tôi thích cách của bạn, khá tuyệt, xin lỗi lần nữa vì sự chậm trễ
Maythux

Ồ cảm ơn nhé. Downvote
Jacob Vlijm

Tôi không biết tại sao một câu trả lời / câu hỏi hay lại bị hạ thấp trừ khi sử dụng danh tiếng không tốt, câu hỏi này rất tệ -3 !!! hhhh tôi không hiểu tại sao
Maythux

3

Bạn có thể sử dụng lệnh convert trong image magickpack.
Để cài đặt sudo apt-get install imagemagickhoặc sudo yum install ImageMagick.
Sau đó sử dụng -crop geometryđể cắt hình ảnh. Để đọc thêm đọc ở đây


Cây trồng này theo tỷ lệ và không có tỷ suất lợi nhuận khác nhau
Maythux

Không, -croplựa chọn cho xyĐó là sự bù đắp và gravity. vì vậy bạn có thể sử dụng nó để canh thời gian
M.Fooladgar

Tôi đã đăng nó dưới dạng câu trả lời, dù sao cũng cảm ơn sự giúp đỡ của bạn, nhưng bạn nên viết nó trong câu trả lời của bạn trước 4
Maythux

@Arronical Cảm ơn tôi đã nhận được nó và đăng dưới dạng câu trả lời. vui lòng kiểm tra nó
Maythux

3

Sử dụng mogrify -crop <W>x<H>+<X>+<Y> <files>.

Cẩn thận: các tập tin được ghi đè mà không cần thông báo trước.


1

Các croplệnh cần 4 điều. Để hiểu nó lấy hình ảnh bạn muốn cắt. Bây giờ, hãy tưởng tượng rằng trên hình ảnh, bạn đang vẽ một hình chữ nhật có kích thước mà bạn muốn giữ lại. Khu vực bên ngoài hình chữ nhật này sẽ bị loại bỏ, cắt xén. Hình chữ nhật không được nghiêng, tức là cạnh trên phải nằm ngang.

Bây giờ, hãy ghi lại 4 điều sau:

  1. chiều rộng (W) tính bằng pixel của hình chữ nhật
  2. chiều cao (H) của hình chữ nhật
  3. khoảng cách của cạnh dọc bên trái của hình chữ nhật từ lề trái / cuối (L) của hình ảnh
  4. khoảng cách của cạnh trên của hình chữ nhật từ lề trên / cuối của hình ảnh (T).

Vì vậy, bây giờ bạn có các giá trị W, H, L và T. Càng xa càng tốt. Để biết các pixel, bạn có thể cài đặt công cụ krule trong Ubuntu. Rất hữu dụng.

Bây giờ, mở terminal và vào thư mục lưu trữ hình ảnh. Sử dụng lệnh sau và đặt các giá trị của W, H, L và T đúng cách:

convert input.jpg -crop WxH+L+T output.jpg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.