CodeGym /Kurslar /Python SELF AZ /Alfa kanala və şəffaflığa dair iş

Alfa kanala və şəffaflığa dair iş

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

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()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

  1. 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.
  2. İnterfeys dizaynı: Şəffaf elementlər interfeyslərdə örtüklər və düymələr üçün tez-tez istifadə edilir.
  3. Kolajlar və kompozisiyalar: Şəffaflıqla iş bir-birinin üzərinə hamar şəkildə yerləşdirilən mürəkkəb kompozisiyaları yaratmağa imkan verir.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION