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:
input_imagesqovluğundakı bütün faylları yükləyir.- Hər bir şəklin ölçüsünü 800x800 pikselə dəyişir.
- Dəyişdirilmiş şəkilləri
output_imagesqovluğ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:
input_images-dən bütün şəkilləri yükləyir.- Şəkilin sağ alt küncünə mətn şəklində su nişanı əlavə edir.
- Nəticəni
watermarked_imagesqovluğ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:
framesqovluğundakı şəkilləri yükləyir vəframessiyahısına əlavə edir.- Bu kadrlardan GIF-animasiya yaradır.
duration=100parametri hər bir kadrın milisaniyələrdə göstərilmə müddətini təyin edir vəloop=0sonsuz 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)
GO TO FULL VERSION