Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

PHP ile GD kullanarak görüntü düzenleme

by
Difficulty:IntermediateLength:MediumLanguages:

Turkish (Türkçe) translation by Şevket YILMAZ (you can also view the original English article)

İnternet, görüntüler olmadan çok renksiz olurdu. Bununla birlikte, web siteniz için yüzlerce binlerce görüntünün bakımı ve düzenlenmesi baş ağrıtıcı olabilir. Sitenizin tasarımı değiştiğinde, tüm görüntülerinizi değiştirmeniz gerebilir—örneğin, tüm görüntülerinizi gri tonlamaya çevirmeniz veya gerçek boyutlarını %50'ye yeniden boyutlandırmanız gerekebilir.   Ayrıca farklı görüntüleri sıkıştırmak veya kırpmak isteyebilirsiniz. Bunu elle yapmak zaman alıcıdır ve hatalar ortaya çıkabilir, fakat biraz programlama bilgisi ile bu işlemler otomatikleştirilebilir.

Bu öğreticide, PHP'deki GD (Graphic Draw) kütüphanesini öğreneceğiz. Bu kütüphanenin yeniden boyutlandırma, kırpma, döndürme veya filtreleme gibi görüntü düzenleme işlemleri için nasıl kullanılacağını göreceksiniz.

GD nedir?

PHP, ziyaretçilere sadece HTML sunmaktan çok daha fazlasını yapabilir. Örneğin, görüntüleri düzenleme yeteneğine sahiptir. Sadece düzenleme değil, taslaktan kendi görüntülerinizi yaratabilir ve sonra saklayabilir veya kullanıcılara sunabilirsiniz.

PHP, GD kütüphanesini (GD library—Graphic Draw kısaltması) kullanarak, neredeyse tüm temel görüntü düzenleme gereksinimlerinizi gerçekleştirebilir.

Kurulum

Eğer Windows'ta çalışıyorsanız, php.ini içine php_gd2.dll dosyasını eklenti olarak ekleyebilirsiniz. Eğer XAMPP gibi bir şey  kullanıyorsanız, php_gd2.dll dosyasını xampp\php\ext klasöründe bulacaksınız. Ayrıca, GD'nin sisteminize yüklenip yüklenmediğini  phpinfo(); fonksiyonunu kullanarak  kontrol edebilirsiniz.

PHP XAMPP GD

Ayrıca, kurulum işlemi hakkında daha fazlasını öğrenmek için gereksinimler ve kurulum sayfalarını ziyaret edebilirsiniz.

PHP GD Kullanarak Görüntü Oluşturma

PHP kullanarak görüntülerin düzenlenmesinde ilk adım, görüntü kaynağı olarak onları belleğe yüklemektir. Bu, farklı formatlar için farklı fonksiyonlar kullanılarak gerçekleştirilebilir. Tüm bu fonksiyonlar, kolayca hatırlamak için, çok benzer isimlere sahiptir.

Yeni bir Görüntü Yaratma

Eğer, düzenlemek istediğiniz özgün bir görüntü kaynağınız yoksa, imagecreatetruecolor() fonksiyonunu denemek yararlı olacaktır. Eğer her şey planlandığı gibi giderse, bir görüntü kaynağı döndürecektir. Döndürülen görüntü kaynağı, aslında tanımlanan genişlik ve yükseklikte siyah bir görüntüdür. 

Bir Görüntü Dosyası Yükleme

Eğer herhangi bir yerde kaydedilmiş görüntüleri düzenlemeyi planlıyorsanız,imagecreatefromjpeg()imagecreatefrompng(), ve imagecreatefromgif() fonksiyonlarının yararı olacaktır. Bunlar, yüklenmiş görüntü dosyasının tüm verisi ile bir görüntü kaynağı oluşturacaktır. Bu fonksiyonlar, URL veya dosya yolu olarak, yüklediğiniz görüntünün yerini tanımlayan tek bir parametre kabul eder. 

Bir Karakter Dizisinden Görüntü Oluşturma

PHP'de GD kütüphanesi ayrıca imagecreatefromstring()fonksiyonunu kullanarak karakter dizisinden görüntü oluşturmaya izin verir. imagecreatefromstring()'ten önce verilen karakter dizisine  base64_decode() kullanmak zorunda olduğunuzu unutmayın. Fonksiyon otomatik olarak görüntünün JPG, PNG, GIF veya desteklenen diğer format türü olduğunu algılayacaktır.

Bir Görüntüyü Döndürme, Ölçekleme, Kırpma ve Çevirme

Bir görüntü kaynağı üzerinde gerçekleştirmek isteyebileceğiniz bazı yaygın işlemler döndürme, ölçekleme, kırpma ve çevirmedir.

Döndürme

Script içinde yüklü olan bir görüntüyü imagerotate() fonksiyonunu kullanarak döndürebilirsiniz. Döndürme merkezi olarak görüntünün merkezini kullanarak verilen açıda görüntüyü döndürecektir. Açı bir float değeri olarak sağlanır ve PHP bunu döndürme için derece olarak kabul eder. Bazen döndürülen görüntü, orjinal versiyonla karşılaştırıldığında farklı ölçülerde olacaktır. Bunun anlamı, döndürmeden sonra bazı kaybolan alanlar olacak demektir. imagerotate() fonksiyonunun üçüncü parametresi, döndürmeden sonra boş arka plan rengini tanımlamak için kullanılabilir.

Ölçekleme

GD kütüphanesini kullanarak bir görüntüyü ölçeklemek çok kolaydır. Sadece görüntü kaynağının genişlik ve yüksekliğini imagescale() fonksiyonuna geçirmelisiniz. Eğer yüksekliği belirtmezseniz, GD en boy oranını koruyarak belirtilen genişliğe göre görüntüyü ölçekleyecektir. Ayrıca görüntüyü ölçeklemek için mod tanımlayabilirsiniz. Mod  IMG_NEAREST_NEIGHBOURIMG_BILINEAR_FIXED,IMG_BICUBIC vb. olarak ayarlanabilir. Hatırlamanız gereken önemli bir nokta, bu fonksiyon düzenlenen özgün görüntü yerine yeni ölçeklenmiş görüntü kaynağı döndürür, 

Kırpma

GD ile herhangi bir görüntü kaynağını imagecrop() fonksiyonunu kullanarak kırpabilirsiniz. İlk parametre özgün görüntü kaynağıdır ve ikinci parametre kırpma penceresinin konum ölçülerini tanımlayan  xywidth, ve height, anahtarlı birleşimli dizidir.

Crop and Rotate Images Using PHP

Yukarıdaki kelebek görüntüsü izleyen kod kullanılarak kırpılmıştır:

Basitçe, en küçük kenar uzunluğunu $size değişkeninde sakladık. Bu değişken daha sonra kırpma dikdörtgeninin sınırlarını tanımlamak için kullanılır. Sonuç olarak, görüntü genişlik ve uzunluuğu yalnızca 300 piksel  olacak şekilde küçültüldü. Bu bize uygun ölçülerde bir kare görüntü verir.

Görüntüleri Çevirme

Görüntüler, imageflip() fonksiyonu kullanılarak yatay, dikey veya her iki yönde çevrilebilir. İlk parametre olarak çevirmek istediğiniz görüntü kaynağını, ikinci parametre olarak  çevirme modunu kabul eder. Çevirme modu IMG_FLIP_HORIZONTAL, IMG_FLIP_VERTICAL veya IMG_FLIP_BOTH olarak ayarlanabilir.

 Yukarıdaki şekilde sol üstteki özgün görüntüdür. Sağ üstteki görüntü IMG_FLIP_HORIZONTAL kullanılarak,  sol alttaki görüntü IMG_FLIP_VERTICAL kullanılarak ve sağ alttaki görüntü IMG_FLIP_BOTH kullanılarak oluşturulmuştur. (Karga görüntüsü Pixabay'den.)

Görüntüye Filtre Uygulama

GD, önceki görüntülerden fonksiyonlar kullanılarak, yüklenen farklı görüntü kaynakları üzerinde filtre uygulayabileceğiniz  çok yararlı imagefilter() fonksiyonuna sahiptir. Bu fonksiyon sizin uygulayacağınız filtreye bağlı olarak çeşitli parametreleri kabul edebilir.

Yeni başlayanlar için, görüntü kaynağı ve uygulamak için istediğiniz filtrenin adını belirtin. Dokümanlarda verilen 12 önceden tanımlanmış filtre türünden birini ayarlayabilirsiniz.

  • IMG_FILTER_NEGATE: görüntüdeki renkleri tersine çevirir.
  • IMG_FILTER_GRAYSCALE: görüntüden renkleri kaldırır.
  • IMG_FILTER_BRIGHTNESS: görüntüyü daha parlak veya karanlık  yapar
  • IMG_FILTER_CONTRAST: görüntü kontrastını artırır
  • IMG_FILTER_COLORIZE: seçilen renkle görüntüyü renklendirir
  • IMG_FILTER_EDGEDETECT: görüntüdeki kenarları vurgular
  • IMG_FILTER_EMBOSS: kenar algılamaya benzer, ama her kenar yükseltilmiş görünür
  • IMG_FILTER_GAUSSIAN_BLUR: Gauss yöntemi kullanarak görüntüye bulanıklık uygular
  • IMG_FILTER_SELECTIVE_BLUR: seçici yöntemini kullanarak görüntüye bulanıklık uygular
  • IMG_FILTER_MEAN_REMOVAL: stilize bir görüntü oluşturmak için efekt
  • IMG_FILTER_SMOOTH: görüntüdeki pürüzlü kenarları düzgünleştirir 
  • IMG_FILTER_PIXELATE: görüntüyü pikselleştirir

NEGATEGRAYSCALE, EDGE_DETECT ve EMBOSS gibi  bazı filtreler ek veriye ihtiyaç duymazlar. BRIGHTNESSCONTRAST ve SMOOTH gibi diğer filtreler, son görüntünün parlaklık, karşıtlık ve yumuşatma miktarını belirten ek bir parametre kabul edebilir. PIXELATE parametresi iki ek parametre belirlemenizi sağlar: blok boyutu yanı sıra pikselleşme modu. Son olarak, COLORIZE filtresi kırmızı, yeşil ve mavi bileşenleri yanı sıra alfa kanalı değerlerini belirleyen dört parametre kabul eder.

Sol üstteki özgün görüntüdür. Sağ üst görüntü COLORIZE filtresi kullanılarak, sol alt GRAYSCALE filtresi kullanılarak ve sağ alt görüntü BRIGHTNESS filtresi kullanılarak oluşturulmuştur. (Bu kelebek görüntüsü Pixabay'de bulundu.)

Diğer Yararlı Görüntü Düzenleme Fonksiyonları

Ayrıca arada sırada işinize yarayacak diğer GD fonksiyonlarını bilmeniz  gerekir.

Görüntü Boyutlarını Alma

Görüntü kaynağının genişlik ve yüksekliğini imagesx() ve imagesy() fonksiyonlarını kullanarak belirleyebilirsiniz.

getimagesize() adında başka bir fonksiyon genişlik, yükseklik ve görüntü tipini almak için kullanılabilir. Bu fonksiyon genişlik, yükseklik ve görüntü formatını tanımlayan diziyi döndürür. Dizinin ilk iki elemanı genişlik ve yüksekliği tanımlar ve üçüncü eleman dosya biçimini belirten bir sabit  içerir:  IMAGETYPE_PNG, IMAGETYPE_GIF, gibi.

Görüntü Kaydetme

Görüntüye istediğiniz değişiklikleri yaptıktan sonra büyük olasılıkla tarayıcıya çıkış veya bir dosya olarak kaydetmek istersiniz. Her iki durumda da, GD çıktı fonksiyonlarından imagejepg(), imagepng() veya imagegif() gibi birini kullanmak zorunda olacaksınız. Görüntü kaynağını bu çıkış fonksiyonlarından birine  aktarırsınız ve resmi bir dosyaya kaydetmek istiyorsanız, bir dosya adı da belirtirsiniz. Ayrıca görüntü türüne bağlı olarak üçüncü bir isteğe bağlı parametre kullanarak çıkış görüntü kalitesini kontrol edebilirsiniz.

Bir Dizindeki Tüm Görüntüleri Yeniden Boyutlandırma

Öğrendiğimiz bilgileri pratik bir şeyler yaparak uygulayalım. Bu bölümde, belirli bir dizindeki tüm JPEG görüntüleri 640 piksel genişliği için boyutlandıracağız. Yükseklik özgün görüntünün boyutlarına göre otomatik olarak hesaplanacaktır.

Boyutlandırılmış görüntüleri Resized isimli yeni bir klasöre kaydedeceğiz. Bu durumda tüm özgün görüntüler aynı boyuttadır, fakat kod tüm farklı boyutlarda ve en boy oranlarına sahip görüntülerle düzgün çalışacaktır.

Yukarıdaki koda .jpg uzantılı tüm görüntüleri Natura isimli dizininde bulmak için glob() fonksiyonunu kullanarak başladık. Görüntü dosyaları bir dizide saklandı ve hepsini teker teker döndürdük.

Yeniden boyutlandırmak istediğiniz tüm görüntüler JPEG olduğundan, scripte yüklemek için imagecreatefromjpeg() fonksiyonu kullanılır. Daha sonra görüntüyü belirli bir genişliğe  yeniden boyutlandırmak için imagescale() fonksiyonu kullanılır — bizim durumumuzda 640 piksel. Yükseklik otomatik olarak hesaplanır bu yüzden sabit yükseklik belirtmedik.

Boyutlarını göstermek için, her özgün görüntü dosyasının adına -1920x1080 eklenmiştir. Özgün dosya adında str_replace()  kullandık ve yeni görüntü boyutunu -1920x1080 ile  değiştirdik.

Son olarak, boyutlandırılmış resimleri Resized isimli klasöre yeni dosya isimleri ile kaydettik. Ayrıca kaydedilen görüntü dosyasının kalitesini ayarlamak için imagejpeg() fonksiyonuna üçüncü bir parametre ekleyebilirsiniz. Üçüncü parametre girilmediğinde, görüntüler varsayılan 75 kalite ile kaydedilir.

Bir Dizindeki Her Görüntüye Gri Tonlama ve Kontrast Filtresi Uygulama

Bu kez dizinimizdeki her görüntü üzerinde iki farklı filtre  uygulayacak ve sonuç dosyalarını adını değitirmeden farklı bir dizine kaydedeceğiz. Haydi koda giriş yapalım ve daha sonra her fonksiyonun ne yaptığını açıklayacağım.

Gördüğünüz gibi tam olarak önceki örnekte yaptığımız gibi ilgili resimleri Natura dizininden yükledik. Ancak, bu kez yüklenen görüntü kaynağına filtreleri uygulamak için imagefilter() fonksiyonunu kullanacağız.

imagefilter() özgün görüntüyü değiştirdiğine ve işlemin başarılı veya başarısız olmasına göre TRUE veya FALSE döndürdüğüne dikkat edin. Döndürülen ölçeklenmiş görüntü kaynağı önceki bölümde kullandığımız imagescale() fonksiyonundan farklıdır.

Akılda tutulması gereken bir diğer önemli şey kontrast filtresi -100 ile 100 arasında değer kabul ettiğidir. Negatif değerler daha fazla kontrast ve pozitif değerler daha az karşıtlık ifade eder. Bu bazı insanların tahmin edebileceğinin tersidir! 0 değeri, görüntüyü değiştirmeden bırakır.

Öte yandan parlaklık filtresinin en az -255 ve en fazla  255 sınırları vardır. Bu durumda negatif değer  en düşük parlaklık ve pozitif değer maksimum parlaklık anlamına gelir.

Dosya adını basename() fonksiyonunu kullanarak dosya yolundan alırız ve imagejpeg() fonksiyonunu kullanarak görüntüyü kaydederiz.

Son Düşünceler

Bu öğreticinin amacı PHP GD kütüphanesi ile sizi tanıştırmak ve hayatınız kolaylaştırmak için tüm bu fonksiyonların nasıl kullanılacağını öğrenmekti. Kendi görüntü düzenleme scriptinizi yazmak için bir kılavuz olarak ders sonundaki örnekleri de kullanabilirsiniz. Örneğin, imagesx() işlevini kullanarak, yalnızca genişliği belirlenen limitten geniş olan bir görüntüleri yeniden boyutlandırabilirsiniz.

Bu işlevler görüntü düzenlemeyi kolaylaştırmak için  bir çok seçeneğe sahiptir ve sonuçta çok zaman kazandıracaktır. Bu öğretici ile ilgili herhangi bir sorunuz varsa, lütfen yorum olarak bildirim bırakın.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.