CodeGym /Kurslar /Python SELF AZ /GIF və Şəkillərin işlənilməsinin avtomatlaşdırılması

GIF və Şəkillərin işlənilməsinin avtomatlaşdırılması

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

1. Şəkillərin paket emalının avtomatlaşdırılması

Şəkillərin paket emalı, çoxlu fayl üzərində eyni əməliyyatları yerinə yetirməyə imkan verir və bu, vaxt və səy qənaət edir. Məsələn, əgər bir kataloqda ölçüsünü dəyişmək və ya su nişanı əlavə etmək lazım olan şəkilləriniz varsa, Pillow bir skript yaratmağa imkan verir ki, bu əməliyyatı bütün şəkillərə tətbiq etsin.

Qovluqdakı bütün şəkillərin ölçüsünün dəyişdirilməsi

Bu nümunədə biz input_images qovluğundakı bütün şəkillərin ölçüsünü dəyişəcək və nəticələri output_images qovluğuna saxlayacağıq.


import os
from PIL import Image

input_folder = "input_images/"
output_folder = "output_images/"
new_size = (800, 800)

# Şəkilləri saxlamaq üçün qovluğun mövcud olduğundan əmin oluruq
os.makedirs(output_folder, exist_ok=True)

# input_folder-da hər bir faylı yoxlayırıq
for filename in os.listdir(input_folder):
    if filename.endswith((".jpg", ".jpeg", ".png")):
        image_path = os.path.join(input_folder, filename)
        
        # Şəkli açırıq və ölçüsünü dəyişirik
        with Image.open(image_path) as img:
            resized_img = img.resize(new_size)
            output_path = os.path.join(output_folder, filename)
            
            # Şəkli saxlayırıq
            resized_img.save(output_path)
            print(f"Şəkil {filename} uğurla dəyişdirildi və saxlanıldı.")

Bu skript:

  1. input_images qovluğundakı bütün faylları yükləyir.
  2. Hər bir şəklin ölçüsünü 800x800 pikselə dəyişir.
  3. Dəyişdirilmiş şəkilləri output_images qovluğunda saxlayır.

Şəkillərə su nişanı əlavə etmək

Şəkillərə su nişanı əlavə etmək prosesi asanlıqla avtomatlaşdırıla bilər. Bu nümunədə, hər bir şəkilin sağ alt küncünə mətn şəklində su nişanı əlavə ediləcək.


from PIL import ImageDraw, ImageFont

input_folder = "input_images/"
output_folder = "watermarked_images/"
watermark_text = "© My Company"

# Şəkilləri saxlamaq üçün qovluğun mövcud olduğundan əmin oluruq
os.makedirs(output_folder, exist_ok=True)

for filename in os.listdir(input_folder):
    if filename.endswith((".jpg", ".jpeg", ".png")):
        image_path = os.path.join(input_folder, filename)
        
        # Şəkli açırıq və çəkmə obyekti yaradırıq
        with Image.open(image_path) as img:
            draw = ImageDraw.Draw(img)
            width, height = img.size
            font = ImageFont.truetype("arial.ttf", 24)
            
            # Su nişanı üçün mövqe
            text_width, text_height = draw.textsize(watermark_text, font=font)
            x = width - text_width - 10
            y = height - text_height - 10
            
            # Su nişanı əlavə edirik
            draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
            
            output_path = os.path.join(output_folder, filename)
            img.save(output_path)
            print(f"Şəklə su nişanı əlavə olundu: {filename}.")

Bu skript:

  1. input_images-dən bütün şəkilləri yükləyir.
  2. Şəkilin sağ alt küncünə mətn şəklində su nişanı əlavə edir.
  3. Nəticəni watermarked_images qovluğunda saxlayır.

Şəkillərin PNG formatına çevrilməsi

Bütün şəkilləri bir formata çevirmək də asanlıqla avtomatlaşdırıla bilər. Bu nümunədə bütün şəkilləri PNG formatına çevirəcəyik.


input_folder = "input_images/"
output_folder = "png_images/"

# Şəkilləri saxlamaq üçün qovluğun mövcud olduğundan əmin oluruq
os.makedirs(output_folder, exist_ok=True)

for filename in os.listdir(input_folder):
    if filename.endswith((".jpg", ".jpeg", ".bmp", ".tiff")):
        image_path = os.path.join(input_folder, filename)
        
        # Şəkili açırıq və PNG-ə çeviririk
        with Image.open(image_path) as img:
            base_filename = os.path.splitext(filename)[0]
            output_path = os.path.join(output_folder, f"{base_filename}.png")
            img.save(output_path, "PNG")
            print(f"Şəkil {filename} PNG formatına uğurla çevrildi.")

Bu skript JPEG, BMP və TIFF formatlarından PNG formatına şəkilləri çevirir və onları png_images qovluğunda saxlayır.

2. GIF-animasiyalarla iş

GIF-animasiyalar ardıcıl göstərilən şəkillər ardıcıllığıdır, bu da hərəkət effekti yaradır. Pillow ilə GIF-animasiyalar yarada və redaktə edə, kadrlara dəyişikliklər edə bilmək və ya animasiyanın sürətinə nəzarət etmək olar.

Sadə GIF-animasiyanın yaradılması

GIF-animasiya yaratmaq üçün bir neçə şəkil (kadrlı) hazırlamaq lazımdır, bunlar ardıcıllıqla göstəriləcək. Bu nümunədə frames qovluğundakı şəkillərdən GIF yaradırıq.


# Animasiya üçün şəkillərin siyahısı
frames_folder = "frames/"
frames = []

for filename in sorted(os.listdir(frames_folder)):
    if filename.endswith((".png", ".jpg")):
        frame_path = os.path.join(frames_folder, filename)
        frame = Image.open(frame_path)
        frames.append(frame)

# Kadrlı GIF-animasiyanın saxlanması
frames[0].save("animation.gif", save_all=True, append_images=frames[1:], duration=100, loop=0)

Bu kod:

  1. frames qovluğundakı şəkilləri yükləyir və frames siyahısına əlavə edir.
  2. Bu kadrlardan GIF-animasiya yaradır.
  3. duration=100 parametri hər bir kadrın milisaniyələrdə göstərilmə müddətini təyin edir və loop=0 sonsuz dövrlü oynatmanı müəyyən edir.

GIF-animasiyanın sürətinin dəyişdirilməsi

Animasiyanın sürətini dəyişmək üçün duration parametrinin dəyərini dəyişin.


# Sürəti artırılmış animasiyanın yaradılması
frames[0].save("fast_animation.gif", save_all=True, append_images=frames[1:], duration=50, loop=0)

Bu nümunədə duration=50 istifadə edilib, bu da GIF oynatma sürətini iki dəfə artırır.

Mövcud GIF-ə yeni kadrların əlavə edilməsi

Mövcud GIF-in üzərinə yeni kadrlar əlavə edə və yenilənmiş animasiyanı yadda saxlaya bilərsiniz.


# Mövcud GIF-i açmaq
with Image.open("existing_animation.gif") as gif:
    frames = [frame.copy() for frame in ImageSequence.Iterator(gif)]

# Yeni kadrın əlavə edilməsi
new_frame = Image.open("new_frame.png")
frames.append(new_frame)

# Yenilənmiş animasiyanın saxlanması
frames[0].save("updated_animation.gif", save_all=True, append_images=frames[1:], duration=100, loop=0)

Bu kod new_frame.png adlı yeni kadrı animasiyanın sonuna əlavə edir.

GIF-animasiyadan kadrların çıxarılması

Bəzən GIF-animasiyanı ayrı-ayrı kadrlara bölmək lazım olur. Pillow hər bir kadrlı ayrı-ayrılıqda çıxarmaq və saxlamaq imkanı verir.


from PIL import ImageSequence

# GIF-animasiyanın açılması və kadrların çıxarılması
with Image.open("animation.gif") as gif:
    for i, frame in enumerate(ImageSequence.Iterator(gif)):
        frame.save(f"frame_{i}.png")

Bu kod animasiyadakı hər bir kadrı ayrı-ayrılıqda PNG şəkli kimi saxlayır.

GIF-animasiya ilə tam işləmə və qrup emalı nümunəsi

Sonda qrup emalını avtomatlaşdırma və GIF ilə iş birləşdirən nümunə gətirəcəyik. Qovluqdakı bütün şəkillərdən animasiya yaradıb, hər bir kadrı əlavə etməzdən əvvəl ölçüsünü dəyişirik.


# Şəkillərin yüklənməsi, ölçülərinin dəyişdirilməsi və GIF yaradılması
input_folder = "input_images/"
frames = []
new_size = (400, 400)

for filename in sorted(os.listdir(input_folder)):
    if filename.endswith((".jpg", ".jpeg", ".png")):
        image_path = os.path.join(input_folder, filename)
        with Image.open(image_path) as img:
            resized_frame = img.resize(new_size)
            frames.append(resized_frame)
1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Mürəkkəb Şəkil Əməliyyatları
Mürəkkəb Şəkil Əməliyyatları
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION