Materi
Mengubah ukuran (resize) berarti menghitung nilai piksel di kisi baru yang tidak sama dengan kisi lama. Cara menghitungnya disebut interpolasi, dan Pillow menyebutnya filter resampling. Image.resize(size, resample) menerima size berurutan (lebar, tinggi) dan, menurut dokumentasinya, memakai BICUBIC bila resample tidak ditulis, kecuali pada mode "1" dan "P" yang selalu NEAREST.
Handbook Pillow mendefinisikan NEAREST sebagai memilih satu piksel masukan terdekat dan mengabaikan yang lain, sehingga tidak ada nilai baru yang muncul: tepi tetap tajam dan bertangga. BILINEAR menghitung keluaran dengan interpolasi linear dari piksel-piksel di sekitarnya, sehingga muncul nilai antara dan tepi menjadi halus. NEAREST cocok untuk citra yang nilainya berupa kode — piksel-art, topeng biner, peta label — karena nilai antara di situ tidak bermakna; BILINEAR dan BICUBIC cocok untuk foto.
Memperbesar dengan faktor bulat memakai nearest bisa dikerjakan numpy sendiri: np.repeat mengulang setiap elemen sepanjang satu sumbu, jadi mengulang di sumbu baris lalu di sumbu kolom memperbesar citra tanpa Pillow. Mengecilkan dua kali secara kasar cukup dengan citra[::2, ::2].
import numpy as np
from PIL import Image
papan = np.array([[0, 255], [255, 0]], dtype=np.uint8) # papan catur 2 x 2
tajam = Image.fromarray(papan).resize((4, 4), Image.NEAREST)
halus = Image.fromarray(papan).resize((4, 4), Image.BILINEAR)
print(np.unique(np.array(tajam))) # hanya 0 dan 255
print(len(np.unique(np.array(halus))) > 2) # True: ada nilai antara