Forumlar > Atölye > Yazılım Geliştirme (Python Imaging Library (PIL) örnek ve uygulamaları)
osx kullanıcısının resmi

osx

Kayıt: 26/04/2007

Re: Python Imaging Library (PIL) örnek ve uygulamaları

-Benek etkisi

# -*- coding: cp1254 -*-
import Image,ImageDraw,ImageFilter,ImageChops

deger       = 4
aralik      = deger*2
kare        = 0
grafik      = "S30100072.JPG"
tur         = "elips"                   # veya "dikdörtgen
kaplama_rengi=(255,0,255)               #"#000000"

grafik=Image.open(grafik)               #grafik açıldı.
grafik      = grafik.filter(ImageFilter.BLUR)   #doğru renk tahmini için yumuşatma etkisi.
boyut       = grafik.size               #grafiğin boyutu belirlendi.
yeni=Image.new("RGB",boyut)             #çizim yapılacak yeni grafik yazırlandı.

boya        = ImageDraw.Draw(yeni)      #"yeni" grafiği çizim fonksiyonlarının kullanımı için hazırlandı.

y_duzlem    = list(xrange(deger,boyut[1],aralik))   #y düzlem aralığı belirlendi:
# yukarida y düzlemi için liste hazırlandı, x düzleminde
# kullanılan xrange fonksiyonu bir kere çalişacaktır fakat
# alt dongu her "x düzlemi dongüsünde" tekrar tekrar çalışacaktır
# bu da performans kaybi demektir, eski kullanim:
##for a in range(deger,boyut[0],aralik):
##    for b in range(deger,boyut[1],aralik):
##          ...
# performans acisindan range fonksiyonu yerine xrange
# fonksiyonu tercih edilmistir -ki bu fonksiyon python 3000'de
# "range" olarak gecer.
   
for a in xrange(deger,boyut[0],aralik): #x düzlem döngüsü.
    for b in y_duzlem:
        renk=grafik.getpixel((a,b))
        if tur=="elips":                #...ise elips çizen fonksiyon: 
            boya.ellipse([(a-deger,b-deger),(a+deger,b+deger)],renk)
        if tur=="dikdörtgen":           #...ise dikdörtgen çizen fonksiyon: 
            boya.rectangle([(a-deger,b-deger),(a+deger,b+deger)],renk)
yeni.save("/forum/python_imaging_library_pil_C3B6rnek_ve_uygulamalarC4B1/sonuc.jpg",quality=90)       # boyanan grafik kaydedildi.

orijinal:

Sonuç:

Top
istihza kullanıcısının resmi

istihza

Kayıt: 26/12/2006

Re: Python Imaging Library (PIL) örnek ve uygulamaları

osx, eline sağlık. Sayende epey zayıf olduğum bir konuyu öğrenme imkanı elde edeceğim... Smile

Top
Melen kullanıcısının resmi

Melen

Kayıt: 18/11/2006

Re: Python Imaging Library (PIL) örnek ve uygulamaları

Python hakkında bilgi sahibi olan yeni birini görmek güzel :mrgreen: Derslerin devamını bekliyoruz. Başka modüllerde dahil :mrgreen:

Top
osx kullanıcısının resmi

osx

Kayıt: 26/04/2007

Re: Python Imaging Library (PIL) örnek ve uygulamaları

Sitelerde belirli yerlere yerleştirilen güvenlik grafiklerini bilirsiniz... bu örnekte rastgele güvenlik grafikleri üreten bir uygulamayı sizlere anlattım.

# -*- coding: cp1254 -*-

import Image,ImageDraw,ImageFont,random

arkaplan    = map(random.randrange,[255,255,255])
# map fonksiyonu ile randrange fonksiyonuna 3 renk
# kanali icin (RGB) deger atmasını istedik.
# python 3000 için kullanımı;
##arkaplan    = list(map(random.randrange,[255,255,255]))
grafik      = Image.new("RGB",(80,20),(arkaplan[0],arkaplan[1],arkaplan[2]))#arkaplan grafiği uluşturuldu

boyama      = ImageDraw.Draw(grafik)
# yukarıda "grafik" boyama fonksiyonları için hazırlandı

font        = ImageFont.truetype("courier.ttf",20) #font dosyası,font boyutu
# yukarıda font yüklendi, "courier.ttf" font
# dosyasının uygulama ile aynı klasörde olması lazım

karakterler = random.sample(["1","2","3","4","5","a","c","d","e","f","g","A","B","C"],  4)
# yukarıda rastgele dört* karakter seçildi, bu karakterler
# for döngüsü ile "grafik"e yazılacak.

artan       = 0 #karakter arası boşluğu tutan değişken...
for x in karakterler:
    renk    = map(random.randrange,[255,255,255]) #her döngüde rastgele renk (R,G,B)
    boyama.text((artan, 0),x, font=font,fill=(renk[0],renk[1],renk[2])) #Boyama işlemi
    artan   = artan+20 #boşluk
grafik.save("sonuc.bmp")
# grafik kaydedildi.

yukarıdaki uygulamayı geliştirebilirsiniz, konumu da rastgele belirlenir hale getirebilirsiniz mesela...

Sonuç:

Top
Melen kullanıcısının resmi

Melen

Kayıt: 18/11/2006

Re: Python Imaging Library (PIL) örnek ve uygulamaları

Denedim ve çalışıyor. Cool Özgürlükiçin forumunda çıkardıkları e-dergide bi ihtimal django dersleri verebilrim diyen birini görmüştüm. Djangodan da çaksak pythonla güzel bir web sitesi yapardık. Yada başka başka şeyler Laughing out loudLaughing out loud

Top
osx kullanıcısının resmi

osx

Kayıt: 26/04/2007

Re: Python Imaging Library (PIL) örnek ve uygulamaları

ayrıca: ilk örnek 2007 yılında yazıldı, açıklamalarsa bugün yazıldı.

Bir metin belgesindegi rakamları grafiğe dökmek:
Bu uygulama ile bir metin dosyasındaki rakamların grafiğini alabilirsiniz, grafiğin genişliği metin belgesindeki rakamların sayısının 10 katı olacaktır.

# -*- coding: cp1254 -*-
import Image,ImageDraw


dosya   = open("/forum/python_imaging_library_pil_C3B6rnek_ve_uygulamalarC4B1/veri.txt","r")  #sayilarin bulundugu yazı dosyası
okunan  = dosya.read()          #dosya okunuyor...
renk    = 230,150,150           #arka plan çizgi rengi
yeni    = Image.new("RGB",(len(okunan)*10,100),(255,255,255))
# yukarıda çizim yapılacak grafik hazırlanmıştır.
# çözünürlük tespiti //x düzlemi //:(len(okunan),
# kullanımı:(GRAFİK_TÜRÜ,(ÇÖZÜNÜRLÜK),(ARKAPLAN_RENGİ))

cizim   = ImageDraw.Draw(yeni)
boyut   = yeni.size
# oluşturulan grafiğin boyutu alınıyor...

# grafiğin arka planındaki kareler çiziliyor:
for x in range(0,boyut[0],10):  #yatay çizgiler...
    cizim.line([(x,0),(x,boyut[1])],renk)
for y in range(0,boyut[1],10):  #dikey çizgiler.
    cizim.line([(0,y),(boyut[0],y)],renk)

l=1
x=0    
for a in range(len(okunan)):
    l=-1*l
    k0=x,100-(int(okunan[a])*10)#eger okunan "5" ise yükeseklik: "50" piksel
    k1=x-10,100-(int(okunan[a-1])*10)# yönünün doğru olması için: 100 - (int(okunan[a-1])*10
    if a<>0:
        cizim.line([(k0),(k1)],(0,0,0))
    x=x+10
yeni.save("/forum/python_imaging_library_pil_C3B6rnek_ve_uygulamalarC4B1/sonuc.gif")          #çizilen grafik gif formatında kaydedildi // png, bmp, jpg...

Yukarıdaki kodun iyileştirmeye ihtiyacı var...

veri.txt dosya içeriği:
3141592653589793238462643383279502884

Sonuç:

Top