⚠️ Ini adalah situs terjemahan tidak resmi dan tidak berafiliasi dengan ImageMagick Studio LLC. Untuk informasi resmi, lihat halaman asli (https://usage.imagemagick.org/resize/index.html).

Contoh penggunaan ImageMagick -- mengubah ukuran atau menskalakan (teknik umum)

Di sini kita melihat berbagai cara memperbesar dan memperkecil gambar. Gambarnya tetap utuh dan lengkap, hanya saja titik-titik warnanya digabung atau direntangkan agar mengisi area kanvas yang lebih kecil/lebih besar. Perhatikan bahwa meskipun hal ini berkaitan dengan resolusi gambar (jumlah piksel per satuan panjang di dunia nyata), resolusi itu lebih merupakan hasil dari bagaimana gambar akhirnya dipakai, dan bukan urusan sejati dari pemrosesan gambar langsung.


Mengubah ukuran gambar Cara yang paling jelas dan paling umum untuk mengubah ukuran gambar adalah dengan me-resize atau menskalakannya. Isi gambar lalu diperbesar, atau lebih sering diperkecil, agar pas dengan ukuran yang diinginkan. Namun walaupun piksel dan warna gambar benar-benar berubah, isi yang diwakili gambar itu pada dasarnya tetap sama. Meski begitu, mengubah ukuran gambar bisa jadi perkara yang rumit. Prosesnya dapat mengubah gambar dengan cara yang sangat merugikan, dan tidak ada 'cara terbaik', sebab apa yang terbaik itu subjektif, tergantung apa yang sebenarnya Anda inginkan dari proses resize. Karena tidak ada cara yang 'terbaik' atau 'sempurna', ada banyak sekali opsi yang mungkin ingin dipertimbangkan. IM selalu berusaha menyediakan opsi yang memberi cakupan kendali sebesar mungkin dalam pengubahan ukuran gambar. Ada ratusan kemungkinan, gaya, dan teknik, dan bahkan para ahli resize pun terus-menerus mencari cara baru dan berbeda untuk mengubah ukuran gambar. Tentu saja bagi kebanyakan orang, opsi default yang biasa sudah cukup baik, sebab opsi itu dirancang dengan pemakaian umum sebagai acuan. Operator resize dirancang dengan sangat hati-hati agar menghasilkan keluaran yang sangat baik untuk gambar dunia nyata. Bukan berarti operator ini tidak bisa dipakai untuk diagram atau gambar garis, hanya saja untuk jenis gambar semacam itu mungkin perlu dipakai beberapa opsi lanjutan yang akan kita lihat nanti.
Hal pertama yang perlu dipikirkan ketika menentukan gambar yang akan di-resize adalah...
Apakah Anda benar-benar ingin mengubah gambarnya? Resize menyebabkan perubahan drastis pada gambar, dan menghindari atau menekan 'artefak' yang tidak diinginkan adalah hal yang paling penting. Barangkali sekadar Shave tipis pada tepinya, atau Crop yang lebih umum, justru memberi hasil yang lebih baik dan lebih diinginkan daripada me-resize seluruh gambar. Umumnya tampilannya lebih bagus dan area yang tersisa merupakan salinan sempurna dari aslinya. Karena sering kali lebih baik tidak me-resize gambar...

Resize sama sekali tidak melakukan apa pun kalau ukuran gambar hasilnya sama dengan aslinya.

Pengecualiannya (pengecualian selalu ada) adalah kalau Anda benar-benar menentukan Filter resampling lewat pengaturan "-filter". Dalam hal itu perilaku normal "tidak melakukan apa-apa kalau gambar tidak berubah ukuran" ditimpa, dan filternya tetap diterapkan. Namun banyak filter (bahkan filter default sekalipun) dapat sedikit mengaburkan gambar. Itu bagian dari sifatnya. Jadi biasanya 'jalan pintas' untuk resize yang tidak mengubah apa pun ini justru menguntungkan. Argumen bagi operator resize adalah area tempat gambar harus dimuatkan. Area ini bukan ukuran akhir gambar, melainkan ukuran maksimum area tempat gambar akan dimuatkan. Maksudnya, IM lebih mengutamakan mempertahankan rasio aspek gambar daripada ukuran akhirnya (kecuali diberi flag '!'), tetapi setidaknya salah satu (kalau bukan keduanya) dari dimensi akhir akan cocok dengan argumen yang diberikan. Jadi biar saya perjelas...

Resize memuatkan gambar ke dalam ukuran yang diminta.
Resize TIDAK mengisi penuh kotak berukuran itu.

Rasio aspek dipertahankan pada dasarnya supaya lingkaran apa pun pada gambar masukan tetap berupa lingkaran pada gambar keluaran. Artinya, gambar tidak akan dipipihkan atau diperas, hanya diubah ukurannya, kecuali Anda memerintahkan sebaliknya. Sebagai contoh, di sini saya mencoba memuatkan dua gambar sumber, satu yang lebih besar dan satu yang lebih kecil, ke dalam kotak persegi berukuran 64x64 piksel.

  magick dragon_sm.gif    -resize 64x64  resize_dragon.gif
  magick terminal_sm.gif  -resize 64x64  resize_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Seperti terlihat, gambar persegi 64x64 TIDAK dihasilkan oleh "-resize". Yang terjadi, gambar-gambar itu hanya diperbesar atau diperkecil secukupnya agar pas sebaik mungkin ke dalam ukuran yang diberikan. Abaikan rasio aspek (flag '!')
Kalau mau, "-resize" dapat dipaksa mengabaikan rasio aspek dan mendistorsi gambar sehingga selalu menghasilkan gambar tepat seukuran yang ditentukan. Caranya dengan menambahkan karakter '!' pada ukurannya. Sayangnya karakter ini kadang juga dipakai untuk keperluan khusus oleh berbagai shell baris perintah UNIX. Jadi mungkin karakter itu perlu di-escape agar tetap utuh.

  magick dragon_sm.gif    -resize 64x64\!  exact_dragon.gif
  magick terminal.gif  -resize 64x64\!  exact_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Hanya perkecil gambar yang lebih besar (flag '>')
Opsi lain yang umum dipakai adalah membatasi IM sehingga ia hanya memperkecil gambar agar muat ke dalam ukuran yang diberikan. Tidak pernah memperbesar. Inilah opsi resize '>'. Anggap saja resize hanya diterapkan pada gambar yang 'lebih besar dari' ukuran yang diberikan (memang agak berlawanan dengan intuisi).

  magick dragon_sm.gif    -resize 64x64\>  shrink_dragon.gif
  magick terminal.gif  -resize 64x64\>  shrink_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Opsi ini sering sangat penting untuk menghemat ruang disk gambar, atau dalam pembuatan thumbnail, ketika memperbesar gambar umumnya tidak diinginkan karena cenderung menghasilkan pembesaran yang 'kabur'. Flag 'hanya perkecil' (flag '>') adalah karakter khusus baik pada shell UNIX maupun pada skrip batch Windows, dan karakter itu perlu di-escape (memakai backslash '\>' pada shell, dan '^>' pada batch Windows). Karakter itu juga khusus pada halaman web HTML, sehingga skrip PHP pun mungkin memerlukan penanganan khusus.
Hanya perbesar gambar yang lebih kecil (flag '<')
Kebalikan dari flag sebelumnya adalah '<', yang hanya memperbesar gambar yang lebih kecil dari ukuran yang diberikan, dan jarang dipakai. Pemakaian yang paling menonjol adalah dengan argumen seperti '1x1<'. Argumen resize ini tidak akan pernah benar-benar mengubah ukuran gambar apa pun. Dengan kata lain ini no-op, yang memungkinkan Anda memintas operasi resize pada program dan skrip yang selalu memakai "-resize". Selain itu, kemungkinan besar fitur ini memang tidak ingin dipakai. Satu contoh pemakaian argumen 'pintas' semacam ini adalah untuk pengaturan "-geometry" pada "magick montage". Lihat Montage dan geometry, perlu kehati-hatian untuk detailnya. Flag Only Enlarge (flag '<') adalah karakter khusus baik pada shell UNIX maupun pada skrip batch Windows, dan karakter itu perlu di-escape (memakai backslash '\<' pada shell, dan '^<' pada batch Windows). Karakter itu juga khusus pada halaman web HTML, sehingga skrip PHP pun mungkin memerlukan penanganan khusus.
--- ---
Flag isi area (flag '^')
Sejak IM v6.3.8-3, IM punya flag opsi geometry baru '^' yang dipakai untuk mengubah ukuran gambar berdasarkan dimensi terkecil yang muat. Artinya, gambar diubah ukurannya sampai mengisi penuh (bahkan meluap dari) area piksel yang diberikan.
  magick dragon_sm.gif    -resize 64x64^  fill_dragon.gif
  magick terminal.gif  -resize 64x64^  fill_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Sepintas opsi ini tampak kurang berguna, tetapi kalau dipadukan dengan "-crop" atau "-extent" yang terpusat (atau tidak terpusat) untuk membuang bagian gambar yang berlebih, gambar bisa dimuatkan sehingga mengisi penuh area yang ditentukan. Argumen resize dan argumen ukuran gambar akhir sebaiknya bernilai sama. Meski "-crop" paling masuk akal, cara itu mungkin menuntut tambahan "+repage" untuk membuang informasi pelapisan kanvas virtual. "-extent" tidak memerlukan pembersihan itu, tetapi tetap mengizinkan pemakaian "-gravity" untuk penempatan. Lihat Memotong dan memberi border untuk keterangan lebih lanjut.

  magick dragon_sm.gif      -resize 64x64^ \
          -gravity center -extent 64x64  fill_crop_dragon.gif
  magick terminal.gif    -resize 64x64^ \
          -gravity center -extent 64x64  fill_crop_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Selain itu "-extent" dapat dipakai untuk menambal bagian kosong pada gambar yang memakai resize biasa (dengan pengaturan warna "-background"). Lihat Thumbnail, ringkasan memuatkan ke ruang tertentu untuk lebih lanjut soal operasi semacam ini. Ingat, ini menuntut IM v6.3.8-3 atau lebih baru. Kalau tidak, pakai teknik lamaMengubah ukuran untuk mengisi ruang tertentu di bawah.
Flag Fill Area (flag '^') adalah karakter khusus pada skrip batch Windows dan karakter itu perlu di-escape dengan menggandakannya. Misalnya '^^', kalau tidak, tidak akan berfungsi. Lihat Skrip batch Windows untuk hal ini dan kekhasan Windows lainnya.
--- ---
Resize persentase (flag '%')
Menambahkan tanda persen, '%', pada argumen "-resize" membuat resize menskalakan gambar sebesar nilai yang ditentukan.
  magick dragon_sm.gif    -resize 50%  half_dragon.gif
  magick terminal.gif  -resize 50%  half_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Namun waspadalah, ukuran piksel akhir gambar akan dibulatkan ke bilangan bulat terdekat. Artinya, tidak akan terbentuk piksel pecahan di sepanjang tepi gambar! Akibatnya skala sebenarnya mungkin tidak persis sama dengan faktor penskalaan yang diberikan, bahkan bisa sedikit berbeda untuk arah X dan Y, tetapi selisihnya sangat kecil. (Lihat Resize memakai distort di bawah). Kalau Anda benar-benar ingin me-resize gambar sedemikian rupa sehingga ukuran akhirnya seolah punya selisih ukuran piksel pecahan, pakailahOperator distorsi umum, khususnya metode Scale-Rotation-Translate (lihat Resize dengan distort di bawah).
Flag Percentage Resize (flag '%') adalah karakter khusus pada skrip batch Windows dan karakter itu perlu di-escape dengan menggandakannya. Misalnya '%%', kalau tidak, tidak akan berfungsi. Lihat Skrip batch Windows untuk hal ini dan kekhasan Windows lainnya.
--- ---
_Semua opsi 'flag' ini, yaitu '!', '<', '>', '^', '%', dan '@', hanyalah saklar hidup/mati bagi operator "-resize". Yang penting hanyalah ada atau tidaknya karakter itu pada argumen resize, bukan posisinya. Karakter itu boleh muncul di awal atau di akhir argumen, atau sebelum maupun sesudah masing-masing angka (tetapi tidak di tengah angka).

Artinya, '%50' memberi efek yang persis sama dengan '50%', meski bentuk kedua lebih disukai demi keterbacaan. Selain itu '50%x30' sebenarnya berarti '50%x30%', BUKAN lebar 50% dan tinggi 30 piksel seperti yang mungkin Anda kira.

Hal ini berlaku untuk semua argumen IM yang memakai gaya 'geometry' ('WxH' atau '+X+Y'). Namun offset seperti '+X+Y' tidak pernah diperlakukan sebagai persentase._
Resize memakai batas jumlah piksel (flag '@')
Ada satu flag opsi "-resize" yang terakhir. Simbol "at" '@' akan mengubah ukuran gambar agar tidak memuat lebih banyak piksel daripada jumlah yang diberikan. Ini bisa dipakai, misalnya, untuk membuat sekumpulan gambar yang ukurannya bermacam-macam menjadi kira-kira sama besar. Sebagai contoh, di sini kita me-resize kedua gambar tadi ke ukuran kira-kira 64x64, atau seluas 4096 piksel.

  magick dragon_sm.gif    -resize 4096@  pixel_dragon.gif
  magick terminal.gif  -resize 4096@  pixel_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Perhatikan bahwa ukuran gambar akhir tidak dibatasi 64 piksel pada tinggi atau lebarnya, melainkan akan punya luas sedekat mungkin dengan (tetapi lebih kecil dari) ukuran itu sejauh yang bisa dicapai IM. Artinya satu dimensi umumnya sedikit lebih besar dari 64 piksel dan satunya sedikit lebih kecil. Dalam beberapa hal ini kompromi yang ideal untuk membuat thumbnail. Lihat Ukuran thumbnail dengan area fit. Anda juga bisa menambahkan flag '>' agar hanya gambar yang jumlah pikselnya lebih banyak dari hasil hitungan yang diperkecil, sementara gambar yang memang sudah lebih kecil dibiarkan apa adanya. | _Sayangnya flag ' <', yang memperbesar gambar lebih kecil, saat ini diabaikan ketika memakai 'Area Resize'.

_
Resize saat gambar dibaca
Operator resize juga dapat diterapkan pada gambar segera setelah gambar itu dibaca, sebelum ditambahkan ke urutan gambar saat ini dan gambar berikutnya dibaca. Dengan begitu memori yang dibutuhkan untuk membaca banyak gambar jadi seminimal mungkin. Lihat Pengubah baca gambar untuk detailnya. Sebagai contoh...

  magick dragon_sm.gif'[64x64]'    read_dragon.gif
  magick terminal.gif'[64x64]'  read_terminal.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Satu-satunya kelemahan teknik ini adalah tidak ada opsi resize khusus yang bisa dipakai selama proses pembacaan gambar. Resize dan transparansi sempat menjadi masalah bagi ImageMagick sebelum v6.2.4, yang memunculkan efek halo hitam di sekeliling objek berwarna terang di atas transparansi. Hal ini sudah diteliti dan akhirnya diperbaiki sejak versi tersebut. Untuk detail bug lama ini lihatBug halo pada resize

Operator resize lainnya Geometry - me-resize hanya gambar terakhirGeometry adalah opsi yang sangat khusus. Operator ini berperilaku sedikit berbeda pada setiap perintah IM, dan sering kali dengan cara yang khas dan ajaib. Penyebabnya sebagian besar warisan pemakaian lama, dan sebaiknya dihindari kalau memungkinkan. Pertama, pada "magick display" opsi ini dipakai untuk menentukan ukuran dan posisi jendela gambar yang sedang ditampilkan. Itulah pemakaian dan maknanya yang asli ketika IM pertama kali dimulai. Dari sanalah kemampuan 'resize'-nya yang lain bermula. Untuk "montage", "-geometry" adalah pengaturan yang disimpan sampai semua argumen selesai dibaca. Pada titik itu barulah ia menentukan ukuran tile (sel) akhir (atau menyerahkannya kepada "magick montage" untuk dihitung sendiri), sementara argumen posisinya dipakai untuk menentukan ruang di sekeliling sel tile. Lihat Pengaturan kendali montage. Pada "composite", "-geometry" juga disimpan sampai akhir argumen tercapai. Setelah itu ia dipakai untuk mengubah ukuran dan menempatkan gambar overlay (gambar pertama yang diberikan) sebelum ditumpangkan ke gambar latar belakang (gambar kedua). Contohnya lihat Composite banyak gambar. Seperti terlihat, pada kebanyakan perintah IM opsi ini dipakai sebagai 'pengaturan', tetapi pada "magick" "-geometry" sekaligus merupakan operator pengubah ukuran gambar yang khusus dan pengaturan penempatan. Yang dilakukannya adalah "-resize" hanya pada gambar terakhir dalam urutan gambar saat ini. Inilah satu-satunya operator pemrosesan gambar yang dirancang khusus untuk memengaruhi satu gambar saja (yang terakhir) dalam urutan gambar saat ini. Yang membuat opsi khusus ini makin rumit, bagian posisi dari opsi "-geometry" disimpan oleh perintah "magick", persis seperti pada "composite". Artinya, posisi apa pun dipertahankan untuk dipakai kemudian oleh "-composite", guna menempatkan gambar 'overlay' (gambar kedua dari belakang dalam urutan gambar) di atas gambar 'latar belakang' (gambar pertama dalam urutan gambar). Karena itu, batasi pemakaian "-geometry" pada perintah "magick" hanya sesaat sebelum operasi "-composite" atau "-layers composite". Ringkasnya, operator ini baru benar-benar berguna setelah membaca atau membuat gambar kedua, tepat sebelum Anda melakukan semacam Komposisi alpha untuk mengolah gambar-gambar itu. Untuk contoh praktis pemakaian "-geometry" guna me-resize/menempatkan gambar lihat Mengomposisikan banyak gambar. Thumbnail - resize dengan pembuangan profilOperator "-thumbnail" adalah varian dari "-resize" yang dirancang khusus untuk memperkecil gambar yang sangat sangat besar menjadi thumbnail kecil. Mula-mula ia memakai "-strip" untuk membuang semua profil dan embel-embel lain dari gambar. Lalu ia memakai "-sample" untuk memperkecil gambar sampai 5 kali tinggi akhirnya. Terakhir ia melakukan "-resize" biasa untuk memperkecil gambar ke ukuran akhir. Semua ini pada dasarnya untuk mempercepat pembuatan thumbnail dari file yang sangat besar. Namun untuk thumbnail gambar JPEG, ukuran gambar yang dibaca dari disk dapat dibatasi lewat pengaturan opsi khusus "-define jpeg:size=". Lihat Membaca gambar JPEG untuk detailnya. Karena itu peningkatan kecepatan ini jarang diperlukan untuk JPEG dalam pembuatan thumbnail, meski pembuangan profil tetap sangat penting. Untuk format gambar lain, seperti TIFF, pembuangan profil maupun peningkatan kecepatan sama-sama masih sangat penting. Karena itu cara ini tetap direkomendasikan untuk me-resize gambar bagi pembuatan thumbnail. Sebelum IM v6.5.4-7, "-thumbnail" membuang SEMUA profil dari gambar, termasuk profil warna ICC. Sejak versi itu profil warna dipertahankan. Kalau profil warna memang tidak diinginkan, pakai "-strip" untuk membuang semua profil.
Resample - mengubah resolusi gambarSeperti pada operator resize alternatif sebelumnya, "-resample" juga sekadar pembungkus sederhana di sekitar operator "-resize" biasa. Tujuannya adalah menyesuaikan jumlah piksel dalam gambar sehingga ketika ditampilkan pada Resolusi atau densitas tertentu, gambar itu tetap terlihat sama besar dalam ukuran dunia nyata. Artinya, gambar yang diberikan diperbesar atau diperkecil dalam hal jumlah piksel, sementara ukuran gambar dalam satuan dunia nyata tetap sama. Operator ini dimaksudkan untuk gambar yang dibaca dari, atau akan ditulis ke, sebuah program atau perangkat dengan resolusi atau densitas tertentu. Hal ini terutama penting untuk menyesuaikan gambar agar cocok dengan perangkat keras keluaran tertentu, entah itu layar, printer, atau format gambar postscript maupun PDF dengan resolusi tertentu. Ingat saja bahwa ukuran gambar di dunia nyata tidak berubah, yang berubah hanya resolusinya dan tentu saja jumlah piksel yang dipakai untuk mewakili gambar. Sebagai contoh, misalkan Anda punya gambar hasil pindai pada 300dpi (dots per inch). Gambar itu disimpan dengan resolusi (densitas) tersebut, atau ketika dibaca ke dalam IM Anda menyatakannya sebagai gambar 300dpi (memakai "-density"). Sekarang Anda memutuskan menampilkannya di layar beresolusi 90dpi, jadi Anda menjalankan "-resample 90". IM lalu mengubah ukuran gambar sebesar 90/300, yaitu menjadi 30% dari ukuran aslinya, dan menetapkan densitas baru gambar itu ke 90dpi. Gambarnya kini lebih kecil dalam hal jumlah piksel yang dipakai, tetapi kalau ditampilkan pada layar 90dpi akan muncul dengan ukuran fisik yang sama seperti gambar asli yang Anda pindai. Artinya, kini gambar itu punya resolusi yang cocok untuk layar 90dpi, sehingga ditampilkan kepada pengguna pada ukuran dunia nyata yang asli. Pengaturan "-units" (dengan argumen 'PixelsPerInch' atau 'PixelsPerCentimeter') mungkin diperlukan dalam beberapa situasi agar operator ini bekerja dengan benar. Pengaturan ini juga bisa penting untuk keluaran ke format file gambar Postscript dan PDF. Perhatikan bahwa hanya sedikit format file gambar (seperti JPEG, PNG, dan TIFF) yang mampu menyimpan resolusi atau densitas gambar bersama data gambarnya. Untuk format yang tidak mendukung resolusi gambar, atau format gambar multi-resolusi (berbasis vektor), resolusi asli gambar harus dinyatakan lewat atribut "-density" (lihat Metadata densitas gambar) sebelum gambar dibaca. Kalau tidak ada atribut densitas yang ditetapkan, IM menganggapnya berdensitas default 72dpi. Menetapkan densitas SETELAH membaca gambar semacam itu hanya memengaruhi resolusi keluarannya, dan tidak memengaruhi ukuran akhirnya dalam satuan piksel. Scale - memperkecil dengan perataan pikselOperator resize "-scale" adalah bentuk perintah resize yang disederhanakan dan lebih cepat. Ketika memperbesar gambar, piksel di dalam gambar digandakan sehingga membentuk blok warna persegi panjang yang besar. Cara ini bagus untuk memperlihatkan pembesaran gambar yang bersih dan tidak kabur. Sebagai contoh, berikut tampilan yang diperbesar dari salah satu pola tile bawaan...
  magick -size 8x8 pattern:CrossHatch30 -scale 800% scale_crosshatch.gif

[IM Output]
Umumnya dipakai satu nilai persentase yang merupakan kelipatan 100% untuk pembesaran gambar, supaya semua piksel diperbesar dengan faktor yang sama; kalau tidak, baris dan kolom piksel bisa berbeda ukuran sehingga memunculkan pola Moiré berskala besar. Sebagai contoh, di sini saya menskalakan dengan buruk pola '50% gray checks' yang tampak mulus, memakai ukuran yang bukan kelipatan ukuran gambar aslinya. |

  magick pattern:gray50 scale_gray_norm.gif
  magick pattern:gray50 -scale 36 scale_gray_mag.gif

[IM Output]

[IM Output]
Ketika memperkecil gambar, piksel-piksel yang bertetangga dirata-ratakan menjadi satu piksel berwarna baru. Misalnya, menskalakan gambar ke 50% dari ukuran aslinya secara efektif merata-ratakan blok berisi 4 piksel menjadi satu piksel baru (dengan asumsi ukuran gambarnya juga kelipatan 2).Namun berhati-hatilah, sebab gambar yang diperkecil dengan scale juga dapat memunculkan pola Moiré, kecuali gambar barunya merupakan pengecilan bilangan bulat yang tepat (teknik yang dikenal sebagai 'binning'), yang juga menuntut ukuran gambar asli merupakan kelipatan bilangan bulat yang tepat dari ukuran akhir. Selain itu foto dunia nyata yang diperkecil habis-habisan memakai "-scale" cenderung terlihat terlalu tajam, dengan efek aliasing ('tangga') di sepanjang tepi yang tajam. Perataan piksel oleh "-scale" memungkinkannya menghasilkan gambar 'berpiksel kasar'. Pada dasarnya ukuran gambar diperkecil untuk merata-ratakan pikselnya, lalu diperbesar lagi kembali ke ukuran asli gambar.

  magick rose: -scale 25%  -scale 70x46\!  rose_pixelated.gif

[IM Output] [IM Output]

Anda dapat memakai mask untuk memadukan gambar berpiksel kasar di atas dengan gambar aslinya, guna 'menyembunyikan' bagian 'nakal' yang jauh lebih kecil pada gambar asli. Lihat contoh Melindungi anonimitas seseorang sebagai peragaan teknik ini. Algoritmenya juga dirancang untuk mengulang baris piksel dulu baru kolom, kebalikan dari "-resize". Hal ini mungkin membuat "-scale" menangani gambar bercache disk "mpc:" dengan lebih baik. Sampai IM v6.4.7, "-scale" masih mengandung Bug halo pada resize yang lama.
Cara kerja internal scale (pixel mixing)...Dalam banyak hal Operator scale mirip dengan Operator resize biasa yang memakai 'Box' sebagai Filter resampling. Namun sebenarnya ia memakai algoritme yang sama sekali berbeda dan hasilnya sedikit lebih akurat daripada yang dihasilkan Filter Box. Cara kerja filter Box adalah sekadar merata-ratakan setiap piksel (sampel) yang jatuh di dalam 'support window' filternya (lihat Kendali pakar support filter. Artinya, ketika gambar diperkecil sedikit sekali, resize berfilter Box hanya akan menghasilkan nilai piksel yang persis sama atau nilai piksel yang dirata-ratakan sempurna. Sebaliknya Operator scale memakai algoritme berbeda yang dikenal (karena tidak ada nama yang lebih baik) sebagai Pixel Mixing. Alih-alih membentuk warna berdasarkan 'rata-rata piksel' di dalam 'support window', ia memakai 'luas piksel' yang lebih akurat di dalam support window. Sebagai contoh, di sini saya mengambil pola piksel 'papan catur', lalu memperkecilnya sebanyak 2 piksel, dan membandingkan hasil Scale dengan resize memakai Filter Box & Triangle yang sangat sederhana.
  magick -size 10x10 pattern:gray50  checks.gif
  magick checks.gif  -filter box      -resize 8x8  checks_box.gif
  magick checks.gif                   -scale  8x8  checks_scale.gif
  magick checks.gif  -filter triangle -resize 8x8  checks_triangle.gif

[IM Output]
'hash' 10 piksel | | [IM Output]
Filter Box
Resize | [IM Output]
Pixel Mixing
Scale | [IM Output]
Filter Triangle
Resize
Gambar di atas telah diperbesar sangat banyak

Yang di atas memperlihatkan hasil untuk 'rata-rata murni', lawan 'pixel mixing', lawan 'interpolasi linear'. Terlihat pula bahwa Operator scale sebenarnya mirip dengan Filter Triangle, tetapi hanya saat gambar diperkecil sedikit sekali. Pada kasus lain (pengecilan kuat, pembesaran, atau penentuan ukuran bilangan bulat yang tepat) hasilnya lebih menyerupai Filter Box. Pada dasarnya ia menghasilkan sesuatu yang lebih menyerupai campuran antara filter Box dan Triangle, tergantung seberapa besar gambar itu diperkecil. Efek serupa terlihat ketika gambar diperbesar.

  magick -size 8x8 pattern:gray50  checks_sm.gif
  magick checks_sm.gif -filter box      -resize 10x10 checks_sm_box.gif
  magick checks_sm.gif                  -scale  10x10 checks_sm_scale.gif
  magick checks_sm.gif -filter triangle -resize 10x10 checks_sm_triangle.gif

[IM Output]
'hash' 10 piksel | | [IM Output]
Filter Box
Resize | [IM Output]
Pixel Mixing
Scale | [IM Output]
Filter Triangle
Resize
Gambar di atas telah diperbesar sangat banyak

Ketika memperbesar, Filter Box tidak pernah menghasilkan 'piksel rata-rata', hanya penggandaan baris/kolom piksel. Sebaliknya scale menghasilkan piksel berwarna rata-rata di sepanjang tepi, lagi-lagi mirip tetapi tidak persis sama dengan Filter Triangle. Tentu saja efek ini baru benar-benar terlihat pada pembesaran kecil yang bukan bilangan bulat, sedangkan pada penskalaan yang lebih besar hanya tampak di sepanjang tepi, tempat pada kasus yang lebih lazim Anda mendapat satu atau dua piksel rata-rata. Ringkasnya: Scale jauh jauh lebih cepat daripada Operator resize biasa, sebab tuntutan pemrosesan gambarnya tidak seumum itu. Tetapi ia juga algoritme yang sama sekali berbeda, dan hasilnya sedikit berbeda ketika dipakai me-resize gambar dengan skala bukan bilangan bulat. Untuk detailnya lihat halaman Pixel Mixing, juga diskusi di Forum IM, Upscaling a few pixels linearly. Terima kasih khusus kepada pengguna forum atnbueno, yang menunjukkan perbedaan di atas. Sample - resize dengan menggandakan/menghapus baris dan kolomOperator resize "-sample" adalah operator resize yang paling cepat, terutama pada pengecilan gambar berskala besar. Bahkan ia lebih cepat daripada operator "-scale" (lihat di atas). Ketika memperbesar gambar, ia hanya melakukan penggandaan piksel (seperti Filter Box), sehingga terbentuk 'blok' warna piksel berbentuk persegi panjang. Namun ketika memperkecil gambar, "-sample" sekadar menghapus baris dan kolom piksel. Karena seluruh baris dan kolom piksel hanya ditambahkan atau dibuang, "-sample" tidak akan memunculkan warna baru atau warna tambahan. Fakta ini bisa penting untuk sejumlah teknik pemrosesan gambar, misalnya me-resize animasi GIF. Cara lain memandangnya: gambar itu 'disampel' satu per satu pikselnya dalam pola yang sangat rata dan teratur di seluruh gambar. Bayangkan gambar dibagi menjadi larik wilayah, lalu satu piksel dari tiap wilayah dipilih untuk gambar hasilnya. Namun 'penyampelan' piksel satu per satu ini (atau penghapusan baris/kolom secara borongan) bisa memberi hasil yang cukup mengerikan, terutama untuk gambar yang mengandung garis tipis (dalam arti lebarnya diukur dalam piksel). Sebagai contoh, di sini saya menggambar sebuah garis lalu memperkecil ukuran gambarnya, dan hasilnya hanya berupa deretan titik.

  magick -size 150x60 xc: -draw 'line 0,59 149,0' line_orig.gif
  magick line_orig.gif  -sample 50x20  line_sample.gif

[IM Output] [IM Output]

Ini efek khas yang muncul pada penyampelan gambar, dan dikenal sebagai efek Aliasing yang parah. Offset piksel yang disampelSejak IM v6.8.4-7, piksel yang tepatnya disampel pada tiap subwilayah penyampelan kini didefinisikan sebagai piksel di titik tengah setiap wilayah (atau piksel tengah kiri-atas kalau subwilayahnya berisi piksel dalam jumlah genap). Artinya, kalau Anda menyampel sebuah gambar menjadi satu piksel saja, yang didapat adalah piksel tengah gambar itu. Sebelum IM v6.8.4-7, piksel yang dipilih adalah piksel kiri-atas tiap wilayah. Namun ada laporan tentang beberapa versi yang mungkin memilih piksel kanan-bawah, atau bahkan sedikit berubah-ubah karena bug.
Informasi semacam ini terutama berguna untuk gambar yang diperkecil dengan pembagian bilangan bulat dari ukuran gambar asli. Misalnya ketika Anda membuat atau menyampel gambar berpiksel kasar, atau Menghilangkan interlace pada frame video. Sejak versi itu pula Anda dapat mengendalikan dengan tepat piksel mana pada tiap subwilayah yang dipilih, memakai define "sample:offset, yang menerima satu atau dua nilai persentase ('50' secara default untuk titik tengah). Perhatikan bahwa yang dipakai adalah persentase karena pada kasus umum 'subwilayah penyampelan' mungkin tidak berimpit dengan batas piksel. Itulah sebabnya yang dibutuhkan persentase dan bukan 'offset piksel'. Namun kalau ukuran gambar habis dibagi rapi oleh jumlah sampel, Anda dapat menghitung dengan mudah piksel mana yang diinginkan dari tiap subwilayah. Misalnya kalau sebuah gambar disampel sehingga subwilayahnya berukuran 5 piksel (contohnya menyampel gambar selebar 100 piksel menjadi 20 sampel piksel), maka persentase offset penyampelan dalam rentang 0 sampai 19,9 memilih piksel pertama tiap wilayah, 20,1 sampai 39,9 memilih yang kedua, dan seterusnya. Dengan kata lain Anda bisa memakai nilai persentase 10, 30, 50, 70 dan 90 untuk menentukan dengan tepat piksel mana yang diinginkan dari tiap wilayah penyampelan berukuran tetap itu. Untuk lebih lanjut soal offset penyampelan lihat diskusi Forum IM Sample Points. Magnify - penskalaan pikselOpsi "-magnify" melipatduakan ukuran gambar, tetapi melakukannya dengan teknik yang dikenal sebagai "Pixel Scaling" memakai algoritme Scale2X. Algoritme ini berusaha menghaluskan sudut-sudut piksel yang diperbesar tanpa menambah warna baru. Dengan begitu gambar berpiksel kasar yang sangat kecil membesar lebih bersih, sambil mempertahankan warna asli dan "tampilan piksel retro" dari gambar kecilnya.
  magick -size 8x8 pattern:CrossHatch30 -virtual-pixel tile \
          -magnify -magnify -magnify magnify_crosshatch.gif

[IM Output] [IM Output]

Perhatikan bahwa pengaturan Piksel virtual dipakai untuk memastikan magnify memahami bahwa gambar tertentu ini 'membungkus' di tepi-tepinya. Sebelum IM v6.8.4-10, magnify hanyalah pembungkus di sekitar resize untuk melipatduakan ukuran gambar. Tidak terlalu berguna dan jarang dipakai. Dengan "Pixel Scaling", opsi ini jadi jauh lebih berguna. Lihat forum pengguna IM tentangPixel Scaling untuk keterangan lebih lanjut.
Fungsi "Minify()" juga sering tersedia di berbagai API untuk memotong ukuran gambar menjadi separuh, tetapi itu pun sekadar pembungkus di sekitar resize. Namun "-minify" tidak tersedia dari API baris perintah, setidaknya belum pada saat tulisan ini dibuat.
--- ---
Adaptive Resize - resize kecil tanpa blurOperator "-adaptive-resize" memakai metode khusus Interpolasi Mesh untuk mengubah ukuran gambar. Sebagai contoh, di sini saya me-resize sebuah garis sederhana, pertama dengan "-resize" biasa, lalu sekali lagi dengan "-adaptive-resize".
  magick -size 50x50 xc: -draw 'line 0,49 49,0'  line_orig2.gif
  magick line_orig2.gif           -resize 80x80  line_resize.gif
  magick line_orig2.gif  -adaptive-resize 80x80  line_adaptive.gif

[IM Output] [IM Output] [IM Output]

Kalau kita lihat pembesaran dari kedua hasilnya...

[IM Output] [IM Output]

Terlihat bahwa gambar hasil Adaptive Resize di sebelah kanan jauh lebih bersih dan tidak sekabur gambar di sebelah kiri yang dibuat dengan operator "-resize" biasa. Pada dasarnya operator ini menghindari pengaburan berlebihan yang dapat dihasilkan operator "-resize" pada perubahan warna yang tajam. Cara ini bekerja baik untuk penyesuaian ukuran gambar yang sedikit, terutama untuk pembesaran, dan khususnya pada gambar dengan perubahan warna yang tajam. Namun seperti semua metode interpolasi piksel, ia akan memunculkan aliasing dan efek Moiré ketika gambar diperbesar atau diperkecil lebih dari 50%. Anda juga dapat menghasilkan hasil yang persis setara memakai operasi Distort Resize dengan opsi "-filter point -interpolate mesh". Artinya, gambar diubah ukurannya memakai metode pencarian Interpolasi Mesh yang sederhana, bukan filter resampling yang lebih rumit. Interpolative Resize - resize memakai metode interpolasiOperator "-interpolative-resize" praktis sama dengan operator Adaptive Resize sebelumnya. Bedanya, operator ini memakai pengaturan "-interpolate" yang berlaku, bukan metode interpolasi 'Mesh' yang tetap.

Kalau Anda memakai pengaturan "-interpolate" bernilai 'Nearest', pada dasarnya hasilnya setara dengan Operator sample. Begitu pula banyak Metode interpolasi sederhana lainnya setara dengan memakai Filter resize terinterpolasi yang sepadan. Tetapi ada sejumlah metode interpolasi seperti Mesh yang tidak punya padanan sebagai filter resize.

Ini juga resize tanpa penskalaan, artinya cara ini bekerja bagus untuk pembesaran dan pengecilan berskala kecil, tetapi ketika gambar diperkecil lebih dari 50% dapat muncul Efek aliasing yang parah, seperti terlihat pada 'operator resize penyampelan' lain di atas. Liquid Rescale - seam carvingSebagaimana Sampling mengubah ukuran gambar dengan langsung membuang atau menggandakan seluruh kolom dan baris gambar, operator khusus IM "-liquid-rescale" juga membuang atau menggandakan kolom dan baris piksel untuk memperkecil/memperbesar gambar. Bedanya, ia berusaha melakukannya dengan cara yang lebih cerdas. Pertama, alih-alih membuang satu garis piksel yang lurus, ia membuang satu 'seam ' piksel. Yaitu kolom (atau baris) yang boleh berkelok-kelok menembus gambar, dengan sudut sampai 45 derajat. Kedua, ia berusaha membuang seam yang 'paling tidak penting ' dilihat dari isi gambar. Cara memilihnya berdasarkan energi gambar, atau lebih sederhananya, seberapa banyak perubahan warna yang dilalui suatu 'seam'. Seam dengan perubahan paling sedikit dibuang lebih dulu, disusul seam ber-'energi' lebih tinggi, sampai gambar mencapai ukuran yang diinginkan. Untuk keterangan lebih rinci tentang liquid resize dan seam carving lihat Wikipedia: Seam Carving, demo video YouTube, dan makalah PDF: Seam Carving for Content-Aware Image Resizing. Berikut misalnya logo IM saat diperkecil memakai operator IM "-liquid-rescale".

  magick logo: -resize 50% -trim +repage  logo_trimmed.jpg
  magick logo_trimmed.jpg  -liquid-rescale 75x100%\!  logo_lqr.jpg
  magick logo_trimmed.jpg  -sample 75x100%\!  logo_sample.jpg

[IM Output]
Asli | | [IM Output]
Liquid Resize | [IM Output]
Hasil sample

Perhatikan bagaimana "-liquid-rescale" mempertahankan sosok penyihir yang rumit, sambil memeras bintang-bintang dan bagian judul gambar yang lebih sederhana. Ia juga sedikit memeras kaki kanan sang penyihir sehingga tepi jubahnya agak bergerigi, sama seperti yang terjadi pada tongkat sihirnya yang tipis tapi sederhana. Sebaliknya gambar hasil Sample resize sekadar membuang kolom piksel berjarak sama, sehingga seluruh gambar terdistorsi secara merata. Bintang-bintangnya tidak dipertahankan utuh dan semua tepinya memperlihatkan efek aliasing yang jelas tetapi seragam. Pada dasarnya "-liquid-rescale" menghasilkan gambar 'terperas' yang umumnya lebih enak dipandang tanpa memunculkan 'warna campuran' tambahan atau mengaburkan gambar. Namun Anda bisa mendapat efek aliasing yang kecil tetapi terlokalisasi di satu titik (dalam hal ini tongkat sang penyihir), alih-alih efek itu tersebar ke seluruh gambar. Operator ini juga dapat memperbesar gambar, dengan 'menggandakan' seam yang ditemukannya di dalam gambar.

  magick logo_trimmed.jpg  -liquid-rescale 130x100%\!  logo_lqr_expand.jpg

[IM Output] [IM Output]

Seperti terlihat, ia mula-mula berusaha melipatduakan jarak antara berbagai objek (kalau bisa), sehingga objek-objek itu direnggangkan. Meski dalam kasus ini bintang paling kiri dan huruf 'm' jadi terdistorsi karena 'seam' yang menembus wilayah 'berenergi rendah' itu terkumpul jadi satu. Perhatikan juga bahwa tiap seam hanya digandakan sekali, sehingga tekniknya mulai jebol kalau gambar diperbesar terlalu banyak. Metode yang lebih baik sering kali adalah memperbesar gambar dulu, lalu memakai liquid rescale untuk memperkecilnya ke ukuran yang diinginkan. Atau memakai "-liquid-rescale" dalam beberapa langkah kecil. Untuk memperlihatkan efek "-liquid-rescale" dengan lebih baik, berikut sebuah animasi ketika gambar yang sama diperkecil sampai sangat tipis, lalu diperbesar lagi. Animasi ini dibuat memakai skrip shell animate_lqr.

[IM Output]

Perhatikan lagi bagaimana ia berusaha mempertahankan bagian gambar yang paling rumit, seiring gambar dimampatkan ke area yang makin lama makin kecil. Yaitu, ruang-ruang pada judul dimampatkan lebih dulu, lalu lengan sang penyihir, lalu sisi kanan sang penyihir, menyisakan bagian tengah penyihir yang paling rumit untuk paling akhir. Perhatikan terutama bagaimana bintang-bintang saling didorong berdekatan sebelum akhirnya terkena pembuangan piksel resampling yang dilakukan liquid rescale. (Masalahnya dibahas berikutnya) Bayangkan liquid rescale sebagai upaya memampatkan gambar seperti spons, dengan area terbuka dimampatkan lebih dulu dan bagian yang padat serta lebih berstruktur disisakan untuk terakhir. Masalah seam carving Liquid resize, atau seam carving, bekerja murni dengan membuang piksel utuh dari gambar. Karena itu, seperti sampling, ia tidak akan memunculkan atau memadukan warna, dan garis lurus serta pola di dalam gambar bisa terdistorsi berat oleh operasi ini. Pada dasarnya ia dapat menimbulkan Efek aliasing yang serius, kecuali diterapkan pula semacam metode penghalusan. Namun umumnya efek aliasing itu terkumpul dan terlokalisasi pada area gambar yang kurang rumit, bukan tersebar ke seluruh gambar. Justru itulah satu-satunya alasan cara ini bekerja begitu baik! Karena sebuah 'seam' boleh berkelok menembus gambar, seam sering tampak melingkari objek yang rumit, membuang ruang di antara objek sebelum mencoba memampatkan objeknya sendiri. Perhatikan misalnya bagaimana kata 'Image' pada peragaan di atas tampak terselip di bawah huruf-huruf lain pada judul tanpa distorsi berlebihan. Namun gerak menyamping ini terbatas pada sudut 45 derajat. Untuk gambar dengan latar belakang 'ramai' dan objek depan yang kurang 'ramai', misalnya foto yang memuat wajah orang, fungsi energi bisa menganggap objek depan kurang penting daripada latar belakangnya. Ini menimbulkan efek samping yang serius dan merugikan, yang mungkin menuntut campur tangan manusia untuk diatasi. | _Liquid rescale saat ini masih operasi yang sangat eksperimental, ditambahkan sejak IM v6.3.8-4. Ia menuntut pustaka delegate "liblqr" terpasang lebih dulu sebelum bisa dipakai.

Sampai saat ini belum disediakan kendali tingkat pakar. Kendali semacam mengubah fungsi energi konten yang dipakai, memakai filter pelestarian/pembuangan buatan pengguna (yang menyesuaikan fungsi energi itu), akses ke gambar hasil seam carving antara, serta fungsi-fungsi lain yang juga disediakan pustaka itu. Diperkirakan kendali semacam itu akan disediakan suatu saat nanti, seiring permintaan pengguna dan seiring kami memperoleh kendali internal yang lebih baik atas fungsi-fungsi pustaka tersebut.

PERINGATAN Jangan berharap ini bertahan persis seperti yang diterapkan sekarang. Sifatnya sangat eksperimental, dan diperkirakan akan berubah serta berkembang fungsinya._
Distort Resize - resize bentuk bebasSemua metode resize di atas punya satu keterbatasan yang sudah kita singgung tadi: semuanya membulatkan ukuran gambar baru ke jumlah piksel bilangan bulat, lalu memetakan piksel gambar lama ke larik piksel yang baru. Ini punya dua akibat. Pertama, ketika gambar diperkecil ke ukuran yang sangat kecil, skala X mungkin tidak persis sama dengan skala Y pada gambar hasilnya (rasio aspeknya sedikit berbeda). Selisih ini kecil, dan kecuali ukurannya sangat kecil biasanya tidak kentara. Akibat kedua, gambar tidak dapat di-resize agar pas ke area yang mengandung tepi piksel pecahan, padahal itu bisa penting untuk pemrosesan lanjutan seperti penumpukan gambar. Artinya juga resize tidak bisa dipakai sekadar untuk menggeser (mentranslasikan) gambar setengah piksel ke kanan (tanpa benar-benar mengubah ukuran), meskipun algoritmenya sebenarnya sanggup melakukannya dengan mudah. Sejak IM v6.3.6, Operator distorsi umum "-distort" memungkinkan Anda melakukan itu dan lebih banyak lagi, memakai metode distorsi Scale-Rotate-Translate. Anda juga dapat melakukannya memakai distorsi Affine berdasarkan pergeseran titik kendali. Perhatikan bahwa karena tepi gambar dapat memuat piksel pecahan, gambar akhirnya kemungkinan besar 2 sampai 3 piksel lebih besar daripada yang Anda duga. Piksel tambahan di sekelilingnya akan dicampur menurut pengaturan Piksel virtual yang berlaku, yang biasanya Anda setel menjadi transparan. Sebagai contoh, di sini saya me-resize gambar rose ke 90% (.9) dari ukuran aslinya, tanpa rotasi (0), memperkecilnya di sekitar pusat gambar (titik kendali default kalau tidak ditentukan)... |

  magick rose: -alpha set -virtual-pixel transparent \
          +distort SRT '.9,0' +repage  rose_distort_scale.png

[IM Output]
Sepintas hasilnya tampak bukan perbaikan, malah tepinya kabur, tetapi itu resize yang eksak tanpa penyesuaian demi ukuran gambar bilangan bulat, persis seperti yang diminta. Karena itulah tepinya kabur: warna pikselnya disebar ke pecahan ukuran piksel, bukan hanya ke bilangan bulat. Perhatikan bahwa saya memakai bentuk 'plus', "+distort", supaya operator pemroses gambar ini menetapkan ukuran dan offset gambar akhir pada Kanvas virtual dengan benar, untuk pemrosesan dan pelapisan lanjutan. Kalau offset itu tidak diinginkan, ia dapat dibuang memakai operator "+repage". Tetapi kalau dibiarkan, lokasi gambar yang sebenarnya pada kanvas yang lebih besar tetap terjaga, sehingga Anda dapat menempatkan gambar itu dengan tepat berikut 'tepi kaburnya'. Di sini saya me-resize gambar sehingga sudut kiri atasnya (0,0) bergeser .5 piksel ke kanan (menjadi .5,0), dan sisa gambarnya diskalakan di sekitar titik kendali itu... |

  magick rose: -alpha set -virtual-pixel transparent \
          +distort SRT '0,0  .9  0  .5,0' +repage  rose_distort_shift.png

[IM Output]
Perhatikan bahwa karena tepi atas tidak benar-benar bergeser, tepi itu tetap relatif tajam, sementara semua tepi lainnya menjadi kabur. Berikut pembesaran piksel pada sudut atas, yang memperlihatkan transparansi yang ditambahkan distort untuk memungkinkan resize sub-piksel... |

  magick rose_distort_shift.png -crop 15x15+0+0 +repage \
          -scale 600%   rose_distort_shift_mag.png

[IM Output]
Terlihat bahwa tepi atas tetap tajam, sedangkan tepi kiri (dan semua tepi lainnya) kini setengah transparan. Itulah intinya. Anda punya kendali eksak atas resize, dan atas lokasi sub-piksel gambar hasilnya. Bukan sekadar pemuatan gambar hasil resize yang dikuantisasi ke jumlah piksel bilangan bulat. Artinya, distort adalah penskalaan ulang dan penempatan gambar yang eksak sampai ke pecahan piksel, sehingga gambar itu bisa dipaskan dengan presisi ke gambar lain. Hal ini bisa jadi sangat penting dalam pekerjaan video, tempat resize gambar sisipan yang tidak presisi dapat memunculkan efek yang 'mengganggu'. | Secara teknis, pengubahan ukuran gambar adalah bentuk sederhana dariDistorsi gambar, dan keduanya merupakan teknik resampling gambar. Teknik penyaringan 2-lintasannya sangat cepat, tetapi terbatas pada penskalaan piksel yang sejajar ortogonal, dan pada jumlah piksel bilangan bulat pada hasil akhirnya.
Affine, Transform Sejak IM v6.4.2-8, pengaturan lama "-affine" yang dipakai bersama operator "-transform" atau "-draw" menyediakan kemampuan resize bentuk bebas yang serupa. Namun sebenarnya itu setara dengan memanggil "+distort" dengan metode distorsi 'AffineProjection'. Karena itu semua catatan tentang Distort di atas berlaku pula. Cara ini menuntut lebih banyak matematika sehingga sulit dipakai pengguna kebanyakan. Umumnya lebih baik memakai metode distorsi di atas, yang menyediakan sejumlah cara alternatif untuk menyatakan distorsi affine yang akan diterapkan.

Distort vs resize

Kalau Anda benar-benar ingin membandingkan langsung Distort dengan Resize, distorsi gambarnya harus dibatasi secara khusus agar persis cocok dengan gambar hasil resize yang dijadikan pembanding. Ini bukan tugas yang sederhana. Untuk mempermudahnya, Metode distorsi Resize khusus ditambahkan pada IM v6.6.9-2. Berikut misalnya saya memperbesar habis-habisan gambar bawaan "rose:" memakai Resize yang cepat, lalu memakai Distort...

  magick rose: -filter Lanczos -resize 300x rose_resize.png

  magick rose: -filter Lanczos -distort Resize 300x rose_distort.png

[IM Text]
Resize (Lanczos - Sinc) | [IM Text]
Distort (Lanczos - Jinc)

Kalau Anda mengamati tepi bawah bunga mawarnya, terlihat bahwa Operator distort sebenarnya menghasilkan gambar yang lebih baik dan lebih bersih daripada Operator resize. Dengan sangat sedikit Artefak blocking yang lazim muncul ketika gambar diperbesar. Selain tepi bawah itu, sisa gambarnya praktis sama, bahkan ketika dibandingkan memakai skrip "flicker_cmp". Namun ingat bahwa Distort jauh lebih lambat daripada Resize, sebab ia memakai teknik Resampling area yang lebih langsung tetapi jauh lebih rumit, tanpa pengoptimalan kecepatan 2-lintasan yang dipakai resize. | _Perbedaan sesungguhnya pada kedua gambar di atas adalah bahwaOperator distort memakai metode filter Resampling area eliptis dua dimensi (dikenal juga sebagai penyaringan atau resampling silindris) untuk pemrosesan gambarnya. Ini lebih lambat daripada metode resampling satu dimensi dua lintasan yang dipakai semua metode resize lain pada bagian ini. Itu pula sebabnya hasilnya lebih baik di sepanjang tepi bawah yang miring pada gambar rose yang diperbesar tadi. Ia tidak terbatas pada penyaringan horizontal dan vertikal saja.

Efeknya terhadap ringing dapat Anda lihat pada contoh di Artefak ringing.

_


Teknik mengubah ukuran

Resize dengan koreksi ruang warna

Meski resize bekerja sangat baik, kebanyakan orang tidak memakainya dengan benar. Saya sendiri pun biasanya langsung memakai resize pada gambar apa adanya, sehingga secara teknis saya me-resize gambar dengan cara yang keliru. Gambar biasanya disimpan memakai ruang warna "sRGB" yang non-linear, atau dengan koreksi gamma. Lihat Persepsi warna manusia untuk detailnya. Tetapi resize (seperti kebanyakan operator pemrosesan gambar lainnya) adalah pemroses yang linear secara matematis, yang mengandaikan nilai gambar langsung mewakili kecerlangan warna yang linear. Ruang warna "sRGB" pada dasarnya mengandung koreksi gamma sekitar 2,2. Sebenarnya urusannya lebih rumit dari itu dan melibatkan dua kurva terpisah. Lihat wikipedia, sRGB dan W3org, sRGB the Default Colorspace of the Internet. Sejak versi 6.7.5 ImageMagick mengikuti konvensi ini dan menetapkan ruang warna default gambar (setidaknya untuk kebanyakan format file gambar) sebagai sRGB. Artinya kita cukup memakai "-colorspace" untuk mengubah gambar ke ruang linear sebelum melakukan resize. Memakai koreksi warna pada IM versi Q8 yang berkualitas rendah (lihatKualitas) tidak dianjurkan karena hilangnya presisi pada kualitas memori serendah itu.
Gambar NASA "Earth's City Lights" adalah kasus yang sangat ekstrem, tempat efek ruang warna non-linear berdampak besar pada hasil resize gambarnya. Di sini kita me-resize gambar itu langsung tanpa koreksi ruang warna...
  magick earth_lights_4800.tif -resize 500 earth_lights_direct.png

[IM Text]

Dan di sini kita memakai magick untuk berpindah dari sRGB non-linear ke RGB linear, lalu me-resize gambarnya, kemudian mengembalikannya lagi...

  magick earth_lights_4800.tif -colorspace RGB     -resize 500    \
          -colorspace sRGB  earth_lights_colorspace.png

[IM Text]

Seperti terlihat, 'lampu-lampu' pada gambar jauh jauh lebih terang karena tidak terlalu dipengaruhi ruang warna non-linear gambar sumbernya. Meski kebanyakan gambar tidak berdampak sebesar contoh di atas, dampaknya tetap ada dan bisa menimbulkan banyak efek. Efek utama yang terlihat dari sifat non-linear sRBG adalah warna gelap disimpan sebagai nilai yang jauh lebih gelap (supaya lebih relevan secara persepsi). Tetapi karena lebih gelap, warna itu tidak diproses dengan benar secara matematis, sehingga gambar sRGB hasilnya lebih gelap daripada gambar yang diproses dalam ruang warna linear seperti RGB (atau LAB atau LUV). Lihat juga Memproses gambar nyata dan Menggambar dengan koreksi gamma dan ruang warna. Penanganan ruang warna yang benar ini juga berlaku untuk pemakaian distort (filter eliptis) dan pengaburan gambar, serta dapat berdampak besar pada kuantisasi gambar, dithering, dan ordered dithering. Hal ini dibahas terperinci pada filter resampling. PERINGATAN: ruang warna RGB dapat menimbulkan masalah clipping di sepanjang tepi yang melibatkan perubahan warna primer yang kuat (bukan hanya antara hitam dan putih). Lihat bagian berikutnya. | |
Pada IM versi lebih lama dari v6.7.5, ruang warna masukan defaultnya adalah 'RGB'. Ruang warna 'sRGB' saat itu sebenarnya berarti "dikonversi dari sRGB ke RGB linear". Akibatnya kedua label itu tertukar! Aneh tapi nyata. Karena itu ImageMagick versi lama perlu melakukan koreksi ruang warna di atas dengan nama ruang warna yang dipertukarkan. Seperti ini...

  magick earth_lights_4800.tif -colorspace sRGB \
          -resize 500  -colorspace RGB  earth_lights_colorspace.png

* Contoh ini sudah usang ***

Perhatikan bahwa operasi "-colorspace RGB" sebenarnya tidak diperlukan, sebab operasi itu dijalankan otomatis saat menyimpan ke format file gambar PNG. Contoh di atas dikembangkan dari diskusi Forum IM Correct Resize.

Resize dengan koreksi gamma

Beginilah cara me-resize gambar dengan benar hanya memakai koreksi gamma.

  magick earth_lights_4800.tif   -gamma 0.454545 \
          -resize 500    -gamma 2.2  earth_lights_gamma.png

[IM Text]

Alternatif untuk operasi gamma balikan "-gamma 0.454545" adalah memakai "-evaluate POW 2.2". Perhatikan bahwa koreksi gamma hanyalah padanan kasar dari konversi gambar dari/ke ruang warna sRGB yang semestinya, tetapi kemiripannya begitu dekat sehingga sulit sekali melihat perbedaan antara koreksi ruang warna dan koreksi gamma. Koreksi gamma juga tidak mengutak-atik pengaturan ruang warna RGB/sRGB pada IMv7, jadi bisa jadi pilihan yang lebih baik kalau versinya tidak diketahui persis. Anda mungkin juga ingin melihat operator "-auto-gamma", yang berusaha menyesuaikan gambar agar area terang dan gelapnya seimbang (dengan asumsi gambar berada di ruang warna linear).

Resize di ruang warna LAB

Satu masalah dalam memakai ruang warna sRGB, RGB, atau bahkan XYZ untuk resize maupun pemrosesan gambar apa pun adalah bahwa ketiga kanal warnanya tidak hanya mewakili warna, tetapi juga intensitas atau kecerlangan. Artinya kalau salah satu kanal terdistorsi (misalnya karena ter-clipping), warna pikselnya ikut terdistorsi dan hasilnya bisa terlihat aneh. Ruang warna LAB bukan hanya ruang warna linear, melainkan juga dirancang agar intensitas (kanal L) terpisah dari dua kanal warna (kanal A dan B). Artinya kalau salah satu kanal ter-clipping, tidak muncul kemencengan warna. Artinya pula umumnya tidak ada kanal yang mendekati batas clipping, kecuali Anda memang menangani gambar hitam-putih murni, yang jarang ditemui pada gambar dunia nyata. Karena itu memproses gambar memakai ruang warna LAB sesungguhnya bekerja lebih baik, dan menghindari clipping serta kemencengan warna yang mungkin muncul saat memakai ruang warna RGB atau XYZ. | _Sebelum IM v6.7.8-2, nilai LAB untuk kanal A dan B disimpan memakai bilangan bulat bertanda di dalam ruang memori bilangan bulat tak bertanda. Ini menciptakan ketidaksinambungan antara nilai negatif dan positif, yang membuat pemrosesan normal tidak bisa bekerja, hanya konversi format gambar saja.

Ini berarti pada IM versi lama, pemrosesan gambar di ruang warna LAB tidak berfungsi, terutama kalau warnanya melibatkan nilai positif sekaligus negatif. Yaitu ketika bekerja dengan warna yang berpindah antara biru-kuning dan merah-hijau.

Setelah rilis itu nilainya disimpan secara internal memakai bias 50%, yang menghilangkan ketidaksinambungan tersebut sehingga operasi linear dapat bekerja sebagaimana mestinya.

_
Untuk resize yang melibatkan filter resampling 'penajaman' (yang sangat lazim dipakai), memakai ruang warna Lab juga meredam perubahan intensitas ekstrem yang dapat memunculkan Artefak ringing yang terlalu kuat (dan ter-clipping rentangnya) pada warna primer RGB. Sebagai contoh...

  magick rose: -colorspace RGB  -filter Lanczos  -distort resize 300x \
          -colorspace sRGB rose_distort_rgb.png
  magick rose: -colorspace LAB  -filter Lanczos  -distort resize 300x \
          -colorspace sRGB rose_distort_lab.png

[IM Output]
Asli | | [IM Output]
Ruang warna RGB | [IM Output]
Ruang warna LAB

Seperti terlihat, sementara tepi mawar ter-clipping di ruang warna RGB linear, hal itu tidak terjadi di ruang warna LAB. Di ruang warna RGB, tepi bawah mawar mengalami perubahan warna dari nyaris putih murni ke nyaris merah murni, yang menyebabkan perubahan (negatif) yang kuat pada kanal 'hijau' dan 'biru'. Ini menghasilkan efek ringing 'lobe negatif' yang sangat kuat, yang lalu ter-clipping di ruang warna RGB. Hasil akhirnya distorsi warna yang parah, akibat efek penajaman filternya. Di ruang warna LAB, pergeseran dari putih ke merah tidak sekuat itu, baik pada intensitas maupun pada kanal warnanya, sehingga meski penajaman intensitasnya bagus, baik intensitas maupun kanal warnanya tidak ter-clipping, dan distorsi warna pun terhindari. Hasilnya gambar resize yang jauh lebih baik, dengan efek penajaman filter yang lebih pas. Cukup dengan memisahkan intensitas dari warna.

Resize memakai ruang warna LUV

Sejak IM v6.7.8-8, IM juga menerapkan ruang warna LUV yang berkerabat dekat. Keduanya dirancang agar seragam secara persepsi (linear), dan bahkan berbagi hasil yang persis sama pada kanal intensitas 'L' atau 'Lightness' yang krusial, meski kanal warnanya dihitung dengan cara berbeda. Perbedaan utamanya, sumbu warna LUV disesuaikan agar delta warnanya (selisih warna) setara secara persepsi, yang menghasilkan skala warna sedikit berbeda dari ruang warna LAB, meski intensitasnya tetap sama di antara keduanya. Lihat Adams chromatic valence color space. Hasil resize antara LAB dan LUV praktis sama.

  magick rose: -colorspace LUV  -filter Lanczos  -distort resize 300x \
          -colorspace sRGB  rose_distort_luv.png

[IM Output]

Lihat Ruang warna untuk keterangan lebih lanjut tentang kedua ruang warna ini..

Ringkasan resize memakai berbagai ruang warna Atau mengapa tidak memakai LAB atau LUV untuk resize?

Karena sama seperti sRGB, ruang warna LAB dan LUV pun ruang warna persepsi yang non-linear! Sedangkan matematikanya hanya dimaksudkan untuk diterapkan pada nilai linear. Sebagai contoh, berikut hasil me-resize gambar "Earth's City Lights" di ruang warna 'Lab'.

  magick earth_lights_4800.tif -colorspace Lab     -resize 500    \
          -colorspace sRGB  earth_lights_lab.png

[IM Text]

Hasilnya praktis sama dengan yang didapat kalau gambar itu di-resize langsung di ruang warna persepsi sRGB. Tetapi apakah me-resize di ruang warna persepsi benar-benar hal yang buruk? Itu sebenarnya masih bisa diperdebatkan. Tampaknya menghindari clipping kanal warna itu lebih penting, sedangkan kemencengan warna (perubahan tak setara pada kanal warna yang berbeda) kurang penting. Tetapi gambar LAB dan LUV itu linear, secara persepsi! Karena itu barangkali memadukan warna (yang memang dilakukan Filter resampling) di ruang warna yang linear secara persepsi justru hal yang baik. Satu catatan terakhir, sRGB hanya linear secara persepsi dalam hal intensitas di sepanjang komponen warna primer. Ia sebenarnya tidak linear secara persepsi dalam hal warna, jadi ia tetap ruang warna yang buruk untuk melakukan resize gambar dalam bentuk apa pun. Nicolas Robidoux merangkumnya dengan bagus... _Umumnya, ruang warna cahaya linear (RGB linear dan XYZ) menghasilkan halo gelap yang berlebihan, sedangkan ruang warna "persepsi" (sRGB, LAB, LUV) menghasilkan halo terang yang berlebihan.

Kalau dipikir sejenak, ini masuk akal sepenuhnya, sebab ruang warna persepsi menjejalkan banyak bit di ujung gelap spektrum intensitas dan "mengosongkan" ujung terangnya, demi meniru HVS (Human Visual System). Jadi, 1 satuan overshoot gelap membawa Anda kurang "jauh" di sRGB dibanding di RGB linear, tetapi 1 satuan overshoot terang membawa Anda kurang "jauh" di RGB linear dibanding di sRGB.

Sigmoidisasi (lihat berikutnya) memperlakukan overshoot gelap dan terang secara setara, dan umumnya meredam kedua ekstremnya.

_

Resize memakai ruang warna sigmoidal

Dalam diskusi panjang di Forum Diskusi ImageMagick, Sigmoidal minimization of resampling filter haloing, dikembangkan sebuah teknik baru: alih-alih berusaha me-resize gambar di ruang warna linear, gambar di-resize di ruang warna yang dimodifikasi memakai Operator pengubah warna sigmoidal (-sigmoidal-contrast). Cara ini dapat mengurangi clipping pada halo ekstrem atau Artefak ringing yang mungkin muncul di sepanjang tepi yang sangat tajam. Sebagai contoh, berikut rangkaian teknik resize yang makin 'baik', yang pernah dibahas di Forum Pemrosesan Gambar Digital...

  magick rose: -colorspace RGB  -filter Lanczos  -resize 200x \
          -colorspace sRGB rose_resize_RGB.png
  magick rose: -colorspace RGB  -filter Lanczos  -distort resize 200x \
          -colorspace sRGB rose_distort_RGB.png
  magick rose: -colorspace RGB   +sigmoidal-contrast 6.5,50% \
          -filter Lanczos  -distort resize 200x \
          -sigmoidal-contrast 6.5,50% -colorspace sRGB  rose_sigmoidal_RGB.png

[IM Output]
Resize (linear normal) | [IM Output]
Distort (silindris) | [IM Output]
Variasi sigmoidal

Pada dasarnya yang dilakukan contoh terakhir di atas adalah menurunkan kontras gambar, memampatkan abu-abu nada tengah ke rentang linear yang lebih rapat, sambil menjauhkan nilai ekstremnya dari batas clipping, sebelum resize dilakukan. Setelah itu modifikasi tersebut dibatalkan lagi. Ini pada gilirannya meredam efek ekstrem dari nilai warna, sambil tetap membiarkan filter memproses nada tengah secara linear, sehingga distorsi warna berkurang. Dalam banyak hal ini mirip dengan me-resize gambar di ruang warna sRGB non-linear yang menjadi default (praktik yang jauh terlalu umum), tetapi bekerja sama baiknya untuk artefak ringing terang maupun gelap. Artinya, cara ini simetris di sepanjang seluruh rentang nilai warna, sedangkan resize di ruang warna sRGB hanya bekerja dari ujung gelap rentang warna (nilai biru dan hijau pada contoh di atas). Artinya, ini teknik yang jauh lebih terkendali.Ada pula komentar bahwa variasi sigmoidal ini mungkin hanya bekerja baik untuk pembesaran. Cobalah juga nilai intensitas kontras sigmoidal yang berbeda (6.5 pada contoh di atas) untuk gambar yang berbeda. Ingat, sama seperti setiap teknik resize, hasilnya sangat subjektif dan belum tentu cocok untuk semua jenis gambar. | _Transformasi sigmoidal pada dasarnya menghasilkan ruang warna non-linear buatan sendiri yang khusus, yang dibangun di atas hasil sebelumnya ketika memakai ruang warna persepsi non-linear (sRGB).

Perhatikan bahwa me-resize (mendistorsi) gambar dengan kanal warna non-linear di ruang warna RGB dapat memberi hasil yang sedikit berbeda pada tiap kanal warna. Ini mengakibatkan pergeseran warna yang tipis (berbeda dengan warna yang ter-clipping seperti yang kita lihat tadi).

Ini hanya jadi masalah pada ruang warna non-linear yang kanal warna dan intensitasnya bercampur, seperti sRGB atau ruang warna sigmoidal.

_

Resize dengan unsharp (USM) -- teknik resize ala Photoshop

Me-resize gambar (baik memperkecil maupun memperbesar) sering menambahkan kekaburan (Artefak blurring) pada gambar. Karena itu banyak orang suka bereksperimen dengan berbagai filter (lihat Filter resampling) untuk membuat hasilnya lebih tajam. Tetapi cara itu bisa menambahkan Artefak resize lain pada hasilnya. Salah satu metode yang umum dipakai adalah menajamkan gambar setelah resize. Biasanya ini dilakukan memakai Operasi unsharp yang khusus dan namanya aneh itu, yang menyediakan lebih banyak kendali lagi atas kualitas hasilnya. Sebagai contoh, mari kita 'unsharp' hasil gambar berfilter 'Spline' yang sangat kabur itu...

  magick logo: -filter spline -resize 150x logo_spline.png
  magick logo: -filter spline -resize 150x \
          -unsharp 0x1  logo_spline_unsharp.png

[IM Output]
Spline | | [IM Output]
Hasil unsharp

Seperti terlihat, menajamkan gambar setelah resize memperbaiki hasilnya. Perhatikan terutama detail bintang dan topinya. Anda mendapat gambar yang sangat tajam tanpa aliasing, ringing, bahkan tanpa efek peredupan. Meski Filter Spline sejak awal bukan filter yang bagus, metode penajaman ('unsharp') ini bekerja untuk filter APA PUN. Ia juga menyediakan lebih banyak kendali untuk menyetel hasilnya. Sebenarnya inilah yang dilakukan 'photoshop' untuk memperbaiki kualitas gambar hasil resize-nya, meski saya tidak tahu pengaturan apa yang dipakainya untuk Operasi unsharp itu. Tekniknya dikenal sebagai USM. Nilai default "GIMP" (radius=6, amount=0.5, threshold=0) untuk unsharp setara dengan "-unsharp 12x6+0.5+0", dan itu benar (selain mengabaikan fakta bahwa GIMP menetapkan radius keras pada dua kali sigma). Namun ingat, di ImageMagick radius kernel sebenarnya tidak perlu ditentukan, jadi nilai "-unsharp 0x6+0.5+0" akan bekerja lebih baik. Lihat juga topik forum IM unsharp parameters in GIMP. Kiriman Image Resizing menyarankan "-unsharp 0x0.75+0.75+0.008" sebagai nilai yang bagus untuk gambar berukuran lebih dari 500 piksel. Sementara diskusi di Open Photography Forum, Downsampling with ImageMagick, menyarankan "-unsharp 1.5x1+0.7+0.02".

Mengubah ukuran untuk mengisi ruang tertentu

Pada dasarnya: me-resize gambar besar agar mengisi penuh ukuran gambar tertentu, sambil memangkas bagian gambar yang tidak muat. Sejak IM v6.3.8-3 ada flag resize baru '^' yang memungkinkan Anda melakukannya langsung dalam satu langkah resize. Contoh-contoh ini mewakili metode alternatif yang bisa dipakai pengguna IM versi lama. Lihat Flag fill pada resize di atas.
Solusinya cukup rumit, sebab kebutuhan pengguna yang lazim ketika me-resize gambar adalah memuatkan seluruh gambar ke dalam ukuran tertentu. Karena rasio aspek gambar dipertahankan, tersisalah ruang tambahan yang tidak terpakai pada area yang ingin Anda isi. Di sini kita mencoba me-resize sebuah gambar agar mengisi kotak 80x80.
  magick logo: -resize 80x80\> \
          -size 80x80 xc:blue +swap -gravity center  -composite \
          space_resize.jpg

[IM Output]
Pada contoh di atas kita menambahkan kanvas latar untuk menambal bagian kotak resize yang tidak terpakai, guna memperlihatkan ruang yang ingin kita isi dengan gambar itu; ruang itu ternyata tidak terisi, sebab rasio aspek gambarnya dipertahankan. Nah, kalau semua gambar Anda bergaya lanskap (lebih lebar daripada tinggi), tentu saja Anda bisa saja me-resize gambar agar pas dengan tinggi atau lebar areanya, lalu memakai "-crop" untuk memotong gambar supaya pas persis. |

  magick logo:    -resize x80  \
          -gravity center  -crop 80x80+0+0 +repage   space_crop.jpg

[IM Output]
Masalahnya, cara di atas hanya menangani gambar bergaya lanskap. Cara itu gagal total kalau gambarnya bergaya potret (lebih tinggi daripada lebar). Tentu saja ini bisa diatasi di dalam skrip dengan lebih dulu mengambil dimensi gambar, lalu memilih metode yang tepat untuk memuatkan gambar ke ruang yang dibutuhkan. Tetapi solusi yang lebih baik adalah membiarkan IM mengerjakan semuanya untuk semua gambar. Solusinya di dalam IM adalah memproses gambar dengan me-resize tiap dimensinya secara terpisah, lalu memilih gambar yang lebih besar dari kedua hasilnya. Untuk mempermudah, resize sendiri punya opsi uji bawaan yang hanya me-resize gambar kalau tindakan itu membuat gambarnya lebih besar. Ini memberi kita solusi yang sangat rapi untuk persoalan tadi. |

  magick logo: \
          -resize x160 -resize '160x<'   -resize 50% \
          -gravity center  -crop 80x80+0+0 +repage  space_fill.jpg

[IM Output]
Pada contoh di atas, resize kedua dalam rangkaian itu hanya berjalan kalau lebar yang dihasilkan resize pertama lebih kecil daripada area yang ingin kita isi. Urutan resize yang khusus itu (tinggi dulu, baru lebar) dipilih karena kebanyakan gambar adalah foto yang biasanya lebih panjang secara horizontal. Dengan urutan tersebut, kasus semacam itu membuat operasi resize kedua dilewati. Kalau gambar Anda lebih sering bergaya potret (lebih panjang secara vertikal), ubahlah argumennya agar gambar di-resize berdasarkan tinggi dulu, baru lebar. Sebagai contoh... |

  magick logo: \
          -resize 160x -resize 'x160<'   -resize 50% \
          -gravity center  -crop 80x80+0+0 +repage   space_fill_2.jpg

[IM Output]
Hasil kedua contoh ini seharusnya sangat mirip, dan perintahnya bekerja untuk gambar bergaya lanskap maupun potret, meski salah satunya lebih cocok. Masalah terbesar metode ini adalah gambarnya kini di-resize 2 sampai 3 kali, sehingga muncul kekaburan tambahan dan artefak lain yang mungkin ada pada hasil akhirnya. Untuk menekan hal itu, resize awal dilakukan pada dua kali dimensi akhir, dengan asumsi gambar aslinya paling tidak 3 kali atau lebih besar daripada hasil akhir yang diinginkan. Bukan masalah untuk pembuatan thumbnail, tetapi tetap perlu diingat.

Mengubah ukuran gambar garis

Me-resize secara drastis gambar yang berisi garis tipis bisa menjadi masalah besar... Me-resize gambar menjadi thumbnail yang sangat kecil membuat garis tipis yang lebarnya hanya beberapa piksel memudar dan lenyap ke latar belakang. Ini bisa separah itu sampai saya pernah melihat thumbnail sebuah gambar garis yang tampak kosong melompong! Yaitu, setiap detail gambar aslinya 'lenyap', sehingga thumbnail-nya jadi tidak berguna. Kalau ini jadi masalah, ada beberapa teknik yang bisa membantu...

  • Resize dulu, lalu sesuaikan kontrasnya agar garis lebih terlihat. Meski begitu, garisnya akan lebih ber-aliasing (bertangga). Teknik ini juga punya batas seberapa jauh ia bisa dipakai.
  • Kaburkan lalu ambangkan gambar (metode yang sangat mirip dengan 'dilate' atau 'erode' morfologis) sehingga garis setebal satu piksel jadi sekitar 300% lebih tebal. Sekarang setelah di-resize sebesar 1/3, gambarnya akan lebih kecil tetapi garisnya tetap sekuat dan sejelas sebelumnya.
  • Tebalkan garis memakai teknik Thicken morphology. Anda mungkin ingin melakukan resize secara bertahap, menebalkan dan me-resize gambar 50% pada tiap tahap sampai mencapai ukuran akhir. Meski begitu, seiring jarak antargaris menyempit, hasilnya bisa jadi lebih mirip 'gumpalan' daripada gambar garis. Artinya, Anda bisa mendapat masalah yang sebaliknya. Namun menyesuaikan rasio antara penebalan dan resize semestinya memberi hasil yang bisa diterima.
  • Pisahkan tepian garis pada gambar dari area berwarna polos, lalu resize masing-masing dengan metode berbeda (garisnya memakai cara di atas). Setelah itu kedua bagiannya dapat digabungkan kembali, sehingga tepian garis gambarnya terjaga. Hasilnya secara efektif menyerupai efek yang biasa Anda dapat ketika me-resize gambar vektor.
  • Konversikan gambar menjadi gambar vektor, lalu resize. Cara ini bisa merepotkan, tetapi juga bisa memberi hasil terbaik yang mungkin untuk me-resize gambar garis, dengan tepi anti-aliasing (tajam) yang sempurna dan gambar yang jernih.

Kalau Anda menemukan cara lain untuk me-resize gambar garis secara efektif, atau sudah mencoba salah satu teknik di atas, tolong beri tahu saya (dan pengguna IM lainnya).