ImageMagick: menggabungkan 4 sisi dari satu gambar ke gambar lainnya, berdampingan

Saya menggunakan Perl 5.16 dengan ImageMagick 6.8 (mungkin sudah lama sekarang, tetapi berhasil :). Saya mencoba mengekstrak keempat wilayah tepi dari satu gambar dan menggabungkannya menjadi gambar lain, berdampingan, dengan orientasi vertikal.

Ilustrasij

Saya dapat mengekstrak tepian dan memutarnya, tetapi saya tidak bisa mendapatkan offset pada gambar target dengan benar. Ujung-ujungnya berakhir di atas satu sama lain. Saya mencoba x=›$marg, Translate=›$marg,0, geometri dengan offset: tanpa dadu. Variabel: $marg = lebar tepi, $im = sumber, $im2 = target, $ext = wilayah yang diekstraksi

# left edge
$ext=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext);

# top edge
$ext=sprintf("%dx%d+%d+%d",$w,$marg,0,0);
$geo=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext,rotate=>90,translate=>"$marg,0");

person MrSparkly    schedule 25.06.2021    source sumber


Jawaban (1)


Saya belum pernah menggunakan binding PerlMagick selama bertahun-tahun, tapi saya membayangkan Anda ingin membuat masing-masing dari 4 strip tepi dan kemudian menggunakan +append untuk meletakkannya secara horizontal, berdampingan. Berikut ini contoh kasarnya, hanya di Terminal:

magick -size 20x50 xc:red xc:lime xc:blue +append result.png

masukkan deskripsi gambar di sini

Lebih khusus lagi menjawab pertanyaan Anda, dan dimulai dengan gambar ini:

masukkan deskripsi gambar di sini

itu akan terlihat seperti ini:

#!/bin/bash

magick ~/sample/images/blocks-RGB.png -resize 100x100 +repage -write MPR:orig +delete \
    \( MPR:orig -gravity northwest -crop 30x+0+0 \) \
    \( MPR:orig -gravity northwest -crop x30+0+0 -rotate 90 \) \
    \( MPR:orig -gravity southwest -crop x30+0+0 -rotate 90 \) \
    \( MPR:orig -gravity northeast -crop 30x+0+0 \) \
    +append result.png
    

masukkan deskripsi gambar di sini

Mudah-mudahan Anda bisa melihat persamaannya dengan PerlMagick. Baris pertama membuat salinan gambar untuk dikerjakan, baris kedua memotong tepi kiri, baris ketiga memotong tepi atas, baris keempat memotong tepi bawah, baris kelima memotong tepi kanan dan baris terakhir menambahkan keempat potongan yang dipotong secara berdampingan.

person Mark Setchell    schedule 25.06.2021
comment
Terima kasih. Saya rasa saya bisa menerjemahkan ini ke Perl. Saya berasumsi logikanya adalah sebagai berikut: repage berarti membuat salinan baru dari yang asli untuk setiap operasi (lalu menghapus yang asli). 4 operasi pemotongan berikut mengekstrak tepi masing-masing di setiap salinan. Kemudian tambahannya adalah apa yang menempatkan mereka berdampingan dalam target. - person MrSparkly; 25.06.2021
comment
Hampir. repage berarti lupakan kanvas dan offset virtual apa pun. MPR adalah Magick Persistent Register yang hanya berupa bongkahan memori bernama tempat saya menyimpan aslinya daripada menyimpannya di disk untuk memuat ulang gambar awal untuk masing-masing dari 4 pemotongan. - person Mark Setchell; 25.06.2021