Adakah cara untuk membuat dua gambar dengan ukuran dan / atau rasio aspek yang sama di ImageMagick?

1

Misalkan saya ingin memiliki dua gambar berdampingan dalam slide tetapi ukurannya berbeda. Saya tahu saya bisa menggunakan "mogrify" dan "convert" dan semua itu untuk mengubah ukurannya, tetapi sulit untuk mengetikkan parameter yang tepat.

Apakah ada beberapa alat atau skrip (dan matlab akan baik-baik saja, misalnya) yang: mengubah ukuran gambar untuk membuat rasio aspek yang sama, dan mempertahankan konten gambar secara maksimal?

Misalnya. biarkan W x H menjadi konvensi penamaan. A adalah 400x300 dan B adalah 403x299. Jadi kita akan membuat A = & gt; 400x299 dan B = & gt; 400x299; ukuran dan area maksimal yang sama dipertahankan pada kedua gambar.

peter karasev
sumber
1
Saya melihat javascript yang melakukan ini dengan skala dua pass diikuti oleh crop pada satu titik.
RobotHumans
hm itu bisa bekerja, tetapi apakah Anda tahu persis kode itu, dan apakah itu mudah untuk menjalankan javascript dari shell? Saya berpikir beberapa imagemagick pembungkus logika akan melakukannya ... tergantung seberapa ambisius saya, saya mungkin menulis fungsi seperti itu mungkin ... itu sangat menjengkelkan untuk melihat gambar berukuran salah pada kertas cetak atau proyektor.
peter karasev
Apakah ada peluang menulis skrip bash?
Camilo Martin

Jawaban:

1

jika Anda menjalankannya dari shell, binding python imagemagick mungkin akan melakukannya. Logikanya akan menjadi seperti:

AW x AH  
BW x BH

if AW > BW:  
 scale(A BW/AW)  
else:
 scale(B AW/BW)  

if AH > BH:  
 scale(a BH/AH)  
else:  
 scale(B AH/BH)  

if AW > BW:  
 crop(A BWxBH)  
else:  
 crop(B AWxAH)  
RobotHumans
sumber
itu bisa berfungsi saya kira, tetapi ini hanya tanam , Anda mungkin memiliki gambar 400x300 dan 720x445 jadi perlu skala + memotong dengan cara nontrivial ... tergoda untuk menulis c ++ / opencv untuk ini sebagai pengganti aplikasi yang ada
peter karasev
itu skala gambar yang lebih besar ke ukuran yang lebih kecil, kemudian memotong bit yang tersisa. Anda harus memasukkan kembali nilai w dan h
RobotHumans
maksud Anda bahwa Anda memerlukan potongan logika tambahan yang menentukan distorsi yang lebih besar? seperti jika BW / AW & gt; Skala BH / AH BW / AW selain itu skala tanaman BH / AH?
RobotHumans
(1) Anda menyebutkan satu masalah. (2) lebih cepat, apakah sintaks "AW x AH" yang sebenarnya? Bagaimana Anda memuat atribut file? (3) ada masalah lain, seperti tanam pertama yang lebih baik karena resolusi yang hilang lebih sedikit, tetapi kemudian tanaman perlu dibagi oleh faktor yang tepat untuk penskalaan. Tapi ini 'menyenangkan untuk dimiliki', tidak perlu.
peter karasev
1
oke jadi saya tidak di sini untuk menulis skrip untuk orang jadi tidak itu bukan sintaks yang sebenarnya. Memangkas dulu tidak akan menyebabkan perbedaan dalam resolusi kecuali Anda kehilangan lebih banyak ruang gambar. itu pilihan. ruang gambar atau resolusi. pikir saya sudah selesai pada pertanyaan ini ...
RobotHumans
0

ImageMagick's convert Perintah dapat melakukannya dalam sekali jalan. Tetapi Anda harus spezify parameter ukuran dengan mengeksekusi identify perintah di dalam yang lain. :-)

Ubah ukuran satu gambar agar sesuai dengan ukuran gambar lainnya

 convert \
    to-be-resized.orig.img \
   -resize $(identify \
                -ping \
                -format "%wx%h\!" \
                 master.img) \
    orig-is-resized.jpg

Memperbarui: Oh, saya perhatikan bahwa perintah saya tidak melakukan apa yang Anda inginkan. Tapi hampir. :-) Seharusnya masih memberi Anda ide dasar bagaimana Anda bisa menangani masalah. Seharusnya mudah menerjemahkannya menjadi skrip shell yang berfungsi persis apa maumu.

Kurt Pfeifle
sumber