Yalnızca Komut Satırı Araçları'nı kullanarak Görüntüleri Kırpma


34

Yalnızca CLI cihazımda bir görüntüyü, yalnızca dört yöne kırpacak pikselleri belirten komut satırı aracını kullanarak kırpmak istiyorum . (libreoffice’de bulunan ile aynı)

Örneğin:

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

Böyle bir araç var mı (GUI değil)?



@ThomasWeller bu komut satırı istiyor ve GUI aracı değil, sağladığınız bağlantılı soru GUI ile ilgili, bu yüzden lütfen sadece soruyu tekrar okuyun
Maythux

2
Bağlantılı soru takım tipini belirtmez. İkinci cevap bir komut satırı aracıyla ilgili: imagemagick. SO ile ilgili tartışmalar olduğunu biliyorum, cevabın aynı olması durumunda bir sorunun kopya olup olmadığı. İnsanlar aynı fikirde olabilir veya aynı fikirde olmayabilir.
Thomas Weller

1
@ThomasWeller ama cevap uygun değil, üstelik seçenekleri nasıl kullandığını ve neden kullandığını göstermiyor. Açıkçası kullanılan seçenekleri anladınız mı ?! Ben bu bilgiyi elde edemiyorum, buradaki ilk cevap, cevabı düşük kaliteli yapan hiçbir açıklaması yok
Maythux

@ downvoters Sizinle sorunun ne olduğunu bilmeli miyim? !!
Maythux

Yanıtlar:


38

convertGörüntü magick paketinden kullanan bir geçici çözüm burada .

sudo apt-get install imagemagick

Resim için image.jpg

$ identify image.jpg 

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

Yukarıda gösterildiği gibi, giriş görüntüsü 720x482 pikseldir.

Şimdi kırpma yapmak için iki faktör belirlemelisiniz:

  1. kırpmanın başlangıç ​​noktası (2 yön içerir)
  2. Kırpılmış dikdörtgen boyutu (Burada diğer yönleri ekleyebilirsiniz)

Şimdi image.jpgyukarıdaki resme dönelim , kesmek istiyorum:

  • üst 5px
  • alt 7px
  • sağ 14px
  • 3 piksel kaldı

sonra bunu ( widthx height+ left+ top/ wx h+ l+ tformatı) ile yapabilirsiniz:

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

şimdi

$ identify output.jpg 

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

2
Imagemagick 7'nin "convert" yerine "magick" komutunu kullandığı söylenir. Herhangi biri command not found: convertsorunla karşılaşırsa, deneyinmagick
iplus26

1
Bu büyük bir yardımdı, ancak kafamı "hesaplamalar" etrafına sarmam biraz zaman aldı. Üstünden ve altından kırpmak için gereken 1280x1024 görüntüden oluşan bir setim vardı, bu nedenle son görüntünün orijinalinden "orta" 718 piksel alabiliyordu (siyah bir grup üstte ve altta). Bunu kullanmam gerekiyordu: convert in.png -crop 1280x718+0+152 out.pngbu çizgiyi anlamam gereken yerde: convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.pngbu Maythux’un sayılarıyla eşleşmese de ... FWIW!
18'de

3
Bunun 703x470yerine olmamalı mı 713x470? Sağ + sol kırpma gibi = 3+14 = 17pxçıkarılır ki 720olduğunu 703ve değil 713.
Mooncrater

Bu yardımcı oldu! Ayrıca 713px yerine 703px FIX için bir düzenleme önerdim (kabul ediyorum) ve formatta sola ve üste ters çevrildiWxH+l+t
el-teedee

12

Beyaz bölgeleri kesmek istiyorsanız, imagemagickbunun için özel bir komutu vardır:

convert -trim input.jpg output.jpg

9

"Kullanıcı dostu" bir seçenek oluşturmak için aşağıdaki komut dosyası kullanılabilir. Sadece komutu çalıştırın:

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

Aynı dizinde image.jpegadlı kırpılmış bir görüntü oluşturur image[cropped].jpeg.

Senaryo

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

Nasıl kullanılır

  1. Komut dosyası kullanır imagemagick

    sudo apt-get install imagemagick
    
  2. Yukarıdaki komut dosyasını crop_image(uzantısız) olarak kaydedin ~/bin.

  3. Gerekirse dizini oluşturun. Bu durumda, source ~/.profiledizinin görünmesini sağlamak için de çalıştırın $PATH.
  4. Komut dosyasını çalıştırılabilir hale getirin.

Şimdi sadece senaryoyu belirtildiği gibi ismiyle çalıştırın, örneğin:

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

Boşluklar sorun değildir, bu durumda, tırnak işaretleri kullandığınız sürece:

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

@Maythux En son düzenlemenizin ne anlama geldiğinden emin değilsiniz, yukarıdaki çözümün sisteminizde işe yaramadığını mı kastediyorsunuz? Sadece cli.
Jacob Vlijm

Üzgünüm, üç gün önce ayrıldım, bu yüzden neden aşağı oy aldığınızı bilmiyorum, burada hak ettiğinizden beri + 1'im.
Maythux

Ama bence bu bile işe
yaramazsa

Vay, teşekkürler. Bu nedenle aldığım olumsuzluk: meta.askubuntu.com/questions/14082/…
Jacob Vlijm

Neden iyi bir cevap / sorunun itibarının kötüye kullanılması sürece indirilmediğini bilmiyorum, bu soru -3! hhhh nedenini
anlamadım

3

Convert komutunu image magickpakette kullanabilirsiniz .
Yüklemek sudo apt-get install imagemagickveya sudo yum install ImageMagick.
Sonra -crop geometrygörüntüyü kırpmak için kullanın . Daha fazla okuma için burada okuyun


Oranı ile ve farklı kenar ile bu ürün
Maythux

Hayır, -cropseçenek verir xve ybu ofset ve gravity. Böylece bir kare kırpmak için zaman kullanabilirsiniz
M.Fooladgar

Cevap olarak yayınladım, yine de yardımın için teşekkürler, ama cevabını cevap yazmalısın4
Maythux

@Arronical Teşekkürler Ben zaten onu aldım ve cevap olarak gönderildi. lütfen kontrol edin
Maythux

3

Kullanın mogrify -crop <W>x<H>+<X>+<Y> <files>.

Dikkatli: Dosyalar önceden bildirilmeksizin üzerine yazılır.


1

cropKomut 4 şeye ihtiyacı. Bunu anlamak için kırpmak istediğiniz görüntüyü alın. Şimdi, resmin üzerinde tutmak istediğiniz boyutta bir dikdörtgen çizdiğinizi hayal edin. Bu dikdörtgenin dışındaki alan elimine edilecek, kırpılacak. Dikdörtgen yatırılmamalı, yani üst kısım yatay olmalıdır.

Şimdi, şu 4 şeyi not edin:

  1. dikdörtgenin pikselindeki genişlik (W)
  2. dikdörtgenin yüksekliği (H)
  3. dikdörtgenin sol dikey kenarının görüntünün sol kenar boşluğundan / sonundan (L) uzaklığı
  4. dikdörtgenin üst tarafının görüntünün üst kenar boşluğundan / sonundan uzaklığı (T).

Böylece şimdi W, H, L ve T değerlerine sahipsiniz. Çok uzak çok iyi. Pikselleri bilmek için, krule aracını Ubuntu'ya yükleyebilirsiniz . Çok kullanışlı.

Şimdi, terminali açın ve görüntünün bulunduğu klasöre gidin. Aşağıdaki komutu kullanın ve W, H, L ve T değerlerini doğru şekilde koyun:

convert input.jpg -crop WxH+L+T output.jpg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.