from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
# Afiş boyutları
width, height = 600, 900
# Koyu ve sisli bir arka plan oluşturmak için gradient fonksiyonu
def create_gradient(width, height, start_color, end_color):
base = Image.new('RGB', (width, height), start_color)
top = Image.new('RGB', (width, height), end_color)
mask = Image.new('L', (width, height))
mask_data = []
for y in range(height):
# Yatay lineer gradient
mask_data.extend([int(255 * (y / height))] * width)
mask.putdata(mask_data)
gradient = Image.composite(top, base, mask)
return gradient
# Sis efekti için beyaz yarı saydam noktalar
def add_fog(image, density=0.07):
draw = ImageDraw.Draw(image)
for i in range(int(width * height * density)):
x = random.randint(0, width)
y = random.randint(0, height)
# Noktaların opaklık düzeyi düşük
draw.ellipse((x, y, x+3, y+3), fill=(255, 255, 255, random.randint(20, 50)))
return image
# Ana afiş oluşturma adımları
background = create_gradient(width, height, (20, 20, 20), (50, 50, 50))
background = background.convert("RGBA")
background = add_fog(background, density=0.015) # nispeten hafif sis
# Afiş üzerine metin ekleme
draw = ImageDraw.Draw(background)
# Yazı tipleri (Eğer sisteminde .ttf dosyası varsa kullanabilirsin, yoksa default font kullanılacak)
try:
title_font = ImageFont.truetype("arial.ttf", 50)
subtitle_font = ImageFont.truetype("arial.ttf", 25)
info_font = ImageFont.truetype("arial.ttf", 20)
except IOError:
title_font = ImageFont.load_default()
subtitle_font = ImageFont.load_default()
info_font = ImageFont.load_default()
# Metinleri tanımlayalım
film_adi = "Sisli Gece"
slogan = "Şeri cinayetler ve sen"
oyuncular = "Danny Paul, Serdal Kaya, Linda Grow"
yonetmen = "Yönetmen: Anna Liyasowa"
# Film adı: Afişin üst kısmında, merkeze yakın yerleştir
title_w, title_h = draw.textsize(film_adi, font=title_font)
draw.text(((width - title_w) / 2, 50), film_adi, font=title_font, fill=(255, 255, 255))
# Slogan: Film adı altında, daha hafif ve esrarengiz bir şekilde
slogan_w, slogan_h = draw.textsize(slogan, font=subtitle_font)
draw.text(((width - slogan_w) / 2, 120), slogan, font=subtitle_font, fill=(200, 200, 200))
# Oyuncular: Afişin alt kısmına yerleştiriyoruz
oyuncu_text = "Oyuncular: " + oyuncular
oyuncu_w, oyuncu_h = draw.textsize(oyuncu_text, font=info_font)
draw.text(((width - oyuncu_w) / 2, height - 150), oyuncu_text, font=info_font, fill=(230, 230, 230))
# Yönetmen bilgisi: Oyuncuların hemen üstüne veya altına ekleyebiliriz
yonetmen_w, yonetmen_h = draw.textsize(yonetmen, font=info_font)
draw.text(((width - yonetmen_w) / 2, height - 120), yonetmen, font=info_font, fill=(230, 230, 230))
# Ekstra kreatif dokunuş: Filmin merkezinde hafif bulanık bir daire veya sis efekti
circle = Image.new('RGBA', (200, 200), (255, 255, 255, 0))
circle_draw = ImageDraw.Draw(circle)
circle_draw.ellipse((0, 0, 200, 200), fill=(255, 255, 255, 40))
circle = circle.filter(ImageFilter.GaussianBlur(radius=10))
background.paste(circle, ((width - 200) // 2, (height - 200) // 2), circle)
# Son dokunuş olarak; görselin üstüne ilave yaratıcı yazı efekti: hafif sisli kenarlar
background = background.filter(ImageFilter.GaussianBlur(radius=1))
# Son resmi kaydet
background.save("sisli_gece_afisi.png")
background.show()