Saya mencoba memilih beberapa gambar seni agar sesuai dengan beberapa bingkai baru. Saya ingin dapat mengurutkan gambar-gambar ini berdasarkan kedekatan dengan rasio aspek tertentu dan kemudian melihatnya dalam urutan kedekatan yang menurun melalui sesuatu seperti feh.
Apakah ada ekspresi Unix satu baris yang mulia? Kalau tidak, beberapa lusin baris Python akan menghapus ini.
identify -format "%[fx:w/h]:%M\n" *.jpg
. Saya tidak tahu bagaimana cara mudah menyortir berdasarkan kedekatan dengan nilai arbitrer.sort
tampaknya tidak mendukung penyortiran semacam itu.Jawaban:
Menggunakan komentar ImageMagick NN sebagai petunjuk, ternyata Anda dapat meminta Ned melakukan perhitungan sewenang-wenang sebagai bagian dari
-format
hasilnya. Jadi, satu cara yang mungkin:harus melakukan apa yang Anda inginkan. Perhatikan bahwa 4/3 ada rasio aspek yang diinginkan konstan. Anda tentu saja dapat menemukan itu sebagai output dari sebelumnya
identify
(untuk mencocokkan "paling dekat dengan gambar ini").Untuk menjelaskan, kami mengambil perbedaan nyata antara rasio aspek yang diinginkan dan aktual. Kemudian mengalikan dengan jumlah besar, dan pembulatan. Multiply dan round adalah karena sort hanya menangani bilangan bulat, bukan rasional.
sunting
Ternyata
sort
memang tampak melakukan rasional, bukan hanya bilangan bulat. Bahkan ditentukan dalam Spesifikasi Unix Tunggal (v4). Jadi, Anda dapat menyingkirkan solusi itu:sumber
33333:cover.jpg
cover.jpg adalah 500x500.Nah, cara termudah untuk melakukan ini adalah menggunakan ImageMagick . Itu harus di repositori distribusi Linux Anda, untuk sistem berbasis debian, jalankan:
Salah satu program suite ImageMagick adalah
identify
, ini akan mencetak karakteristik daftar file gambar input. Menggabungkannya dengansort
akan memberi Anda daftar gambar yang diurutkan berdasarkan ukuran (Anda dapat mengubah png untuk ekstensi apa pun yang Anda miliki:Jika Anda benar-benar membutuhkan rasio aspek dan bukan hanya ukurannya, cobalah sesuatu seperti ini:
Opsi sederhana, anggap nama gambar Anda tidak memiliki spasi :
Perintah gawk membagi bidang ke-3 (ukuran gambar yang memiliki format LxH) ke dalam array "ukuran" dan kemudian mencetak bidang ke-1 (nama gambar) dan hasil membagi panjang gambar dengan tingginya. The
sed
perintah hanya mempercantik output dansort
perintah macam hasil sesuai dengan rasio ukuran gambar.Lebih kompleks, ini dapat menangani spasi dalam nama file:
Di sini kita gunakan
find
untuk mengidentifikasi file-file yang kita minati dan menjalankanidentify
perintah, dan kemudian menyalurkan hasilnya melalui skrip PERL kecil. Ekspresi reguler mencari tiga huruf besar ([A-Z]{3}
) yang harus berupa format gambar. Setelah kami menemukan itu, mudah untuk mengidentifikasi nama dan dimensi gambar.Saya tidak menggunakan gawk di sini karena keberadaan spasi di nama file input akan membingungkan nomor bidang. Akhirnya, skrip akan mencetak nama gambar dan hasil pembagian panjang / tinggi yang kita
sort
numerik.Jika hanya menjelajah rasio aspek yang tersedia tidak cukup, jika Anda memiliki setidaknya satu gambar dengan rasio aspek yang diinginkan, cukup gunakan grep untuk mengekstrak gambar-gambar yang rasio terdekatnya:
sumber
Anda dapat menghitung perbedaan masing-masing rasio aspek dengan referensi. Sepertinya jawaban derobert, tetapi lebih sederhana:
sumber
Rasio aspek hanyalah angka, sehingga Anda dapat menelusuri gambar sesuai dengan namanya, jika nama diawali dengan rasio aspek. Membuat tautan simbolis dengan rasio aspek pra-pended memungkinkan Anda untuk menelusuri gambar yang diurutkan berdasarkan rasio aspek.
Pemirsa berikut berfungsi seperti yang diharapkan. ( feh tidak maju / mundur, bahkan untuk gambar nyata - di sistem saya)
Pergilah ke
ar-sort
direktori dan cukup telusuri dari titik awal apa pun (rasio aspek) yang Anda minati.Nama tautan simbolis terlihat seperti ini:
sumber
Garis penalaran saya yang biasa adalah menggunakan metrik jarak kesalahan kuadrat di mana pun saya mendengar kata "derajat kedekatan". Seseorang pasti dapat menggunakan nilai absolut, dan itu akan lebih cepat. Script mengambil sebagai argumen rasio aspek ideal , memproses semua file * .jpg di direktori saat ini dan output mereka diurutkan dalam urutan peningkatan divergensi dari rasio ideal.
head
menghapus karakter end-of-line trailing yang dimasukkan oleh ImageMagick.Skrip berisi perintah gawk yang mengatur pemisah bidang keluaran ke karakter yang tidak mungkin, menghitung perbedaan kuadrat dan mencetak kembali perbedaan pasangan | nama file. Sortir dilakukan dan informasi yang tidak perlu (perbedaan rasio aspek kuadrat) diambil oleh
cut
.sumber