Metode komposit bekerja sangat mirip dengan. tempel() metode. Perbedaan utama adalah cara penerapannya. Ketika. metode paste () diterapkan pada gambar sebagai metode gambar, komposit berfungsi sebagai fungsi dan membutuhkan kedua gambar untuk diteruskan sebagai argumen di dalamnya. Lihat contoh mini di bawah ini
- img1.paste(img2, (100,100))
- Image.composite(img1, img2)
Komposit adalah kata kuno dan menandakan hal-hal fisik atau digital yang terdiri dari beberapa bagian
Dalam ilmu pengetahuan dan teknologi, komposit adalah istilah yang populer dan umum digunakan seperti material komposit, sinyal komposit, bilangan komposit, dan gambar komposit. Misalnya, pesawat ruang angkasa memiliki perisai panas yang terbuat dari bahan komposit (seperti refraktori berserat yang dapat menahan kondisi entri orbit yang tak terbayangkan). Paten Google)
Komposit berasal dari akar Latin com (dengan, bersama-sama) + posit (posisi)
Bagaimanapun, kembali ke metode komposit untuk menempelkan gambar. . composite() metode memiliki beberapa kelemahan dari yang ditunjukkan sebelumnya. tempel() metode
Kelemahan metode komposit
- Kedua gambar harus berukuran sama untuk metode komposit
- Kedua gambar harus memiliki mode yang sama untuk metode komposit
- Metode tempel memiliki argumen kotak yang memungkinkan penetapan koordinat sudut kiri atas gambar yang sedang ditempel terkait dengan gambar dasar
Meskipun kami dapat menempelkan gambar berukuran lebih kecil pada gambar yang lebih besar, hal ini tidak dapat langsung dilakukan dengan metode komposit. Selain itu, kedua gambar harus dalam mode warna yang sama seperti RGB, RGBA, RGBa, L, LA, 1 dll. Situasi ini ditoleransi dalam mode tempel sehingga jika gambar yang ditempelkan dalam mode yang berbeda, itu akan diubah ke mode gambar dasar secara otomatis
Image_ modul perpustakaan pemrosesan gambar Python Pillow (PIL) menyediakan putalpha() untuk menambahkan saluran alfa ke gambar
Artikel ini menjelaskan konten berikut
- Cara menggunakan im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 0
- Atur transparansi seragam di seluruh permukaan
- Buat saluran alfa dengan im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 1
- Gunakan gambar yang ada sebagai saluran alfa
Silakan merujuk ke artikel berikut untuk pemasangan dan penggunaan dasar Bantal (PIL)
- Cara menggunakan Bantal (PIL. Perpustakaan Pencitraan Python)
Impor Image dari im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 3 dan muat gambar aslinya
im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 1 dan im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 5 digunakan untuk menggambar bentuk dan membuat saluran alfa. Mereka dapat dihilangkan jika file gambar dibaca dan digunakan sebagai saluran alfa
from PIL import Image, ImageDraw, ImageFilter im_rgb = Image.open('data/src/lena.jpg')
sumber.
Tautan Bersponsor
Cara menggunakan im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 0
Parameter putalpha() hanya im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 8. Karena secara harfiah menempatkan lapisan saluran alfa ke gambar asli
Jika im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') _9 dari gambar aslinya adalah im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 0 (8 bit x 3. penuh warna) atau im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 1 (8 bit x 1. hitam dan putih), saluran alfa baru ditambahkan, dan jika im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 2 atau im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 3, saluran alfa asli diperbarui
Ditentukan oleh konstanta
Ketika nilai integer 8 bit (im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) _4 hingga im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 5) diatur ke im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 8, transmisi menurut nilai diatur di seluruh permukaan
im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 4 berarti 100% transparansi, im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 5 berarti 0% transparansi (tidak ada transparansi)
Ditentukan oleh objek Gambar
Jika Anda menyetel objek Image dengan ukuran yang sama seperti gambar aslinya di im_rgba = im_rgb.copy() im_rgba.putalpha(im_a) im_rgba_crop = im_rgba.crop((140, 50, 260, 170)) im_rgba_crop.save('data/dst/pillow_putalpha_circle.png') 0 (skala abu-abu 8-bit) ke im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 8, Anda dapat menyetel saluran alfa ke berbagai bentuk
Seperti dalam kasus konstan, im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) _4 berarti 100% transparansi, im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) 5 berarti 0% transparansi (tidak ada transparansi)
Atur transparansi seragam di seluruh permukaan
Jika Anda menetapkan nilai bilangan bulat ke alfa, transparansi menurut nilai tersebut akan ditetapkan di seluruh permukaan
Perhatikan bahwa putalpha() menimpa gambar asli, jadi jika Anda ingin mempertahankan gambar asli apa adanya, gunakan yang disalin dengan im_rgba = im_rgb.copy() im_rgba.putalpha(im_a) im_rgba_crop = im_rgba.crop((140, 50, 260, 170)) im_rgba_crop.save('data/dst/pillow_putalpha_circle.png') 5
im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png')
sumber.
Dalam contoh ini, im_rgba = im_rgb.copy() im_rgba.putalpha(im_a) im_rgba_crop = im_rgba.crop((140, 50, 260, 170)) im_rgba_crop.save('data/dst/pillow_putalpha_circle.png') _6 memberikan sekitar 50% transparansi (128/255 ~ 50%)
Tautan Bersponsor
Buat saluran alfa dengan im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 1
Jika Anda ingin menambahkan saluran alfa dengan bentuk sederhana, seperti lingkaran atau persegi panjang, menggambar modul im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 1 berguna. Untuk detail tentang menggambar, lihat artikel berikut. Anda juga bisa menggambar poligon
- Menggambar lingkaran, persegi panjang, garis, dll. dengan Python, Bantal
Gambar lingkaran putih pada latar belakang hitam dan atur ke saluran alfa
im_a = Image.new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255) _
sumber.
im_rgba = im_rgb.copy() im_rgba.putalpha(im_a) im_rgba_crop = im_rgba.crop((140, 50, 260, 170)) im_rgba_crop.save('data/dst/pillow_putalpha_circle.png')
sumber.
Anda dapat menggunakan im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png') 5 untuk menghaluskan batas
im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4))
sumber.
im_rgba = im_rgb.copy() im_rgba.putalpha(im_a_blur) im_rgba_crop = im_rgba.crop((135, 45, 265, 175)) im_rgba_crop.save('data/dst/pillow_putalpha_circle_blur.png')
sumber.
Dalam setiap contoh, bagian luar lingkaran dipangkas menjadi persegi panjang dengan im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4)) 0. Lihat artikel berikut untuk im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4)) 0
- Pangkas sebagian gambar dengan Python, Bantal (pemangkasan)
Gunakan gambar yang ada sebagai saluran alfa
Anda dapat memuat gambar yang ada dan mengaturnya sebagai saluran alfa
Coba gunakan gambar berbentuk kuda hitam putih (contoh gambar scikit. skimage. data. kuda())
Dalam contoh ini, untuk membiarkan gambar berbentuk kuda, gunakan gambar dengan kuda putih dan latar belakang hitam (gambar terbalik)
- Balikkan gambar dengan Python, Bantal (Inversi negatif-positif)
Setelah gambar dibaca oleh im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4)) _2, disesuaikan dengan ukuran gambar yang ditempelkan oleh im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4)) 3, dan mode diubah menjadi im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4)) 4 (skala abu-abu) oleh im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4)) 5