Python Yastık - Hızlı Kılavuz

Günümüz dijital dünyasında çok sayıda dijital görüntü ile karşılaşıyoruz. Python programlama dili ile çalışmamız durumunda, dijital görüntülere görüntü işleme yetenekleri eklemek için çok sayıda görüntü işleme kitaplığı sağlar.

En yaygın görüntü işleme kitaplıklarından bazıları şunlardır: OpenCV, Python Imaging Library (PIL), Scikit-image, Pillow. Bununla birlikte, bu eğiticide, yalnızcaPillow module ve bu modülün çeşitli yeteneklerini keşfetmeye çalışacağız.

Yastık, PIL (Python Görüntü Kitaplığı) üzerine inşa edilmiştir. PIL, Python'da görüntü işleme için önemli modüllerden biridir. Ancak, PIL modülü 2011'den beri desteklenmemektedir ve python 3'ü desteklememektedir.

Yastık modülü daha fazla işlev sağlar, tüm büyük işletim sistemlerinde çalışır ve python 3 için destek sağlar. "Jpeg", "png", "bmp", "gif", "ppm", "tiff" gibi çok çeşitli görüntüleri destekler. Yastık modülünü kullanarak dijital görüntüler üzerinde neredeyse her şeyi yapabilirsiniz. Nokta işlemleri, yerleşik evrişim çekirdeklerini kullanarak görüntüleri filtreleme ve renk alanı dönüştürmeleri dahil olmak üzere temel görüntü işleme işlevlerinin yanı sıra.

Resim Arşivleri

Python Görüntüleme Kitaplığı, görüntü arşivleme ve toplu işleme uygulamaları için en uygunudur. Python yastık paketi, küçük resimler oluşturmak, bir formattan diğerine dönüştürmek ve resimleri yazdırmak vb. İçin kullanılabilir.

Görüntü Ekranı

PythonWin ve diğer Windows tabanlı araç takımları ve diğer birçok Grafik Kullanıcı Arabirimi (GUI) araç takımıyla kullanılabilen Tk PhotoImage, BitmapImage ve Windows DIB arabirimini kullanarak görüntüleri görüntüleyebilirsiniz.

Hata ayıklama amacıyla, görüntüyü diske kaydetmek için harici görüntüleme yardımcı programını çağıran bir show () yöntemi vardır.

Görüntü işleme

Yastık kütüphanesi, tüm temel görüntü işleme işlevlerini içerir. Görüntüyü yeniden boyutlandırma, döndürme ve dönüştürme yapabilirsiniz.

Yastık modülü, daha sonra istatistiksel analiz ve otomatik kontrast geliştirme için kullanılabilecek histogram yöntemini kullanarak bazı istatistik verilerini görüntüden çekmenize olanak tanır.

Bu bölümde yastık paketini bilgisayarınıza nasıl kuracağınız anlatılmaktadır.

Yastık paketini kurmak, özellikle pip kullanarak kuruyorsanız çok kolaydır.

Pip kullanarak Pillow kurulumu

Pip kullanarak yastığı kurmak için, komut isteminizde aşağıdaki komutu çalıştırmanız yeterlidir -

python -m pip install pip
python -m pip install pillow

Bilgisayarınızda pip ve pillow zaten kuruluysa, yukarıdaki komutlar basitçe 'requirement already satisfied'aşağıda gösterildiği gibi -

Görüntüyü görüntülemek için yastık kitaplığı, içinde bir görüntü sınıfı kullanıyor. Yastık paketinin içindeki görüntü modülü, görüntüleri yükleme veya yeni görüntüler oluşturma gibi bazı önemli dahili işlevler içerir.

Bir resmi açma, döndürme ve görüntüleme

Görüntüyü yüklemek için, görüntü modülünü yastıktan içe aktarıyoruz ve Image.open(), görüntü dosya adını geçerek.

Yastık modülünü çağırmak yerine, PIL modülünü Python Görüntüleme Kitaplığı (PIL) adı verilen eski bir modülle geriye dönük uyumlu hale getirmek için arayacağız. Bu yüzden kodumuz şununla başlar:“from PIL import Image” onun yerine “from Pillow import Image”.

Ardından, görüntüyü çağırarak yükleyeceğiz. Image.open() function, Görüntü nesnesi veri türünün bir değerini döndürür. Görüntü nesnesinde yaptığımız herhangi bir değişiklik, bir görüntü dosyasına kaydedilebilir.save()yöntem. Kullanarak aldığımız görüntü nesnesiImage.open(), daha sonra bu Görüntü nesnesinde yeniden boyutlandırma, kırpma, çizim veya diğer görüntü işleme yöntemi çağrıları için kullanılabilir.

Misal

Aşağıdaki örnek, bir görüntünün piton yastığı kullanılarak döndürülmesini göstermektedir -

from PIL import Image
#Open image using Image module
im = Image.open("images/cuba.jpg")
#Show actual Image
im.show()
#Show rotated Image
im = im.rotate(45)
im.show()

Çıktı

Yukarıdaki programı Example.py olarak kaydedip yürütürseniz, orijinal ve döndürülmüş görüntüleri standart PNG görüntüleme yardımcı programını kullanarak aşağıdaki gibi görüntüler -

Actual image

Rotated image (45 degrees)

Görüntü Modülünün Nitelikleri

Image sınıfının örneği bazı niteliklere sahiptir. Birkaçını örnek olarak anlamaya çalışalım -

Image.filename

Bu işlev, dosya adını veya görüntünün yolunu almak için kullanılır.

>>>image = Image.open('beach1.jpg')
>>> image.filename
'beach1.jpg'

Görüntü formatı

Bu işlev, görüntü dosyasının 'JPEG', 'BMP', 'PNG' vb. Gibi dosya formatlarını döndürür.

>>> image = Image.open('beach1.jpg')
>>>
>>> image.format
'JPEG'

Image.mode

Görüntünün kullandığı piksel formatını elde etmek için kullanılır. Tipik değerler "1", "L", "RGB" veya "CMYK" dir.

>>> image.mode
'RGB'

Görüntü boyutu

Tuple, görüntünün yüksekliğinden ve ağırlığından oluşur.

>>> image.size
(1280, 721)

Resim Genişliği

Yalnızca görüntünün genişliğini döndürür.

>>> image.width
1280

Image.height

Yalnızca görüntünün yüksekliğini döndürür.

>>> image.height
721

Image.info

Görüntüyle ilişkili verileri tutan bir sözlük döndürür.

>>> image.info
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (300, 300), 'jfif_unit': 1, 'jfif_density': (300, 300), 'exif': b"Exif\x00\x00MM\x00*\x00\x00\x00
....
....
\xeb\x00\x00'\x10\x00\x00\xd7\xb3\x00\x00\x03\xe8"}

Image.palette

Varsa renk paleti tablosunu döndürür.

>>> image.palette

Output above - Yok

Bu bölüm, bir görüntünün Pillow'da nasıl okunacağı ve kaydedileceği dahil olmak üzere konuları ayrıntılı olarak açıklamaktadır.

Bir Görüntüyü Okumak

Yastık kitaplığını kullanarak resim okumak ve yazmak çok basittir. PIL.Image module function.

Sözdizimi

Image.open(fp, mode=’r’)

Nerede

  • fp- Bir dosya adı (dize), pathlib.Path nesnesi veya bir dosya nesnesi. Dosya nesnesi read (), seek () ve tell () yöntemlerini uygulamalı ve ikili modda açılmalıdır.

  • mode - Verilirse, isteğe bağlı bir argüman 'r' olmalıdır.

  • Return value - Bir Görüntü nesnesi.

  • Error - Dosya bulunamazsa veya görüntü açılamaz ve tanımlanamazsa.

Misal

Aşağıda, herhangi bir formattaki bir resmi açacağımız çok basit bir örnek var (Kullanıyoruz.jpg), bir pencerede görüntüleyin ve ardından başka bir dosya biçimiyle (.png).

from PIL import Image
image = Image.open('beach1.jpg')
image.show()
image.save('beach1.bmp')
image1 = Image.open('beach1.bmp')
image1.show()

Yukarıdaki örnekte, Görüntü modülünü PIL kitaplığından içe aktarıyoruz ve ardından Image.open()bir görüntü nesnesi veri türü döndüren diskten bir görüntüyü okumak için işlev. Dosya içeriğine bakarak dosya türünü otomatik olarak belirleyecektir. Okumak içinopen() işlev kabul eder filename(string), bir path object veya bir image(file) nesne.

Yani open () işlevini kullanarak aslında görüntüyü okuyoruz. Image.open (), resmi okuyacak ve resimden ilgili tüm bilgileri alacaktır.

Çıktı

Yukarıdaki programı Example.py olarak kaydedip yürütürseniz, orijinal (.jpg) ve yeniden kaydedilen (.bmp) görüntüleri standart PNG görüntüleme yardımcı programını kullanarak aşağıdaki gibi görüntüler -

Actual image

Resaved image (.bmp)

Bir Görüntüyü Kaydetme

Save () işlevi bir görüntüyü dosyaya yazar. (Open () işlevi) okumak için olduğu gibi, save () işlevi bir dosya adını, bir yol nesnesini veya yazmak için açılmış bir dosya nesnesini kabul eder.

Sözdizimi

Image.save(fp, format=None, **params)

Nerede,

  • fp - Bir dosya adı (dize), pathlib.Path nesnesi veya dosya nesnesi.

  • format- İsteğe bağlı biçim geçersiz kılma. Atlanırsa, kullanılacak format dosya adı uzantısından belirlenir. Dosya adı yerine bir dosya nesnesi kullanılmışsa, bu parametre her zaman kullanılmalıdır.

  • options - Görüntü yazıcısına ekstra parametreler.

  • Return value - Yok

  • KeyError - Çıktı biçimi dosya adından belirlenemezse, bunu çözmek için biçim seçeneğini kullanın.

  • IOError - Dosya yazılamazsa, dosya oluşturulmuş olabilir ve kısmi veriler içerebilir.

Kısaca, yukarıdaki sözdizimi, görüntüyü verilen dosya adı altında kaydedecektir. Biçim belirtilmezse, geçerli dosya adı uzantısına dayanır. Yazara ek talimatlar sağlamak için anahtar kelime seçeneklerini kullanıyoruz.

image.save('beach1.bmp')

Yukarıdaki örnekte, örneğin görüntünün türünü belirlemek için dosyayı dosya uzantısına göre kaydeder - yukarıdaki, mevcut çalışma dizinimizde bir bmp dosyası oluşturacaktır.

Dosya türünü ikinci bir parametre olarak da açıkça belirtebilirsiniz -

image.save('beach1.gif', 'GIF')

Bazen, tüm görüntülerin eşit yükseklik ve genişlikte olması gerekir. Bunu başarmanın bir yolu, yastık kitaplığından thumbnail () işlevini kullanarak tüm görüntülerin bir küçük resmini oluşturmaktır.

Bu yöntem, görüntüyü kendi küçük resim sürümünü içerecek şekilde değiştirir ve görüntünün boyutu verilen boyuttan büyük olmaz.

Yöntem, görüntünün yönünü korumak için uygun bir küçük resim boyutu hesaplar, draft () method dosya okuyucuyu yapılandırmak için (varsa) ve son olarak görüntüyü yeniden boyutlandırır.

Sözdizimi

Image.thumbnail(size, resample=3)

Nerede,

  • Size - Gerekli boyut

  • Resample- İsteğe bağlı yeniden örnekleme filtresi. PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC veya PIL.Image.LANCZOS seçeneklerinden biri olabilir. Atlanırsa, varsayılan olarak PIL.Image.BICUBIC olur.

  • Returns - Yok

Misal

Aşağıdaki örnek, python yastığı kullanılarak bir küçük resmin oluşturulmasını göstermektedir -

from PIL import Image
def tnails():
   try:
      image = Image.open('images/cat.jpg')
      image.thumbnail((90,90))
      image.save('images/thumbnail.jpg')
      image1 = Image.open('images/thumbnail.jpg')
      image1.show()
   except IOError:
      pass
tnails()

Çıktı

Yukarıdaki programı Example.py olarak kaydedip yürütürseniz, varsayılan PNG görüntüleme yardımcı programını kullanarak oluşturulan küçük resmi aşağıdaki gibi görüntüler -

Original image

Output image

Yastık paketi, bir görüntüyü bir başkasının üzerine yapıştırmanıza olanak tanır. Merge () işlevi, bir modu ve bir dizi görüntüyü parametre olarak kabul eder ve bunları tek bir görüntüde birleştirir.

Sözdizimi

Image.merge(mode, bands)

Nerede,

  • mode - Çıktı görüntüsü için kullanılacak mod.

  • bands - Çıktı görüntüsündeki her bant için bir tek bantlı görüntü içeren bir dizi. Tüm bantlar aynı boyutta olmalıdır.

  • Return value - Bir Görüntü nesneleri.

Merge () işlevini kullanarak bir görüntünün RGB bantlarını şu şekilde birleştirebilirsiniz:

from PIL import Image
image = Image.open("beach1.jpg")
r, g, b = image.split()
image.show()
image = Image.merge("RGB", (b, g, r))
image.show()

Yukarıdaki kod parçasını çalıştırırken, orijinal görüntüyü ve görüntüyü aşağıda gösterildiği gibi RGB bantlarını birleştirerek görebilirsiniz -

Giriş resmi

Çıktı görüntüsü

İki görüntünün birleştirilmesi

Aynı şekilde, iki farklı görüntüyü birleştirmek için yapmanız gerekenler -

  • Open () işlevini kullanarak gerekli görüntüler için görüntü nesnesi oluşturun.

  • İki görüntüyü birleştirirken, her iki görüntünün de aynı boyutta olduğundan emin olmanız gerekir. Bu nedenle, her iki görüntünün her boyutunu alın ve gerekirse uygun şekilde yeniden boyutlandırın.

  • Image.new () işlevini kullanarak boş bir görüntü oluşturun.

  • Yapıştır () işlevini kullanarak görüntüleri yapıştırın.

  • Kaydet () ve göster () işlevlerini kullanarak elde edilen görüntüyü kaydedin ve görüntüleyin.

Misal

Aşağıdaki örnek, iki görüntünün python yastığı kullanılarak birleştirilmesini göstermektedir -

from PIL import Image
#Read the two images
image1 = Image.open('images/elephant.jpg')
image1.show()
image2 = Image.open('images/ladakh.jpg')
image2.show()
#resize, first image
image1 = image1.resize((426, 240))
image1_size = image1.size
image2_size = image2.size
new_image = Image.new('RGB',(2*image1_size[0], image1_size[1]), (250,250,250))
new_image.paste(image1,(0,0))
new_image.paste(image2,(image1_size[0],0))
new_image.save("images/merged_image.jpg","JPEG")
new_image.show()

Çıktı

Yukarıdaki programı Example.py olarak kaydedip yürütürseniz, standart PNG görüntüleme yardımcı programını kullanarak iki giriş görüntüsünü ve birleştirilmiş görüntüyü aşağıdaki gibi görüntüler -

Giriş resmi1

Girdi image2

Birleştirilmiş görüntü

Bir görüntünün bulanıklaştırılması, bir görüntüye bir filtre uygulanarak görüntüdeki parazit düzeyini azaltarak yapılabilir. Görüntü bulanıklaştırma, görüntü işlemenin önemli yönlerinden biridir.

ImageFilter classYastık kütüphanesinde birkaç standart görüntü filtresi bulunur. Görüntü filtreleri,filter() method ImageFilter sınıfında tanımlandığı gibi gerekli filtre türüne sahip Image nesnesinin.

Görüntüleri bulanıklaştırmak için kullanılan çeşitli teknikler vardır ve aşağıda belirtilen teknikleri tartışacağız.

  • Basit bulanıklık

  • Kutu bulanıklığı

  • Gauss bulanıklığı

Tüm bu üç teknik, filtreyi görüntülere uygulamak için 'Image.filter ()' yöntemini kullanacak.

Basit bulanıklık

Belirli bir çekirdek veya bir evrişim matrisi ile belirtildiği gibi görüntüye bulanıklaştırma efekti uygular.

Sözdizimi

filter(ImageFilter.BLUR)

Misal

#Import required Image library
from PIL import Image, ImageFilter

#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()

blurImage = OriImage.filter(ImageFilter.BLUR)
blurImage.show()
#Save blurImage
blurImage.save('images/simBlurImage.jpg')

Yürütüldüğünde, yukarıdaki örnek iki standart PNG görüntüleme yardımcı programı penceresi oluşturur (bu durumda Photos app).

Original image

Blurred image

Kutu bulanıklığı

Bu filtrede, parametre olarak 'radius' kullanıyoruz. Yarıçap, bulanıklık değeriyle doğru orantılıdır.

Sözdizimi

ImageFilter.BoxBlur(radius)

Nerede,

  • Radius - Tek yönde kutunun boyutu.

  • Radius 0 - bulanıklaşma olmadığı anlamına gelir ve aynı resmi döndürür.

  • RRadius 1 & minnus; her yönde 1 piksel, yani toplamda 9 piksel alır.

Misal

#Import required Image library
from PIL import Image,
 
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()

#Applying BoxBlur filter
boxImage = OriImage.filter(ImageFilter.BoxBlur(5))
boxImage.show()

#Save Boxblur image
boxImage.save('images/boxblur.jpg')

Çıktı

Yürütüldüğünde, yukarıdaki örnek iki standart PNG görüntüleme yardımcı programı penceresi oluşturur (bu durumda Windows Fotoğraflar uygulaması).

Original image

Blurred image

Gauss Bulanıklığı

Bu filtre aynı zamanda parametre yarıçapını kullanır ve bazı algoritmik değişikliklerle birlikte kutu bulanıklaştırma ile aynı işi yapar. Kısacası, yarıçap değerini değiştirmek, farklı yoğunluklarda 'Gauss bulanıklığı' görüntüleri oluşturacaktır.

Sözdizimi

ImageFilter.GaussianBlur(radius=2)

Nerede,

  • Yarıçap - Bulanıklık yarıçapı

Misal

#Import required Image library
from PIL import Image, ImageFilter

#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()

#Applying GaussianBlur filter
gaussImage = OriImage.filter(ImageFilter.GaussianBlur(5))
gaussImage.show()

#Save Gaussian Blur Image
gaussImage.save('images/gaussian_blur.jpg')

Çıktı

Yürütüldüğünde, yukarıdaki örnek iki standart PNG görüntüleme yardımcı programı penceresi oluşturur (bu durumda Photos app).

Original image

Blurred image

Kırpma, bir görüntünün istenmeyen kısımlarını kaldırmak ve bir görüntüye gerekli özellikleri eklemek için görüntü işlemenin önemli işlemlerinden biridir. Web uygulamalarında görüntü yüklemek için yaygın olarak kullanılan bir işlemdir.

Pillow'daki image sınıfının crop () işlevi, bölümün dikdörtgen olarak kırpılmasını gerektirir. Bir görüntüden kırpılacak dikdörtgen kısım, dört elemanlı bir demet olarak belirtilir ve bir görüntü Nesnesi olarak kırpılan görüntünün dikdörtgen kısmını döndürür.

Misal

Aşağıdaki örnek, bir görüntünün piton yastığı kullanılarak nasıl döndürüleceğini gösterir -

#Import required Image library
from PIL import Image

#Create an Image Object from an Image
im = Image.open('images/elephant.jpg')

#Display actual image
im.show()

#left, upper, right, lowe
#Crop
cropped = im.crop((1,2,300,300))

#Display the cropped portion
cropped.show()

#Save the cropped image
cropped.save('images/croppedBeach1.jpg')

Çıktı

Yukarıdaki programı Example.py olarak kaydedip yürütürseniz, standart PNG görüntüleme yardımcı programını kullanarak orijinal ve kırpılmış görüntüleri aşağıdaki gibi görüntüler -

Gerçek görüntü

Kırpılmış görüntü

Python görüntü işleme kitaplığını kullanarak görüntüler üzerinde çalışırken, daha fazla içgörü elde etmek, görünürlüğünü artırmak veya gereksiniminiz nedeniyle mevcut bir görüntüyü çevirmeniz gereken durumlar vardır.

Yastık kütüphanesinin resim modülü, bir resmi çok kolay çevirmemizi sağlar. Görüntüleri çevirmek için Görüntü modülünden devrik (yöntem) işlevini kullanacağız. 'Transpose ()' tarafından desteklenen en yaygın kullanılan yöntemlerden bazıları şunlardır:

  • Image.FLIP_LEFT_RIGHT - Resmi yatay olarak çevirmek için

  • Image.FLIP_TOP_BOTTOM - Resmi dikey olarak çevirmek için

  • Image.ROTATE_90 - Görüntüyü derece belirterek döndürmek için

Örnek 1: Yatay olarak çevrilmiş Görüntü

Aşağıdaki Python örneği bir görüntüyü okur, yatay olarak çevirir ve orijinal ve çevrilmiş görüntüyü standart PNG görüntüleme yardımcı programını kullanarak görüntüler -

# import required image module
from PIL import Image

# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")

# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)

# Show the original image
imageObject.show()

# Show the horizontal flipped image
hori_flippedImage.show()

Çıktı

Original image

Flipped image

Örnek 2: Dikey Olarak Çevrilmiş Görüntü

Aşağıdaki Python örneği bir görüntüyü okur, dikey olarak çevirir ve orijinal ve çevrilmiş görüntüyü standart PNG görüntüleme yardımcı programını kullanarak görüntüler -

# import required image module
from PIL import Image

# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")

# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)

# Show the original image
imageObject.show()

# Show vertically flipped image
Vert_flippedImage = imageObject.transpose(Image.FLIP_TOP_BOTTOM)
Vert_flippedImage.show()

Çıktı

Original Image

Flipped Image

Örnek 3: Resmi belirli bir dereceye kadar döndürün

Aşağıdaki Python örneği bir görüntüyü okur, belirli bir dereceye kadar döner ve standart PNG görüntüleme yardımcı programını kullanarak orijinal ve döndürülmüş görüntüyü görüntüler -

# import required image module
from PIL import Image

# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")

# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)

# Show the original image
imageObject.show()

#show 90 degree flipped image
degree_flippedImage = imageObject.transpose(Image.ROTATE_90)
degree_flippedImage.show()

Çıktı

Original Image

Rotated Image

Dijital görüntünün çoğu iki boyutlu bir piksel düzlemidir ve bir genişliği ve yüksekliği vardır. Yastık kitaplığındaki Görüntü modülünün bir nitelik boyutu vardır. Bu demet, öğeleri olarak görüntünün genişlik ve yüksekliğinden oluşur. Bir görüntüyü yeniden boyutlandırmak için, genişlik ve yükseklik vererek yastığın görüntü sınıfının resize () yöntemini çağırırsınız.

Yeniden boyutlandırılan resmi yeniden boyutlandırın ve kaydedin

Yeniden boyutlandırılan görüntüyü yeniden boyutlandırma ve kaydetme programı aşağıda verilmiştir -

#Import required Image library
from PIL import Image

#Create an Image Object from an Image
im = Image.open("images/cat.jpg")

#Display actual image
im.show()

#Make the new image half the width and half the height of the original image
resized_im = im.resize((round(im.size[0]*0.5), round(im.size[1]*0.5)))

#Display the resized imaged
resized_im.show()

#Save the cropped image
resized_im.save('resizedBeach1.jpg')

Çıktı

Yukarıdaki programı Example.py olarak kaydedip yürütürseniz, standart PNG görüntüleme yardımcı programını kullanarak orijinal ve yeniden boyutlandırılmış görüntüleri aşağıdaki gibi görüntüler -

Original Image

Resized Image

Bazı çevrimiçi fotoğrafların filigranlı olduğunu fark ettiniz. Filigran kesinlikle resimlerinizi kötüye kullanımdan korumanın en iyi yollarından biridir. Ayrıca, kötüye kullanılmasını önlemek için sosyal medyada paylaşmadan önce yaratıcı fotoğraflarınıza filigran eklemeniz önerilir.

Filigran, genellikle fotoğrafı kimin çektiğini veya fotoğrafın haklarına sahip olduğunu tanımlayan, fotoğrafın üzerine yerleştirilmiş bazı metin veya logodur.

Yastık paketi, resimlerinize filigran eklememizi sağlar. Resmimize filigran eklemek için ihtiyacımız var“Image”, “ImageDraw” ve “ImageFont” yastık paketinden modüller.

'ImageDraw' modülü, 2D grafikleri yeni veya mevcut görüntülerin üzerine çizme işlevselliği ekler. 'ImageFont' modülü, bitmap, TrueType ve OpenType yazı tipi dosyalarını yüklemek için kullanılır.

Misal

Aşağıdaki python programı, python yastığı kullanarak bir görüntüye nasıl filigran ekleneceğini gösterir -

#Import required Image library
from PIL import Image, ImageDraw, ImageFont

#Create an Image Object from an Image
im = Image.open('images/boy.jpg')
width, height = im.size

draw = ImageDraw.Draw(im)
text = "sample watermark"

font = ImageFont.truetype('arial.ttf', 36)
textwidth, textheight = draw.textsize(text, font)

# calculate the x,y coordinates of the text
margin = 10
x = width - textwidth - margin
y = height - textheight - margin

# draw watermark in the bottom right corner
draw.text((x, y), text, font=font)
im.show()

#Save watermarked image
im.save('images/watermark.jpg')

Çıktı

Diyelim ki, giriş resmi aşağıdadır boy.jpg klasör görüntüsünde bulunur.

Yukarıdaki programı çalıştırdıktan sonra, çıktı klasörünü gözlemlerseniz, ortaya çıkan watermark.jpg dosyasını aşağıda gösterildiği gibi üzerinde filigran ile görebilirsiniz -

ImageFilter moduleImage.filter () yöntemiyle kullandığımız önceden tanımlanmış bir filtre kümesi için tanımları içerir. Bu filtreler, görüntünün görünümünü ve hissini değiştirmek için kullanılır.

Misal

Aşağıdaki örnek, bir resmi filtreleme -

from PIL import Image, ImageFilter

im = Image.open('jungleSaf2.jpg')

im1 = im.filter(ImageFilter.BLUR)
im1.show()

im2 = im.filter(ImageFilter.MinFilter(3))
im2.show()

im3 = im.filter(ImageFilter.MinFilter) # same as MinFilter(3)
im3.show()

Yukarıdaki programda, MinFilter()minimum filtre oluşturmak için kullanılan yöntem. Verilen boyutta bir pencerede en düşük piksel değerini seçer.

ImageFilter.MinFilter(size=3)

Nerede,

size - Piksel cinsinden çekirdek boyutu.

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, standart PNG görüntüleme yardımcı programını kullanarak MinFilter ile orijinal görüntüyü, bulanık görüntüyü ve bulanık görüntüyü aşağıdaki gibi gösterir -

Original Image

Blurred Image

Image blurred with mini filter

Filtreler

Yastık kitaplığının mevcut sürümü, aşağıda belirtilen önceden tanımlanmış görüntü geliştirme filtreleri seti sağlar.

  • BLUR

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SHARPEN

  • SMOOTH

  • SMOOTH_MORE

Misal

Aşağıdaki python örneği, görüntüye bulanıklık filtresini uygular ve onu kaydeder ve standart PNG görüntüleme yardımcı programını kullanarak görüntüler -

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow

from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)

#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(BLUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Aynı şekilde image.filter() yöntem, ilgili çıktıları almak için aşağıdaki parametrelerden herhangi birini iletebilirsiniz -

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SMOOTH

  • SMOOTH_MORE

  • SHARPEN

Python img.filter (CONTOUR) yöntemi

Aşağıdaki python örneği verilen görüntüye CONTOUR filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(CONTOUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak orijinal görüntüyü ve filtrelenmiş görüntüyü gösterir -

Original image

Filtered image

Python img.filter (DETAIL) yöntemi

Aşağıdaki python örneği, verilen görüntüye DETAIL filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(DETAIL)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip yürütürseniz, orijinal görüntüyü ve standart PNG görüntüleme yardımcı programını kullanarak filtrelenmiş görüntüyü aşağıdaki gibi gösterir -

Original image

Filtered image

Python img.filter (EDGE_ENHANCE) yöntemi

Aşağıdaki python örneği, verilen görüntüye EDGE_ENHANCE filtresi uygular -

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip yürütürseniz, orijinal görüntüyü ve standart PNG görüntüleme yardımcı programını kullanarak filtrelenmiş görüntüyü aşağıdaki gibi gösterir -

Original image

Filtered image

Python img.filter (EDGE_ENHANCE_MORE) yöntemi

Aşağıdaki python örneği, verilen görüntüye EDGE_ENHANCE_MORE filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE_MORE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip yürütürseniz, orijinal görüntüyü ve standart PNG görüntüleme yardımcı programını kullanarak filtrelenmiş görüntüyü aşağıdaki gibi gösterir -

Original image

Filtered image

Python img.filter (EMBOSS) yöntemi

Aşağıdaki python örneği, verilen görüntüye EMBOSS filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EMBOSS)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak orijinal görüntüyü ve filtrelenmiş görüntüyü gösterir -

Original image

Filtered image

Python img.filter (FIND_EDGES) yöntemi

Aşağıdaki python örneği, verilen görüntüye FIND_EDGES filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(FIND_EDGES)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak orijinal görüntüyü ve filtrelenmiş görüntüyü gösterir -

Original image

Filtered image

Python img.filter (SMOOTH) yöntemi

Aşağıdaki python örneği verilen görüntüye SMOOTH filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SMOOTH)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak orijinal görüntüyü ve filtrelenmiş görüntüyü gösterir -

Original image

Filtered image

Python img.filter (SHARPEN) yöntemi

Aşağıdaki python örneği verilen görüntüye SHARPEN filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak orijinal görüntüyü ve filtrelenmiş görüntüyü gösterir -

Original image

Filtered image

Aşağıdaki python örneği verilen görüntüye SHARPEN filtresi uygular.

Misal

#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Çıktı

Yukarıdaki programı kaydedip çalıştırırsanız, aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak orijinal görüntüyü ve filtrelenmiş görüntüyü gösterir -

Original image

Filtered image

ImageColor modül, tablolarda düzenlenmiş farklı formatta renkler içerir ve ayrıca CSS3 tarzı renk belirleyicilerden RGB demetlerine dönüştürücüler içerir.

Renk İsimleri

ImageColor modülü aşağıdaki dizi formatlarını destekler -

  • #Rgb veya #rrggbb olarak verilen onaltılık renk tanımlayıcıları. Örneğin, # 00ff00 saf yeşili temsil eder.

  • # 00ff00 onaltılık renk, kırmızı değer 0 (% 0 kırmızı), yeşil değer 255 (% 100 yeşil) ve RGB'nin mavi değeri 0 (% 0 mavi).

  • # 00ff00 renk tonu: 0.33, doygunluk: 1.00 ve ayrıca 00ff00'ın açıklık değeri 0.50 olan silindirik koordinat temsilleri (HSL olarak da adlandırılır).

  • Image Color modülü, X Window sistemi ve çoğu web tarayıcısı tarafından desteklenen renklere bağlı olarak yaklaşık 140 standart renk adı sağlar. Renk adları büyük / küçük harfe duyarlıdır.

ImageColor.getrgb () Yöntemi

Bir renk dizesini RGB demetine dönüştürün. Dize ayrıştırılamazsa, bu işlev tarafından bir ValueError istisnası oluşturulur.

Sözdizimi

PIL.ImageColor.getrgb(color)

Nerede,

  • Bağımsız değişkenler: renk - Bir renk dizesi

  • Dönüş Değeri: (kırmızı, yeşil, mavi [, alfa])

örnek 1

from PIL import ImageColor

# using getrgb
img = ImageColor.getrgb("blue")
print(img)

img1 = ImageColor.getrgb("purple")
print(img1)

Çıktı

(0, 0, 255)
(128, 0, 128)

Örnek 2

#Import required image modules
from PIL import Image,ImageColor

# Create new image & get color RGB tuple.
img = Image.new("RGB", (256, 256), ImageColor.getrgb("#add8e6"))

#Show image
img.show()

Çıktı

ImageColor. getcolor () Yöntemi

Bu yöntem getrgb () ile aynıdır, ancak mod değilse RGB değerini gri tonlu bir değere dönüştürür. Grafik komutları şekil çizimini ve metin açıklama rengini veya bir palet görüntüsünü destekler. Dize ayrıştırılamazsa, bu işlev bir ValueError istisnası oluşturur.

Sözdizimi

PIL.ImageColor.getcolor(color, mode)

Nerede,

  • Bağımsız değişkenler - Bir renk dizesi

  • Dönüş Değeri - (gri seviye [, alfa]) veya (kırmızı, yeşil, mavi [, alfa])

Misal

#Import required image modules
from PIL import Image,ImageColor

# using getrgb

img = ImageColor.getrgb("skyblue")
print(img)

img1 = ImageColor.getrgb("purple")
print(img1)

Çıktı

(135, 206, 235)
(128, 0, 128)

‘ImageDraw’modülü, Image Object için basit 2D grafik desteği sağlar. Genel olarak, bu modülü yeni görüntüler oluşturmak, mevcut görüntülere açıklama eklemek veya rötuş yapmak ve web kullanımı için anında grafikler oluşturmak için kullanırız.

Grafik komutları, şekillerin çizimini ve metnin açıklamasını destekler.

  • Bir görüntü, iki boyutlu bir piksel dizisi (resim öğeleri) olacak şekilde iyi düşünülmüş olabilir. Piksel, desteklenen en küçük renk noktasıdır.

  • ImageDraw tarafından kullanılan iki boyutlu koordinat sisteminin orijini, upper left corner görüntünün.

  • Kullandığımız yastık renk şemaları RGB'dir. Renkli RGB gösterimi ve desteği modül tarafından sağlanırImageColor.

  • bitmap, OpenType veya TrueType, metin ek açıklamaları için kabul edilebilir yazı tipleridir.

  • Çizim komutlarının çoğu, komutun uygulanacağı görüntü üzerindeki alanı belirten bir sınırlayıcı kutu parametresi gerektirebilir.

  • Bir koordinat dizisi [(x0, y0), (x1, y1),… (xn, yn)] olarak temsil edilebilir.

  • Bazı çizim komutları için açı değerlerine ihtiyaç duyarız.

Misal

Aşağıdaki python örneği, verilen görüntü boyunca bir çizgi çizer -

#Import required libraries
import sys
from PIL import Image, ImageDraw

#Create Image object
im = Image.open("images/logo.jpg")

#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)

#Show image
im.show()

Çıktı

Yukarıdaki programı Example.py olarak kaydedip çalıştırırsanız, görüntü boyunca bir çizgi çizer ve aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak görüntüler -

Tuval

  • Bir ImageDraw, bir Resmin Yastık ile çekilebilir bir yüzeyidir (yani bir kanvas).

  • ImageDraw.Draw (img), Image parametresi img'nin çizilebilir bir tuval temsilini döndürür. Kanvasın arka planı "img" görüntüsüdür.

Misal

Aşağıdaki python örneği verilen resim üzerine metin çizer -

#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont

# get an image
base = Image.open('images/boy.jpg').convert('RGBA')

# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))

# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)

# get a drawing context
d = ImageDraw.Draw(txt)

# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))

# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)

#Show image
out.show()

Çıktı

'ImageDraw' modülünü kullanarak şekil çizme

ImageDraw modülü, çalışmak istediğiniz görüntü ile önce bir çizim nesnesi oluşturup sonra onu uygulayarak farklı şekiller oluşturmamızı sağlar. 'ImageDraw' modülünü kullanarak çizebileceğimiz yaygın şekillerden bazıları aşağıdaki gibidir -

Hat

Aşağıda, python yastığı kullanarak bir çizgi çizmek için sözdizimi -

draw.line(xy, fill=None, width=0)

line()yöntem, xy ve canvas sınırlama kutusunun sol üst köşesinden sağ alt köşelerine bir çizgi çizer. Çizgi, renk dolgusu kullanılarak doldurulur. Sırasıyla Yok ve 0 varsayılan değerleri isteğe bağlı dolgu ve genişlik parametreleri içindir.

Misal

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)

img.show()

Çıktı

Tutulma

Aşağıda, python yastığı kullanarak bir elips çizmek için sözdizimi -

draw.ellipse(xy, fill=None, outline=None)

ellipse()yöntem, çizim sırasında sınırlayıcı kutu xy ile çevrili elipsi çizer. Şekil, renk dolgusu ve çevresi renkli dış hat kullanılarak doldurulur. Yok varsayılan değerleri, isteğe bağlı dolgu ve genişlik parametreleri içindir.

Misal

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()

Çıktı

Dikdörtgen

Aşağıda, python yastığı kullanarak bir dikdörtgen çizmek için sözdizimi -

draw.rectangle(xy, fill=None, outline=None)

rectangle()yöntem çizimde xy sınırlayıcı kutusu verilen dikdörtgeni çizer. Şekil, renk dolgusu ve çevresi renkli dış hat kullanılarak doldurulur. Yok varsayılan değerleri, isteğe bağlı dolgu ve genişlik parametreleri içindir.

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.rectangle(
   (200, 125, 300, 200),
   fill=(255, 0, 0),
   outline=(0, 0, 0))
img.show()

Çıktı

Çokgen

Aşağıda, python yastığı kullanarak bir dikdörtgen çizmek için sözdizimi -

draw.polygon(seq, fill=None, outline=None)

polygon()yöntem, koordinat sıra konumlarını düz çizgilerle birleştiren bir çokgen çizer. Sıradaki ilk ve son koordinatlar da bir düz çizgi ile bağlanır. Şekil, renk dolgusu ve çevresi renkli dış hat kullanılarak doldurulur. Parametreler dolgu ve anahat isteğe bağlıdır ve varsayılan değerler Yoktur.

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.polygon(
   ((200, 200), (300, 100), (250, 50)),
   fill=(255, 0, 0),
   outline=(0, 0, 0))
img.show()

Çıktı

Python Görüntüleme Kitaplığı (PIL), Görüntü dizileri (animasyon formatları) için bazı temel destek içerir. FLI / FLC, GIF ve birkaç deneysel format desteklenen sekans formatlarıdır. TIFF dosyaları da birden fazla çerçeve içerebilir.

Sıra dosyası açıldığında, PIL sıradaki ilk kareyi otomatik olarak yükler. Farklı çerçeveler arasında hareket etmek için arama ve söyleme yöntemlerini kullanabilirsiniz.

from PIL import Image
img = Image.open('bird.jpg')
#Skip to the second frame
img.seek(1)
try:
   while 1:
      img.seek(img.tell() + 1)
      #do_something to img
except EOFError:
   #End of sequence
   pass

Çıktı

raise EOFError
EOFError

Yukarıda görebileceğimiz gibi, dizi bittiğinde bir EOFError istisnası alacaksınız.

Kitaplığın en son sürümündeki sürücülerin çoğu, yalnızca bir sonraki çerçeveye gitmenize izin verir (yukarıdaki örnekte olduğu gibi), dosyayı geri sarmak için, yeniden açmanız gerekebilir.

Bir dizi yineleyici sınıfı

class ImageSequence:
   def __init__(self, img):
      self.img = img
   def __getitem__(self, ix):
      try:
         if ix:
            self.img.seek(ix)
         return self.img
      except EOFError:
         raise IndexError # end of sequence
for frame in ImageSequence(img):
   # ...do something to frame...

Metnin konumunu, metnin kendisini ve metnin rengini ileterek resimler üzerine metin yazabilirsiniz. Bu yönteme birden fazla başka parametre aktarabiliriz.

Misal

from PIL import Image, ImageDraw

img = Image.open(beach1.jpg')
d1 = ImageDraw.Draw(img)
d1.text((28, 36), "Hello, TutorialsPoint!", fill=(255, 0, 0))
img.show()
img.save("images/image_text.jpg")

Giriş

Çıktı

Yukarıdaki programı Example.py olarak kaydedip çalıştırırsanız, verilen metni üzerine ekler ve aşağıdaki gibi standart PNG görüntüleme yardımcı programını kullanarak görüntüler -

Yazı tipini seçme

Resme yazmak için kullanılan yazı tipini seçmenin birçok yolu vardır. Ya fonksiyonun tam yolunu ileterek fontları doğrudan sistemden yükleyebiliriz ya da bir TrueType fontu yüklemek için ImageFont kullanabiliriz.

Misal

from PIL import Image, ImageDraw, ImageFont

img = Image.open('images/logo.jpg')
d1 = ImageDraw.Draw(img)
myFont = ImageFont.truetype('E:/PythonPillow/Fonts/FreeMono.ttf', 40)
d1.text((0, 0), "Sample text", font=myFont, fill =(255, 0, 0))
img.show()
img.save("images/image_text.jpg")

Çıktı

Bu bölümde, python görüntüleme kitaplığı - "yastık" kullanarak görüntü verilerini depolamak ve işlemek için numpy kullanıyoruz.

Bu bölüme devam etmeden önce yönetici modunda komut istemini açın ve numpy'yi kurmak için aşağıdaki komutu çalıştırın -

pip install numpy

Note - Bu, yalnızca PIP yüklediyseniz ve güncellediyseniz çalışır.

Numpy Array'den görüntü oluşturma

PIL kullanarak bir RGB görüntüsü oluşturmak ve bir jpg dosyası olarak kaydetmek. Aşağıdaki örnekte biz -

  • 150'ye 250 piksellik bir dizi oluşturun.

  • Dizinin sol yarısını turuncu ile doldurun.

  • Dizinin sağ yarısını mavi ile doldurun.

from PIL import Image
import numpy as np

arr = np.zeros([150, 250, 3], dtype=np.uint8)

arr[:,:100] = [255, 128, 0]

arr[:,100:] = [0, 0, 255]

img = Image.fromarray(arr)

img.show()

img.save("RGB_image.jpg")

Çıktı

Gri tonlamalı görüntüler oluşturma

Gri tonlamalı görüntüler oluşturmak, RGB görüntüsü oluşturmaktan biraz farklıdır. Gri tonlamalı bir görüntü oluşturmak için 2 boyutlu diziyi kullanabiliriz.

from PIL import Image
import numpy as np

arr = np.zeros([150,300], dtype=np.uint8)

#Set grey value to black or white depending on x position
   for x in range(300):
      for y in range(150):
         if (x % 16) // 8 == (y % 16)//8:
            arr[y, x] = 0
         else:
            arr[y, x] = 255
img = Image.fromarray(arr)

img.show()

img.save('greyscale.jpg')

Çıktı

Bir Görüntüden Numpy dizisi oluşturma

PIL görüntüsünü numpy dizisine ve tersi şekilde dönüştürebilirsiniz. Aynı şeyi gösteren küçük bir program aşağıda belirtilmiştir.

Misal

#Import required libraries
from PIL import Image
from numpy import array

#Open Image & create image object
img = Image.open('beach1.jpg')

#Show actual image
img.show()

#Convert an image to numpy array
img2arr = array(img)

#Print the array
print(img2arr)

#Convert numpy array back to image
arr2im = Image.fromarray(img2arr)

#Display image
arr2im.show()

#Save the image generated from an array
arr2im.save("array2Image.jpg")

Çıktı

Yukarıdaki programı Example.py olarak kaydedip çalıştırırsanız -

  • Orijinal görüntüyü gösterir.

  • Ondan alınan diziyi görüntüler.

  • Diziyi tekrar görüntüye dönüştürür ve görüntüler.

  • Show () yöntemini kullandığımızdan, görüntüler aşağıdaki gibi varsayılan PNG görüntüleme yardımcı programı kullanılarak görüntülenir.

[[[ 0 101 120]
[ 3 108 127]
[ 1 107 123]
...
...
[[ 38 59 60]
[ 37 58 59]
[ 36 57 58]
...
[ 74 65 60]
[ 59 48 42]
[ 66 53 47]]
[[ 40 61 62]
[ 38 59 60]
[ 37 58 59]
...
[ 75 66 61]
[ 72 61 55]
[ 61 48 42]]
[[ 40 61 62]
[ 34 55 56]
[ 38 59 60]
...
[ 82 73 68]
[ 72 61 55]
[ 63 52 46]]]

Original Image

Image constructed from the array