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.



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_NEIGHBOUR
, IMG_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 x
, y
, width
, ve height
, anahtarlı birleşimli dizidir.



Yukarıdaki kelebek görüntüsü izleyen kod kullanılarak kırpılmıştır:
$im_php = imagecreatefromjpeg('path/to/image'); $size = min(imagesx($im_php), imagesy($im_php)); $im_php = imagecrop($im_php, ['x' => $size*0.4, 'y' => 0, 'width' => $size, 'height' => $size]); $im_php = imagescale($im_php, 300);
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
NEGATE
, GRAYSCALE
, EDGE_DETECT
ve EMBOSS
gibi bazı filtreler ek veriye ihtiyaç duymazlar. BRIGHTNESS
, CONTRAST
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.
$directory = 'Nature/'; $images = glob($directory."*.jpg"); foreach($images as $image) { $im_php = imagecreatefromjpeg($image); $im_php = imagescale($im_php, 640); $new_height = imagesy($im_php); $new_name = str_replace('-1920x1080', '-640x'.$new_height, basename($image)); imagejpeg($im_php, $directory.'Resized/'.$new_name); }
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.
$directory = 'Nature/'; $images = glob($directory."*.jpg"); foreach($images as $image) { $im_php = imagecreatefromjpeg($image); imagefilter($im_php, IMG_FILTER_GRAYSCALE); imagefilter($im_php, IMG_FILTER_CONTRAST, -25); $new_name = basename($image); imagejpeg($im_php, $directory.'Grayscale/'.$new_name); }
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.