Memotong Gambar menggunakan Hanya Alat Baris Perintah

34

Saya ingin memotong gambar pada CLI saya hanya Ubuntu menggunakan alat baris perintah yang hanya menunjukkan piksel untuk memotong untuk empat arah. (sama seperti yang ditemukan di libreoffice)

Sebagai contoh:

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

Apakah ada alat seperti itu (bukan GUI)?

Maythux
sumber
@ThomasWeller ini meminta baris perintah dan bukan alat GUI ditambah pertanyaan terkait yang Anda berikan adalah tentang GUI jadi silakan baca saja pertanyaan itu lagi
Maythux
2
Pertanyaan yang ditautkan tidak menentukan jenis alat. Jawaban kedua adalah tentang alat baris perintah: imagemagick. Saya tahu ada diskusi di SO apakah sebuah pertanyaan adalah duplikat jika jawabannya sama. Orang mungkin setuju atau tidak setuju.
Thomas Weller
1
@ ThomasWeller tetapi jawabannya tidak nyaman, apalagi itu tidak menunjukkan bagaimana dan mengapa dia menggunakan opsi .. Terus terang apakah Anda mengerti pilihan yang digunakan ?! Saya sendiri tidak bisa mendapatkan informasi itu, itu hanya jawaban pertama di sini, tanpa penjelasan yang membuat jawabannya menjadi rendah
Maythux
@ downvoters Haruskah saya tahu ada apa dengan Anda? !!
Maythux

Jawaban:

38

Berikut ini solusinya menggunakan convertdari paket magick gambar.

sudo apt-get install imagemagick

Untuk sebuah gambar image.jpg

$ identify image.jpg 

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

Seperti yang ditunjukkan di atas, gambar input adalah 720x482px.

Sekarang untuk melakukan cropping Anda harus menentukan dua faktor:

  1. titik awal pemangkasan (termasuk 2 arah)
  2. Ukuran persegi panjang yang dipangkas (Di sini Anda dapat menyertakan arah lain)

Sekarang kembali ke gambar di image.jpgatas, saya ingin memotong:

  • 5px teratas
  • 7px bawah
  • 14px benar
  • tersisa 3px

maka Anda bisa melakukannya dengan ( widthx height+ left+ top/ wx h+ l+ tformat):

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

Sekarang

$ identify output.jpg 

output.jpg JPEG 703x470 703x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000
Maythux
sumber
2
Dikatakan bahwa Imagemagick 7 menggunakan perintah "magick" sebagai pengganti "convert". Jika ada yang mengalami command not found: convertmasalah, cobamagick
iplus26
1
Ini sangat membantu, tetapi perlu beberapa saat untuk membungkus kepala saya dengan "perhitungan". Saya memiliki satu set gambar 1280x1024 yang saya perlukan untuk memotong bagian atas dan bawah, sehingga gambar akhir akan memiliki "tengah" 718 piksel dari aslinya (melepas pita hitam atas dan bawah). Saya perlu menggunakan ini: di convert in.png -crop 1280x718+0+152 out.pngmana saya memahami kalimat itu berarti convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.png:, meskipun sepertinya tidak cocok dengan angka-angka @ Maythux ... FWIW!
Dɑvïd
3
Bukankah seharusnya 703x470bukan 713x470? Seperti pemotongan + kanan kiri = 3+14 = 17px, yang bila dikurangkan dari 720adalah 703, dan tidak 713.
Mooncrater
Ini membantu! Saya juga menyarankan edit ke FIX baik 703px bukan 713px (yang saya setujui), dan format kiri dan atas terbalikWxH+l+t
el-teedee
12

Jika Anda ingin memotong daerah putih, imagemagickmemiliki perintah khusus untuk itu:

convert -trim input.jpg output.jpg
Martin Thoma
sumber
9

Untuk membuat opsi "ramah pengguna", skrip di bawah ini dapat digunakan. Cukup jalankan perintah:

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

Ini menciptakan gambar yang dipotong image.jpeg, dinamai image[cropped].jpegdalam direktori yang sama.

Naskah

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

Bagaimana cara menggunakan

  1. Script digunakan imagemagick

    sudo apt-get install imagemagick
    
  2. Simpan skrip di atas sebagai crop_image(tanpa ekstensi) di ~/bin.

  3. Buat direktori jika perlu. Dalam hal ini, jalankan juga source ~/.profileuntuk membuat direktori muncul di $PATH.
  4. Jadikan skrip dapat dieksekusi.

Sekarang cukup jalankan skrip dengan namanya, seperti yang disebutkan, misalnya:

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

Spasi tidak masalah, selama dalam kasus itu, Anda menggunakan tanda kutip:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50
Yakub Vlijm
sumber
@ Maythux Tidak yakin apa arti edit terakhir Anda, maksud Anda solusi di atas tidak berfungsi pada sistem Anda? Hanya cli.
Jacob Vlijm
Maaf saya tidak masuk tiga hari yang lalu, jadi saya tidak tahu mengapa Anda menerima downvote, sebaliknya di sini +1 saya karena Anda pantas.
Maythux
Tapi saya pikir meskipun ini bekerja, ini akan lebih sulit bagi seorang pemula sedikit daripada menggunakan alat tanaman asli, tetapi bagi saya saya suka cara Anda, cukup keren, maaf lagi untuk keterlambatan
Maythux
Wow terima kasih. Downvote yang saya dapatkan karena ini: meta.askubuntu.com/questions/14082/…
Jacob Vlijm
Saya tidak tahu mengapa jawaban / pertanyaan yang bagus diturunkan kecuali penggunaan reputasi yang buruk, pertanyaan ini mendapat -3 !!! hhhh saya tidak mengerti mengapa
Maythux
3

Anda dapat menggunakan perintah convert dalam image magickpaket.
Untuk menginstal sudo apt-get install imagemagickatau sudo yum install ImageMagick.
Kemudian gunakan -crop geometryuntuk memotong gambar. Untuk bacaan lebih lanjut baca di sini

M.Fooladgar
sumber
Pangkas
Tidak, -cropopsi memberi xdan yItu offset dan gravity. sehingga Anda dapat menggunakannya saat memotong kuadrat
M.Fooladgar
Saya mempostingnya sebagai jawaban, terima kasih atas bantuan Anda, tetapi Anda harus menuliskannya dalam jawaban Anda sebelum4
Maythux
@Arronical Trims Saya sudah mendapatkannya dan diposting sebagai jawaban. silakan periksa
Maythux
3

Gunakan mogrify -crop <W>x<H>+<X>+<Y> <files>.

Hati-hati: file ditimpa tanpa pemberitahuan.

R2-D2
sumber
1

The cropperintah membutuhkan 4 hal. Untuk memahaminya ambil gambar yang ingin Anda potong. Sekarang, bayangkan bahwa pada gambar, Anda menggambar persegi panjang ukuran yang ingin Anda pertahankan. Area di luar persegi panjang ini akan dihilangkan, dipotong. Persegi panjang tidak boleh dimiringkan yaitu sisi atas harus horisontal.

Sekarang, catat 4 hal ini:

  1. lebar (W) dalam piksel persegi panjang
  2. tinggi (H) dari persegi panjang
  3. jarak sisi vertikal kiri persegi panjang dari margin kiri / ujung (L) dari gambar
  4. jarak sisi atas dari persegi panjang dari margin atas / akhir gambar (T).

Dengan demikian Anda sekarang memiliki nilai W, H, L dan T. Sejauh ini baik. Untuk mengetahui pikselnya, Anda dapat menginstal krule alat di Ubuntu. Sangat berguna.

Sekarang, buka terminal dan pergi ke folder tempat gambar disimpan. Gunakan perintah berikut dan letakkan nilai W, H, L dan T dengan benar:

convert input.jpg -crop WxH+L+T output.jpg
Googly Googly
sumber