11 Aralık 2009 Cuma

pycairo - gelişmiş resim oluşturma ve işleme

cairo isimli mükmmel bir grafik çizim kütüphanesi var. örnek vermek gerekirse, mozilla tüm sayfa içeriklerini ve dahi kendi arayüzünü bununla çizdiriyor. işte bu güçlü grafik çatısının tabi ki bir de python bağlayıcısı (binding) mevcut. adı pycairo.

kodun içerisinde kısmen de olsa kullandığım için bilgi vermek istiyorum. pil (python imaging library) adı altında bir başka kütüphan daha mevcut python altında grafik ile ilgili. ama bu çizimden ziyade resim işlemleri, efektler ve tip dönüşümleri üzerine çalışıyor.

örneğimizde, pycairo'yu kullanarak, bir metin dosyasındaki (yazı.txt) metin alınıp efektler uygulanarak çizdiriliyor. daha sonra bu çizdirilen resim bir dosya olarak kaydediliyor.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cairo
import Image

ekranx = 1024
ekrany = 768
fontsize = 20

def main():
golge()

def goster():
i = Image.open("o.png")
i.show()

def golge():
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, ekranx, ekrany)
c = cairo.Context(surface)

c.set_source_rgba (0.1, 0.5, 0.7, 1)
c.paint_with_alpha (1)
c.fill()

f = open("yazı.txt", "r")
yazi = f.read()
c.select_font_face("meta bold turk", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
for i in range(fontsize, fontsize*2):
c.move_to(0, fontsize*4 - i)
c.set_source_rgba(0, 0, 0, 0.001*i)
c.set_font_size(i)
c.show_text(yazi)
c.move_to(0, fontsize*2)
c.set_source_rgba(1, 1, 1, 1)
c.set_font_size(fontsize*2)
c.show_text(yazi)

c.set_line_width(fontsize/10)
c.move_to(0, fontsize*2)
c.line_to (ekranx, fontsize*2)
c.set_source_rgba(1, 1, 1, 1)
c.stroke()

surface.write_to_png ("o.png")
goster()


if __name__ == '__main__':
main()



cairo ile yapılabilecekler gerçekten sınırsız. bu basit örneği sırf temel işlemleri göstermek ve bir fikir verebilmek için yazdım. çok daha eğlenceli ve şaşırtıcı örnekler sadece hayal gücünüze kalmış.

Hiç yorum yok:

Yorum Gönder