Kategoriler
Geliştirici Günlükleri PHP

PHP ile Resim Manipülasyonu (ImageManipulation Kütüphanesi)

PHP ile resim dosyaları üzerinde oynama yapmak için çeşitli seçeneklere sahibiz. Bunlardan en temeli PHP’nin GD (ya da benzeri) eklentilerini kullanan PHP’nin yordamsal işlevlerini kullanabiliriz. Ancak bu durum bir süre sonra en basit işlemler için bile aynı kodları tekrar tekrar yazmanıza neden olacaktır ve eninde sonunda yazdığınız kodlar arasında kaybolacaksınız. 🙂

Bunların önüne geçmek için tekrarlanan işlemleri birer yordamsal işlev (fonksiyon) haline getirip ihtiyacınız olduğunda çağırmak güzel bir fikirdir. Ama durun söylemem gereken bir şey var; PHP çok uzun zaman önce OOP programlama anlayışını benimsedi. 🙂

Projelerinizde sıklıkla resimler üzerinde işlemler yapmanız gerekiyorsa bir süre sonra benim gibi her proje için ayrı ayrı ama aynı şeyleri yazmaktan bıkmış olmanız normaldir. Üstelik bir hata vs çıktığında tüm projelere erişip düzeltme imkanınız olmaması da cabasıdır.

ImageManupulation kütüphanesi tam olarak bunun üzerine yazdığım, resimler üzerinde basit işlemler yapmayı kolaylaştıran bir kütüphanedir.

Görseller üzerinde çok temel ve sıklıkla kullanılan bazı işlemleri yapmak için kullanılabilir. Bu işlemlerin en başında şunlar vardır;

  • Resize (Yeniden Boyutlandırma – orantılı ya da orantısız),
  • Rotate (Çevirme: 90, 180 ya da 270 derece),
  • Flip (Döndürme: dikey, yatay ya da hem dikey hem yatay),
  • Text Watermark (Görsel üzerine metin yazdırma),
  • Crop (Kırpma)

Kurulum

composer require muhametsafak/image-manipulation

Kullanımı

Sınıf ile bir nesne oluşturmakla işe başlayın ve setImage() yöntemiyle manipüle edilecek resim dosyasının tam yolunu bildirin. Görsel üzerinde işlemleri yapın ve save() yöntemi ile değişiklikleri kaydettikten sonra clean() yöntemiyle belleği boşaltın.

Resize (Yeniden Boyutlandırma)

Yeniden boyutlandırma için birden fazla metoda sahipsiniz.

resize() Metodu

Görseli orantılı ya da boyutlandırma sonrasında fazlalıklarını kırparak yeniden boyutlandırma yapar.

resize(int $w, int $h, bool $crop = false): self

3 parametre alır;
int $w : Genişlik (Width)
int $h : Yükseklik (Height)
bool $crop = false : Eğer false ise görsel orantılı boyutlandırılır. true ise görsel belirtilen boyutlara getirilir ve fazlalığı kırpılır.

Bu yöntemde $crop parametresi true olmadığı sürece resim orantılı olarak boyutlandırılır. Tam olarak sizin belirlediğiniz ölçülerde bir görsel elde etmek istiyorsanız strictResize() metodunu kullanın.

resizeToHeight() ve resizeToWidth() Metotları

Görseli yükseklik ya da genişliğine göre otomatik boyutlandırır.

resizeToHeight(int $height): self
resizeToWidth(int $width): self

Bu yöntemler ilgili kenarın olması gereken ölçüsünü parametre olarak (tamsayı) alır.

resizeToScale() Metodu

Görseli belli bir (100 üzerinden) oranla boyutlandırır.

resizeToScale(int $scale): self

Örneğin parametre olarak 50 verilirse görselin ölçüleri yarıya düşer ya da 200 verilirse görselin boyutları iki katına çıkar.

strictResize() Metodu

Bir resmi belirtilen boyutlara (gerekirse sündürürek) getirir.

strictResize(int $width, int $height): self

Bu yöntem herhangi bir oran orantı işlemi yapmadan resmi doğrudan istenilen boyutlara getirir.

Rotate (Çevirme) ve Flip (Döndürme)

Bir görseli çevirmek için rotate(), döndürmek içinse flip() yöntemini kullanabilirsiniz.

rotate() Metodu

Görseli 90, 180 ya da 270 derece çevirmek için kullanılır.

rotate(float|int $deg): self

Görseli çevirmek istediğiniz dereceyi tam sayı ya da ondalık sayı olarak verin. 90, 180, 270 dışında bir değer verilmesi durumda bir hata fırlatılacağını bilmeniz gerekiyor.

flip() Metodu

Görseli dikey, yatay ya da hem dikey hem yatak döndürür.

flip(int|string $flipMode): self

Tek parametre ile çalışır ve bu parametre şunlardan biri olmalıdır;
– Bir dize (string) olarak : “vertical”, “horizontal”, “both”
– Ya da PHP’nin şu ön tanımlı sabitlerinden biri : IMG_FLIP_VERTICAL, IMG_FLIG_HORIZONTAL, IMG_FLIG_BOTH.

text() Text Watermark (Görsele Yazı Yazma)

Görsel üzerine yazı yazmak için text() yöntemi kullanılır.

text(string $text, array $options = []): self

Bu yöntem iki parametre alır;
string $text : Yazılacak metin,
array $options = [] : Yazılacak yazı için seçenekler.

Yazının Konumu

Yazının konumunu $options['align'] elamanı ile belirtebilirsiniz. Bu aşağıdaki değerlerden birisi olabilir;

  • \ImageManipulation\Image::ALIGN_NO
  • \ImageManipulation\Image::ALIGN_LEFT_TOP
  • \ImageManipulation\Image::ALIGN_CENTER_TOP
  • \ImageManipulation\Image::ALIGN_RIGHT_TOP
  • \ImageManipulation\Image::ALIGN_LEFT_CENTER
  • \ImageManipulation\Image::ALIGN_CENTER_CENTER
  • \ImageManipulation\Image::ALIGN_RIGHT_CENTER
  • \ImageManipulation\Image::ALIGN_LEFT_BOTTOM
  • \ImageManipulation\Image::ALIGN_CENTER_BOTTOM (Varsayılan)
  • \ImageManipulation\Image::ALIGN_RIGHT_BOTTOM

X ve Y ekseninde konumu değiştirmek için negatif ya da pozitif tam sayıları ile “$options['coordinateX']” ve “$options['coordinateY']” elemanları ile ayarlayabilirsiniz.

Yazının Fontu, Boyutu ve Rengi

Yazının boyutunu $options['size'] seçeneği ile belirleyebilirsiniz. Varsayılan değeri 18 dir.

Varsayılan olarak “src/OpenSans.ttf” fontu kullanılacaktır. Eğer farklı bir font kullanmak isterseniz $options['font'] elemanına TTF dosyasının yolunu bildirmelisiniz.

Varsayılan olarak yazı rengi siyah (“#000000“) dir. $options['color'] elemanına yazı rengini HEX kodu olarak belirtebilirsiniz.

Yazının Açısı

Yazıya açı vermek isterseniz $options['angle'] ile bir tamsayı olarak belirtebilirsiniz. Varsayılan olarak 0 dır.

Crop (Kırpma)

Resmin merkezinde başlayarak bir kırpma işlemi yapmak için crop() yöntemini kullanın.

crop(int $width, int $height, int $xAxis = 0, int $yAxis = 0): self

Şimdilik bu kadar…

Kütüphanenin yetenekleri şimdilik bunlarla sınırlı, ancak gelecek geri bildirimlere göre geliştirmeye devam edeceğim. Gelecekte büyük çaplı bir güncelleme yapacak olursam bir geliştirici günlüğü olarak paylaşırım.

Şimdilik hepsi bu kadar….

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s