1. Alfa-kanal ilə şəkillərin yaradılması
RGBA (Red, Green, Blue, Alpha) formatı — RGB-nin standart formatının genişlənmiş versiyasıdır və şəffaflığı idarə etmək üçün alfa-kanalı əhatə edir. Bu formatdakı şəkillər şəffaflıq effektlərini tətbiq etməyə imkan verir.
Alfa-kanal ilə şəkilin yüklənməsi
Şəffaflığı dəstəkləyən PNG şəkilləri yüklədikdə, Pillow avtomatik olaraq alfa-kanalı tanıyır.
from PIL import Image
# Alfa-kanal ilə şəkilin açılması
image = Image.open("transparent_image.png")
print(image.mode) # Alfa-kanal olan şəkillər üçün 'RGBA' qaytarmalıdır
Əgər şəkil artıq alfa-kanala malikdirsə, o, RGBA
formatında açılır. Əks halda, convert()
funksiyasından istifadə edərək onu çevirmək mümkündür.
Şəkili RGBA formatına çevirmək
Əgər şəkildə alfa-kanal yoxdursa, onu RGBA rejiminə çevirərək əlavə etmək olar.
# Şəkili RGBA formatına çevirmək
image = image.convert("RGBA")
2. Şəffaf fon yaratmaq
Bəzən tamamilə şəffaf bir fon yaradaraq üzərində şəkil çəkmək və ya digər elementlər əlavə etmək lazım olur. Bunun üçün RGBA rejimində yeni bir şəkil yaradıb, onu tamamilə şəffaf rənglə doldururuq.
# Şəffaf fonlu görüntü yaratmaq
transparent_image = Image.new("RGBA", (500, 500), (255, 255, 255, 0))
transparent_image.save("transparent_background.png")
Bu nümunədə 500x500 piksel ölçüdə şəffaf fona malik bir görüntü yaradılır. (255, 255, 255, 0)
rəngi, alfa-dəyəri 0 (tamamilə şəffaf) olan ağ rəng deməkdir.
3. Şəffaflığın şəkilə tətbiqi
Bəzən bütün şəklin şəffaflığını dəyişdirmək lazım olur. Bunu hər bir pikselin şəffaflığına nəzarət etməyə imkan verən putalpha()
metodu ilə etmək olar.
Şəklin şəffaflıq səviyyəsinin qurulması
putalpha()
metodu bütün şəklin şəffaflıq səviyyəsini təyin etməyə imkan verir. Alfa-kanalın dəyəri 0-dan (tamamilə şəffaf) 255-ə (tamamilə qeyri-şəffaf) qədər dəyişə bilər.
# Şəklin şəffaflıq səviyyəsinin qurulması
image.putalpha(128) # Yarım şəffaflıq təyin edir
image.save("semi_transparent_image.png")
Bu kod alfa-kanalın dəyərini 128-ə (255-in yarısı) təyin edərək şəkli yarım şəffaf edir.
4. Şəffaflıq üçün maskaların tətbiqi
Maska — qara-ağ təsvir deməkdir. Burada ağ sahələr (255 dəyəri) tam görünür, qara sahələr (0 dəyəri) tam şəffafdır. 0-dan 255-ə qədər olan dəyərlər şəffaflığın gradientini yaradır.
Maskanın təsvirə tətbiqi
# Təsvir və maskanın yüklənməsi
image = Image.open("foreground.png").convert("RGBA")
mask = Image.open("mask.png").convert("L") # Maskanı boz çalarlarda yükləyirik
# Şəffaflıq üçün maskanın tətbiqi
image.putalpha(mask)
image.save("masked_image.png")
Bu nümunədə mask.png
maskası foreground.png
təsvirinə tətbiq olunur. Maskanın ağ sahələri təsviri tam görünən edir, qara sahələr şəffaf edir, boz sahələr isə yarı şəffaf edir.
5. Şəffaflığı nəzərə alaraq şəkillərin birləşdirilməsi
Pillow bir şəkli başqasının üzərinə qoymağa imkan verir, alfa-kanalı nəzərə alaraq. Bu, şəkillərin birləşdirilməsi və overlay effektlərinin yaradılması üçün faydalıdır.
Bir şəkli digərinin üzərinə qoymaq
Deyək ki, bizdə bir fon şəkli və şəffaf sahələri olan bir şəkil var ki, biz onu fonun üzərinə qoymaq istəyirik.
# Fon şəkilini və overlay üçün şəkli yükləmək
background = Image.open("background.jpg").convert("RGBA")
overlay = Image.open("overlay.png").convert("RGBA")
# overlay-i background-un üzərinə (50, 50) koordinatlarında qoymaq
background.paste(overlay, (50, 50), overlay)
# Nəticəni yadda saxlamaq
background.save("overlay_result.png")
Burada overlay
— şəffaflığı olan şəkildir ki, o background
üzərinə (50, 50)
koordinatlarında qoyulur. paste()
çağırışında üçüncü arqumentin (mask kimi şəkil) istifadəsi overlay zamanı şəffaf sahələri nəzərə almağa imkan yaradır.
6. Alfa-kanal üzərində nöqtəli idarəetmə
Ayrı-ayrı pikselər üçün şəffaflığı daha detallı idarə etmək üçün putpixel()
və getpixel()
metodlarından istifadə etmək olar, bu metodlar fərdi pikselərin şəffaflığını dəyişməyə imkan verir.
Nümunə: Ayrı-ayrı pikselərin şəffaflığının dəyişdirilməsi
# Şəkli RGBA rejimində açmaq
image = Image.open("example.png").convert("RGBA")
# Şəkilin yuxarı hissəsindəki pikselərin şəffaflığının dəyişdirilməsi
width, height = image.size
for x in range(width):
for y in range(int(height / 2)): # Yuxarı yarısı
r, g, b, a = image.getpixel((x, y))
image.putpixel((x, y), (r, g, b, int(a * 0.5))) # Yarı şəffaf piksel
image.save("pixel_transparency_example.png")
Bu kod şəkilin yuxarı yarısını yarı şəffaf edir. Hər pikselin rəng dəyərini əldə etmək üçün getpixel()
istifadə edirik, daha sonra alfa-kanalı dəyişirik və yenilənmiş pikseli putpixel()
ilə geri yazırıq.
7. Nümunələr
Alfa-kanal və şəffaflıqla tam iş nümunəsi
Bütün metodları bir yerə yığırıq və şəffaf fonlu bir şəkil yaradıb, onun üzərinə mətn və yarımşəffaf qrafik elementlər əlavə edirik.
from PIL import Image, ImageDraw, ImageFont
# Şəffaf fonlu şəkil yaradılması
image = Image.new("RGBA", (500, 500), (255, 255, 255, 0))
draw = ImageDraw.Draw(image)
# Yarımşəffaf düzbucaqlının çəkilməsi
draw.rectangle((50, 50, 450, 150), fill=(255, 0, 0, 128)) # Qırmızı, 50% şəffaflıqla
# Yarımşəffaf dairənin çəkilməsi
draw.ellipse((50, 200, 450, 400), fill=(0, 0, 255, 128)) # Mavi, 50% şəffaflıqla
# Şəffaflığı olan mətnin əlavə edilməsi
font = ImageFont.truetype("arial.ttf", 36)
draw.text((100, 50), "Hello, World!", font=font, fill=(255, 255, 255, 128))
# Nəticənin saxlanılması
image.save("alpha_channel_example.png")
Bu nümunə şəffaf fonlu bir şəkil, yarımşəffaf qırmızı düzbucaqlı, mavi dairə və yarımşəffaf mətn yaradır. Bu metod peşəkar tərtibatlı şəkillər yaratmaq üçün istifadə edilə bilər, fon üzərində yerləşən elementlərlə.
Şəffaflıq və alfa-kanalın praktik tətbiqi
- Loqotiplərin və su nişanlarının yaradılması: Alfa-kanal loqotipləri və su nişanlarını yarımşəffaf etmək imkanı yaradır ki, bu da onları həm gözə çarpar edir, həm də narahat etmir.
- İnterfeys dizaynı: Şəffaf elementlər interfeyslərdə örtüklər və düymələr üçün tez-tez istifadə edilir.
- Kolajlar və kompozisiyalar: Şəffaflıqla iş bir-birinin üzərinə hamar şəkildə yerləşdirilən mürəkkəb kompozisiyaları yaratmağa imkan verir.
GO TO FULL VERSION