TEKNOLOJİ 7 Kasım 2017
35b OKUNMA     754 PAYLAŞIM

Resim Depolarken Büyük Kolaylık Sağlayan Dosya Sıkıştırma Yöntemi: JPEG

Sözlük yazarı "sleepy99", JPEG üzerine kapsamlı bir anlatımda bulunmuş.


jpeg mevzusunun hala düzgün anlaşılamaması nedeniyle gecenin bir yarısı bana bu çeviriyi yaptıran sorulardır. çekilen resimleri %100 kalite ile yollayan, bunların kalitesini %70'lere çekmeyerek üç kat süre nette kalmama neden olan davranışa tepkidir.


1) jpeg nedir?

- jıpek jeypeg diye okunabilir. açılımı "joint photographic experts group"tur ve bu isim standartı üreten komitenin adıdır. hem grey-scale denilen resimleri hem de full-color resimleri sıkıştırmak için üretilmiştir. sadece sabit görüntüleri sıkıştırır (ki animasyonlar için gif kullanırız) lakin "mpeg" de bu elemanın yakın arkadaşıdır. kayıplı bir formattır. orijinal fotoğraf üzerinde gerçekleşen kayıplar çoğu zaman insan gözünü rahatsız etmez. (tabi compression'un suyunu çıkarıp %50-60'lara dayamadığınız sürece) ve bu format insan gözüne yönelik olarak üretilmiştir. eğer bilgisayar vb. bir aletle görüntü analizi yapacaksanız kullanmanız tavsiye edilmez.

en güzel yanlarından biri, sıkıştırma oranını değiştirerek görüntü kalitesi/dosya boyutu oranını makul bir düzeyde tutarsınız. görüntü kalitesini hiç umursamayan bir insansanız (binlerce resmi arşivlemek için kullanırken örneğin) inanılmaz bir dosya boyutu farkı yaratılabilir. lakin bu kadar kasmadan makul bir oran ile süper bir hard disk kurtarıcısıdır. decode ederken daha hızlı çalışan algoritmalar resmin daha kötü gözükmesini sağlar.

2) niye jpeg kullanayım?

- ne kadar yaygın olarak kullanıldığının yanında, iki önemli nedeni vardır.

a) dosyaların boyutu çok küçültür b) 8 bit/pixel yerine 24 bit/pixel'lik resimlerle çalışabilirsiniz.

2 megabaytlık bir resmin zınk diye 100 kb'a inmesi dosya transferi sırasında büyük kolaylık da sağlar (bir dosya için sorun yok ama 2000 tane resim geçmeniz gerektiğini düşünün- 4 gigabyte'a karşılık 200 megabyte) jpeg dosyaları gif dosyalarına göre daha yavaş açılır. decode ederken kullanılan algoritmalar bilgisayarı diğer basit dosya formatlarına göre daha fazla meşgul eder. ancak bu bekleme süresi, (hard diskte kaplanan alan ve dosya transferi için harcanan zaman dikkate alındığında) çok iyi bir alternatiftir.

ikinci seçeneğe gelirsek: gif dosyaları 8 bit/pixel'lik bilgi içerir (yani 256 veya daha az renk), jpeg'ler ise 24 bit/pixel'lik (yani 16 milyon renk) bilgi saklayabilirler. hele jpeg2000'ler çıkarken gif'lerin pabucunu zamanla dama atılacağı düşünülmektedir.

"kayıplı sıkıştırma" ibaresi birçok insanın çekince duymasına neden oluyor. oysa gerçek hayattaki hiçbir imge, gözküremize düştüğü haliyle kağıda dökülemez. hakeza jpeg'ler gif'lere nazaran daha az bilginin yok olmasını sağlar.

3) ne zaman gif ne zaman jpeg kullanayım?

-jpeg formatı gif'leri tamamen piyasadan silebilecek yapıya sahip değil. bazı durumlarda gif kullanmak resim kalitesi/ dosya boyutu vb. açılardan daha yararlı.

jpeg, renkli, canlı, detaylı, greyscale fotoğraflarda oldukça yararlı bir format. oysa birkaç renkten oluşan resimler, basit çizgilerden veya basit çizgi film kareleri konusunda gif çok iyi bir seçimdir. bu tip resimlerde gif, hem daha az bilginin kaybolmasını sağlar hem de daha iyi bir sıkıştırma yapar. resim komplike ve çok renkli hale geldikçe jpeg'in yetenekleri daha çok ortaya çıkar. (zirve fotoğrafları neden hep jpeg sandınız?) basit imgelerden oluşan ikon'lar ise çoğunlukla gif'tir.

jpeg, keskin köşeler konusunda büyük zorluk yaşar. sıkıştırma oranı oldukça düşük düzeyde tutulmadığı taktirde resimde bulanıklıklar oluşur. scanlenmiş fotoğraflarda bu tip keskin köşeler zaten az bulunur, oysa gif'lerde bu çok yaygındır. jpeg resminin içine yazı yazmak istiyorsanız, mecbur kalmadıkça bunu yapmayın. bunun yerine istediğiniz metni dosyaya "comment" olarak yazın. yeni nesil resim açıcılar comment gösterimini destekliyor. jpeg, yazı karakterlerinin kö$elerini görünce sıkılacaktır.

siyah beyaz resimleri asla jpeg yapmayın. ($uan denedim aynı resim, renkli jpeg iken 40kb, renkli gif iken 181kb, siyah beyaz jpeg iken 67, siyah beyaz gif iken 14 kb) gray-scale resimlerde jpeg'in verimli olabilmesi için en az 16 gri level'a sahip olmalı. gray-scale'de 256 level'a kadar gif formatı kayıpsızdır, oysa jpeg kayıplıdır.

4) jpeg ne kadar iyi sıkıştırır?

- gerçekten çok iyi düzeyde. full-color resimler normalde 24 bit/pixel data saklar. kayıpsız şekilde en iyi sıkıştırma yapan algoritmalar 2'ye 1 oranında sıkıştırma yapar. jpeg ise çok çok az bir görüntü kaybı ile (saklanacak data miktarını 1-2 bit/pixel'e düşürerek) 10'da 1, hatta 20'de 1'lik sıkıştırma yapabilir. küçük ve orta düzeyli görüntü kayıpları ile 30:1 ve 50:1 oranları görülebilir. önizleme veya arşiv indeksi gibi kalitenin çok önemli olmadığı durumlarda ise 100:1 oranı görülebilir.

karşılaştırma yaparsak, gif sıkıştırma yapabilmek için öncelikle görüntüdeki renk sayısını zınk diye 256 renge düşürür. bu 3'e 1 oranında sıkıştırma sağlar. gif'in içinde, lzw adlı bir sıkıştırma eklentisi de vardır. 5'e 1 oranında sıkıştırma sağlayan bu özellik, komplike resimlerde pek verimli değildir.

grey-scale'daki resimler böyle büyük oranda sıkıştırılamamaktadır. çünkü insan gözü, parlaklığa, renk farkına göre daha duyarlıdır. grey-scale'e sahip bir jpeg'in boyutu, aynı kalitedeki full-colored bir jpeg'e göre %10-25 daha azdır. genel oran 3:1'dir. insan gözünün seçtiği kalite farkı 5:1'den itibaren başlar.

elbette görüntü kalitesi, sahip olduğunuz monitor'e göre de değişir. ekrandaki pixeller küçüldükçe resimdeki bir hatayı fark etme oranınız da düşer.

5) iyi kalitede bir jpeg nedir?

-jpeg sıkıştırıcılarının pek çoğu resim kalitesi ile oynayarak dosya boyutunu değiştirebilmenizi sağlarlar. "resim kalitesi 95" yazdığında bu, resmin %95'inin bilgileri tutulacak anlamına gelmeyebilir. kalite skalası resme göre değişir. hatta jpeg sıkıştırması yapan programlar arasında bile kalite skalası değişim gösterir. paint shop pro'nun kalite 50'si ile photoshop'ın kalite 50'si arasında farklar vardır.

amaç elbette en az hasar ile dosyayı en fazla miktarda sıkıştırabilmektir. full-color bir resme, ijg tipi bir jpeg sıkıştırması yapılırsa, %75'lik kalite en iyi seçimdir. ortalama bir resimde, bu kalitesinin altında, gözle görülebilir hasarlar oluşur. önlem olarak, resmi %75 ile farklı kaydedin eğer gözle görülen hatalar varsa kaliteyi arttırın.

deneysel amaçlar dışında resim kalitesini asla %95'ten yukarıda tutmayın. çok çok az bir kalite farkı olmasına rağmen, %95'lik resim %100 kalitedeki resmin 2-3 katı kadar yer kaplar. eğer image-processing gibi bir i4lem yapmıyorsanız ve %100'lük kalitede bir resim görürseniz, o resmi kaydeden kişi işini bilmiyor demektir. eğer çok küçük bir resminiz varsa veya (önizleme, thumbnail gösterme gibi bir durumda) kalitenin 5-10 arasında olması normaldir, kasmayın.

kaliteyi ne kadar arttırmış olursanız olun, eğer resminizde keskin köşeler varsa, bu köşelerde bulanıklıkların yer alması çok doğaldır. böyle durumlarda dosya boyutunun büyümesini göze alarak "downsampling"i kapatmanız hayrınızadır. örneğin irfanview'da bu seçenek vardır.

internet üzerinde download süresini azaltmak için dosyanın az miktarda kayıplı halde yollanması iyi bir fikirdir. 50 civarındaki kalite internette kabul edilebilirdir. (çevirmenin notu: bu hesap yapılırken de internetin, yazı yazılırkenki hızının dikkate alındığı unutulmamalıdır.)

6) renk nicelendirmesi ne demektir?

- color quantization olarak anılan hadisedir. örneğin 16 milyon renk gösteren bir donanımımız yok, sadece 256 renk görebiliyoruz. resmi gösterebilmek için kasılan bilgisayar bu durumda renkleri elemek zorunda kalıyor.

bu kayıplı operasyon tuhaf bir metoddur ve her resim için mükemmel sonuç elde etmenizi sağlayacak bir algoritma yoktur. 256 rengin gösterilebildiği bir bilgisayar jpeg açtığında color quantization yapmak zorunda kalır. ancak gif'ler en fazla 256 renkten oluşabildiği için renk nicelendirmesi çoktan yapılmıştır. bu resmin hızlı açılması konusunda bir avantaj sağlasa da, resmi kaydeden kişinin bilgisayarının algoritmasının nicelendirme kalitesine güvenmek durumunda kalırız. oysa bizim makinemiz daha iyi bir kuantizasyon yapıyorsa, jpeg dosyası kullanmamız daha iyi bir görüntü kalitesi sağlar. yani ileride daha iyi bir makine alırsak, hard diskimizdeki resim daha iyi gözükecek demektir. oysa resmi kaydeden kişinin makinesi geçmişte kalmıştır.

benzer şekilde bir browser, bir resmi açmaya çalıştığında, daha önceden kuantize edilmiş bir gif'i bir kere daha kendi palette'ine göre kuantize eder. oysa jpeg sadece bir kere kuantize edilmiş olur. (ç.n: bu sorun yeni nesil makineler için önemli değildir.)

"jpeg dosyası gif'e çevrilirse renk kuantizasyonu olmaz" diye yanlış bir kanı mevcuttur. evet gif 256 renktir ve dönüştürme sırasında yeni renk eklenmemelidir. ancak bir gif dosyası decompress edildiğinde ortaya çıkan resimde 256 renk yoktur, binlerce renk vardır. ve jpeg'in sıkıştırma algoritması daha farklı olduğu için ortaya çıkan renkler daha farklı olacaktır.

7) gif dosyasını jpeg'e dönüştürürken nelere dikkat etmeli?

- eğer dikkat edilmezse berbat sonuçlarla karşılaşılabilir. 24 bitlik resimden jpeg'e çevrilen dosya, gif'ten jpeg'e çevrilen resimden her zaman için daha iyidir.

öncelikle jpeg yapılmaması gereken resimleri asla jpeg yapmayın. (bakınız üstteki madde 3) resminiz birkaç renkten oluşan basit bir şey ise bırakın gif olarak kalsın, elleşmeyin.

ikinci olarak, resmin önceki halini öğrenin. jpeg iken gif yapılmış bir resmi yeniden jpeg yapmayın. çünkü her dönüştürme sırasında resminiz zarar görür ve en sonunda patates püresi olur.

üçüncü olarak, köşelerden kurtulun. birçok insan gif resminin etrafına tek renkli bir dikdörtgen çizmekten zevk alır. köşeler konusunda jedi olan gif dosyaları için bu önemli bir sorun teşkil etmese de, jpeg dosyaları söz konusu olduğunda hem zaman hem de disk alanı olarak zararlar ortaya çıkar. atın o border'ları.

son olarak ise, gif dosyasını silmeden önce jpeg'in istediğiniz gibi göründüğünden emin olun. ayrıca dosya boyutlarını kontrol edin. gif olmak için uygun olan bir resim jpeg'e dönüştürüldüğünde daha fazla disk alanı kaplayabilir.

grey-scale resimlerde pek sorun çıkmaz. ancak sıkıştırmadan önce gif'in grey-scale'de olduğunu programa belirtin, yoksa zaman ve disk alanı harcarsınız. kalite için 75 iyidir.

renkli resimler ise daha çetrefillidir. gif'ler sadece 256 renk içerebildiği için algoritmalarındaki insan gözünü yanıltarak sanki resimde 256'dan fazla renk varmış havası yaratırlar. oysa resmi büyütürsek yan yana olan birçok pikselin aslında aynı renk olmadığını bariz bir şekilde farklı renklere sahip olduğunu görürüz. ancak yanılan göz bu iki rengin ortalamasını alarak resimde başka bir renk görür. jpeg, bu tip bir renk kirliliği ile mücadele etmekte zorluk çeker. bunun için, resmi jpeg'e çevirmeden önce smooth etmemiz/ düzleştirmemeiz gerekir. smooth hadisesi ile resimde gözümüzle gördüğümüz ortalama renk belirecek ve jpeg sıkıştırıcısının işi kolaylaşacak, dosya boyutu küçülecektir ve daha iyi resimler ortaya çıkacaktır. birçok jpeg sıkıştırıcısı, gif dosyalarını dönüştürürken smoothing seçeneği sunar.

gif'ten jpeg'e çevrilmiş resimlerin boyutlarının, gerçek resimden jpeg'e çevrilmiş kadar küçük olmasını beklemeyin. ancak iyi kalitede jpeg'e çevrilmiş bir resmin boyutu, gif'in yarısı veya üçte biri kadardır. eğer dosyanın boyutu yarıdan fazla azalmışsa bu, jpeg'e çevirmekle iyi bir iş yapıldığı anlamına gelir. 85'lik görüntü kalitesi ve 10'luk bir smooth ile bir jpeg dönüşümü yapmak başlangıç için iyi bir seçimdir. ancak bu değerlere güvenerek yapılan körü körüne bir dönüşüm sorun yaratabilir.

8) arka arkaya yapılmış sıkıştırma/açma'lar resim kalitesini gittikçe azaltır mı?

- sıkıştırılmış bir resmi decompress yapsak, üzerinde oynama yapsak, ardından tekrar sıkıştırırken, ilk kayıplar dışında bir kaybımız olmasa süper olurdu. lakin gerçek bu değil. ilk ve son resim arasındaki sıkıştırma/açma sayısı arttıkça resim kalitesi de düşer. ilk kullandığınız kalite düzeyinde açıp yeniden sıkıştırırsanız kalite kaybı nisbeten düşük olur. resmi kesip biçmek bir modifikasyon değildir. resim üzerindeki oynalamalardan bahsediyoruz.

eğer resim üzerinde birçok oynama yapacaksanız, resmi (png, tiff, ppm gibi) kayıpsız bir dosya formatında kaydedin. editleyin bir daha save edin. en son haline karar verdiğinizde ise jpeg olarak kaydedin. ileride editleme ihtimaliniz varsa ise, örneğin jpeg dosyasının tiff halinin bir kopyasını bir yerde saklayın, onu açıp düzenleyin.

9) ilerleyen/ progressive jpeg nedir?

- klasik bir jpeg resmi yukarıdan aşağı doğru inen bir resimdir. oysa progressive jpeg, birçok katmandan oluşur. ilk başta açılan katman oldukça düşük kalitelidir. onun ardından, mevcut katmanın üstüne gelen katman resme yeni ayrıntılar ekler ve resmin daha iyi bir kalitede görünmesini sağlar. üst üste katmanlar bindikçe ve en son katman da ortaya çıktığında resmin orijinal hali gözükür.

avantajları:

bazı durumlarda, düşük görüntü kalitesine sahip olsa da, bir resmi hemencecik görmek stratejik olarak önem taşır. zaman geçtikçe görüntü kalitesi daha iyi olur, ancak hızla alınan resim önemli bilgiler verebilir.

eğer modem/ link hattı yavaş ise, kaliteli görüntü gelmeden önce, yaklaşık olarak nasıl bir resmin geleceği görülür, böylece istenmeyen bir resmin dakikalarca beklenmesinin önüne geçilmiş olur.

dezavantajları:

her bir layer yüklendiğinde bilgisayar yeniden bir decompression yapar. bu da mevcut sistemi yavaşlatır. (ç.n: ev bilgisayarları için bu hız farkı hiç önemli değildir)

yani hızlı bilgisayar + yavaş bağlantıprogressive jpeg
yavaş veya hızlı bilgisayar + hızlı bağlantınormal jpeg

progressive jpeg ile normal jpeg arasındaki dönüşümün kayıpsız olabilmesi için özel programlar kullanmak gerekir. aksi halde dosyayı açıp yeniden sıkı$tıran mevcut programlar kayba yol açar.

10) saydam/ transparent jpeg yapılabilir mi?

- hayır. jpeg saydamlığı desteklemiyor ve uzun süre de destekleyecek gibi gözükmüyor. oldukça büyük bir çalışma gerektiriyor. gif'lerle ilgilenebilirsiniz.

11) kayıpsız jpeg olur mu?

-jpeg-ls olarak da adlandırılan bir standart kafaları karıştırıyor. en yüksek kalitede iken bile, her bit'i orijinal resim ile aynı olan bir jpeg resmi olmaz. ancak mecut farklılıklar çıplak gözle fark edilemeyecek düzeydedir. ancak tamamen kayıpsız oldukları söylenemez.

kayıpsız jpeg olarak adlandırılan bu standart full-color resmi 2'ye 1 oranında sıkıştırabilmektedir. jpeg-ls devam eden tonlardaki resimlerde daha iyi sonuçlar verir. palette-color resimlerde ve düşük bit derinlikle resimlerde pek iyi sonuçlar vermez. yine de bu tür jpeg'ler hiçbir zaman yaygınlaşamadı, zira getirisi, götürüsü ile karşılaştırıldığında çok düşük.

12) jpeg sıkıştırması/compression nedir?

- bilindiği gibi 2 tür sıkıştırma vardır, kayıplı ve kayıpsız. teknik olarak önemli resim dosyaları ve/veya metin içeren dosyalar kayıpsız olarak sıkıştırılır. bir metindeki bir cümlenin bile bozuk olması kabul edilebilir bir durum değildir. oysa konu fotoğraflar olduğunda kayıplı sıkıştırma makul bir seçenektir.

kayıpsız sıkıştırmada uzunluk hesabı, huffman kodlaması, aritmetik kodlama, lz-77, lzw gibi pek çok seçenek vardır. kayıplı sıkıştırmanın, jpeg bölümünü şöyle anlatabiliriz..

renk transformasyonu:

ne dedik jpeg sıkıştırması, 24 bitlik renkli ve 8 bitlik grey-scale resimler için düzenlenmiştir. rgb (kırmızı, ye$il ve mavi) formatındaki resimler, 24 bit'lik bilgiyi 8'er bit'ten üç renge dağıtır. jpeg ise bunun yerine resmi "yuv" denilen standarda çevirir. burada "y" harfi brightness'ını (parlaklığı), "u" harfi hue'yu (rengi) ve "v" harfi de rengin saturation'ını (doygunluğunu) temsil eder. (hakeza bu sistem pal ve ntsc televizyonlardaki renk sistemine benzer)

insan gözü parlaklığa karşı diğer ikisine göre daha duyarlıdır. bu nedenle renkler düzenlenirken yuv haline getirilmesi, (parlaklığın sıkıştırmaya daha az müsait, rengin ise daha çok müsait olması nedeniyle) önemli bir sıkıştırma oranı/görüntü kalitesi değeri sağlar. çeşitli yuvarlamalar ile renk ve doygunlukla iyice oynanır. (bu soruda renkli resimlerin jpeg dönüşümü anlatılmıştır.)

downsampling:

daha sonra downsampling yapılarak "u" ve "v" değerleri azaltılabilir. hiç downsampling yapılmamışsa bu 4:4:4 olarak, (2 faktörü kullanılarak) yatay decimation yapılmışsa 4:2:2 olarak adlandırılır. (genelde olduğu gibi) yatay ve dikey decimation yapılırsa bu da 4:2:0'dır.

discrete cosine transform (dct) (ayrık kosinüs dönüşümü):

daha sonra resim sol üst köşeden sağ alt köşeye kadar diyagonal olarak işlenmeye başlanır. resim 8 sütun x 8 satırlık bloklara bölünür, blok başına 64 pixel düşer. her bir blokta discrete fourier transformu kullanılarak iki boyutlu "dct" yapılır. bu işlem sonundaki çıktının parlaklığı orijinal resmin parlaklığı ile aynıdır. sadece mevcut parçaların kosinüs toplamları kullanılarak dönüşüm yapılır. dct esnasında sıkıştırma yapılmaz. ancak her matrix'in ortalama rengi analiz edilerek, bu renk 8x8'lik bölgeye yerleştirilir.

quantization:

(100.kere tekrar ettiğimin farkındayım) insan gözü parlaklığa oldukça hassas iken, renklilik konusunda daha az hassastır. bu da renklerin yeniden düzenlenmesiyle çok iyi bir, kayıplı sıkıştırma yapmamızı sağlar. (6. maddede kuantizasyon'un ne olduğundan bahsettik) color quantization/ renk nicelendirmesi ile her bir bloktaki parçalar, belirlediğimiz kalite seviyesi ölçüsünde sabit bir sayıya bölünür ve en yakın tam sayıya yuvarlanır. jpeg dönüşümü sırasındaki en büyük kayıp bu esnada yaşanır. örneğin 8 bit'lik bilgi bu nicelendirme ile 4 bit'e 2 bit'e vs. indirilebilir.

zig zag:

kuantizasyonun ardından zig zag scan denilen hadise gerçekleştirilir. blok, 64 elementten oluşan lineer bir dizi olarak düzenlenir. blok üzerinde ilerleme aşağıdaki şekilde olur. önce sol üst, ardından sağındaki, sonra alt çaprazı, sonra bir altı, ardından üst çaprazı, onun üst çaprazı, sağı, sonra alt çaprazı, onun alt çaprazı.. şeklinde her bir blok üzerinde işleme yapılır. bu işlem ile blok, artan frekansa göre daha kabul edilebilir bir sıra ile dizilmiş hale gelir. benzer frekansa sahip değerler kümelenir. lakin ilk element, diğer 63 elementten ayrı olarak, diziler arası delta modülasyon ile sıkıştırılır. diğer 63'ü ise rle (uzunluğa bağlı kodlama) kullanılarak sıkıştırılır. tek bir elementten ne olur ki diye düşünmeyin, sıkıştırma/ kalite konusunda önem taşıyor.

..........kolon no...................
......0...1...2...3...4...5...6...7..
......_______________________________

s...0:...0...1...5...6..14..15..27..28
a...1:...2...4...7..13..16..26..29..42
t...2:...3...8..12..17..25..30..41..43
i...3:...9..11..18..24..31..40..44..53
r...4:..10..19..23..32..39..45..52..54
....5:..20..22..33..38..46..51..55..60
n...6:..21..34..37..47..50..56..59..61
o...7:..35..36..48..49..57..58..62..63

huffman:

bu işlemlerin ardından kayıpsız bir sıkıştırma yöntemi olan huffman kodlaması yapılır.
(huffman nedir diye sorarsınız kısaca şöyle diyelim. hoffman'da, metin binary kod'a çevrilirken, metin üzerinde en sık kullanılan karakterlere en kısa kodlar verilir, en az kullanılanlara da en uzun kodlar verilir. örneğin f harfi 66 kere geçiyorsa, ona 00 kodunu verebiliriz, e harfi 9 kere geçiyorsa ona 1111 kodunu veririz. böylece sık tekrarlananlar metni iyice küçültür.)

aslında jpeg dönüşümü sırasında arithmetic coding/ aritmetik kodlama da denen bir yöntem uygulanabilir. aritmetik kodlama, matematiksel olarak hoffman'dan daha gelişmiş bir yöntemdir ve dosya boyutunun %5 daha az olmasını sağlar. ancak patent sorunları ve sıkıştırma/açma işleminin daha uzun sürmesi nedeniyle pek tercih edilmemektedir.

kaynak göstermeden çevirimi kullanan forumcu arkadaşlara ayrıca teşekkür ediyorum. http://www.google.com.tr/…&safe=off&pwst=1&filter=0