PHP ile Resim İşleme ve Düzenleme – 2

PHP ile Resim işleme yazı dizimizin öncekiyazısında resim işleme ve resim oluşturma ile ilgili temel fonksiyonları anlatmıştım. Şimdi bu konuyu daha ayrıntılı olarak uygulamalarla anlatacağım.

$hedef=”resim.png”;
$url = imagecreatefrompng(“$hedef”);
$boyut = getimagesize (“$hedef”);
$genislik = $boyut[’0’];
$yukseklik = $boyut[’1’];
$im = imagecreatetruecolor($genislik, $yukseklik);

Yukarıdaki kodları önceki konumda açıklamıştım. Bu kodları anlamadıysanız önceki konuma bakmanızı tavsiye ederim. Yukarıdaki kodlar resim işlemenin temel kodlarıdır. Buraya kadar sıkıntı yoksa devam edelim.

Bütün resimler koordinat düzlemindeki pixellerden oluşur. Her pixelin konumunu belirten (x,y) koordinatları vardır. Bu koordinatların içinde ise pixelin rengi bulunur. Renk kodları RGB değerlerinden oluşur. RGB; Kırmızı, Yeşil, Mavi tonlardan oluşur. Bu renk tonları 0-255 arası değer alır. Her pixelin rengini oluşturan etmenler bunlardır.

Bir resmi işlemek için öncelikle her pixelin renk kodlarını elde etmemiz gerekir. Bunun için her pixeli tek tek dolaşacağız. Bu işlemi iki adet for döngüsüyle yapacağız. Birinci döngü satırları yani y değerlerini, ikinci döngü sütunları yani x değerlerini elde eder. Bu döngü aşağıdaki gibi kurulur.

for($y=”0″;$y < “$yukseklik”;$y++)
{
     for($ge=”0″;$ge < “$genislik”;$ge++)
     {
                    
     }
}

Yukarıda döngümüzü kurduk. Bu döngü sayesinde her pixelden tek tek geçeceğiz. Her pixelden geçerken o pixelin renk tonlarını almamız ve bunları işlememiz gerekir. Renk tonlarını almak için “imagecoloat()” fonksiyonunu kullanacağız. Bu fonksiyon

$rgb = imagecolorat($url, $ge, $y);

şeklinde kullanılır. Buradan gelen değeri R, G, B değerlerine ayırmamız gerekir. Bu işlem için ise

$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;

kodlarını kullanacağız. Bu kodlar pixelden aldığımız renk değerini tonlara ayırmamıza yardımcı olur. Renk değerini bu şekilde tonlara ayırmak zorunda değiliz. Tonlarına ayırmamızın sebebi her ton için ayrıca işlem yapmak istememizdir. Renk kodlarımızı aldık. Şimdi sırada bu değerleri işlemek ve tekrar pixele yerleştirmek var. İşleme kısmını anlatalım.

Resmi ihtiyacımıza göre işleyebiliriz. İster bir pixelin yerini değiştirebiliriz. İstersek pixelin renk değerlerini değiştirebiliriz. İstersek her ikisini de yapabiliriz. Ben her ikisinin de mantığını kısaca anlatacağım fakat kodlarla gösterimi kolay olduğu için buraya yazmaya gerek duymadım.

Resmin renk değerlerini elde ettik. Bunları toplama, çıkarma, çarpma, bölme işlemlerine tabi tutarak renk değerleriyle oynayabiliriz. Evet, olay bundan ibaret. Şimdi pixelleri taşımayı anlatayım daha sonra örnek kodlara geçeceğim. Pixel taşıma da aynı şekilde hangi pixele yerleştirmek istiyorsak o pixelin x ve y koordinatlarını girmemiz yeterlidir. Resim renklerini aldık, bunları işledik sıra geldi işlenmiş renkleri yeni pixellerimize eklemeye. Bunun için “imagesetpixel()” fonksiyonu kullanılır. Bu fonksiyon girdilerdeki pixellere imagecolorallocate() fonksiyonu ile belirlenen renk değerini atar. Aşağıdaki gibi kullanılır.

$renk = imagecolorallocate($im, $g, $b, $r);
$yerlestir = imagesetpixel($im, $px, $yx, $renk);

Şimdi örneğime geçeyim. Yukarıda açıkladığım kodlarla oluşturduğum basit bir örnek.

<?php 

$hedef=”resim.png”;
$url = imagecreatefrompng(“$hedef”);
$boyut = getimagesize (“$hedef”);
$genislik = $boyut[’0’];
$yukseklik = $boyut[’1’];
$im = imagecreatetruecolor($genislik, $yukseklik);

for($y=”0″;$y < “$yukseklik”;$y++)
{
     for($ge=”0″;$ge < “$genislik”;$ge++)
     {
          $rgb = imagecolorat($url, $ge, $y);
          $r = ($rgb >> 16) & 0xFF;
          $g = ($rgb >> 8) & 0xFF;
          $b = $rgb & 0xFF;

          if (($y%2)==0) {$px = $genislik – $ge;} else {$px = $ge;}

          $renk = imagecolorallocate($im, $r, $g, $b);
          $yerlestir = imagesetpixel($im, $px, $yx, $renk);
               
     }
}

$cikti = “yeniresim.png”;

imagepng($im , $cikti);
imagedestroy($im);

?>

Yukarıdaki örnekte önce resim bilgilerini aldık. Aldığımız resim bilgilerine göre iki adet for döngüsü kurduk. Bu döngü sayesinde her pixelden tek tek geçtik. Bu pixellerin renk değerlerini aldık. Yazdığım if koşulu ile bir pixelin düz bir pixelin ters yerleşmesini sağladık. Bu veriler işlendikten sonra yeni pixellerimize renkleri yerleştirdik. Döngülerden çıktık. Resimleri çıktı olarak verdik.

Selametle…

Bir önceki yazımız olan Server'ı Ağ Kullanıcılarına Açma başlıklı makalemizde PHP Dersleri, Siteyi Ağ Kullanıcılarına Açma ve Sunucuyu Ağ Kullanıcılarına Açma hakkında bilgiler verilmektedir.

About This Author

Uzun yıllardır yazılım ile uğraşıyorum. PHP ile başladığım yazılım hayatıma şu an PHP'nin yanında Swift ve Python ile devam ediyorum. Bu güne kadar bir çok proje geliştirdim ve yeni projeler geliştirmeye de devam ediyorum. Bu sitede yazılımseverlere faydalı bilgiler vermeye, yazılım geliştirmeye, öğrendiklerimi paylaşmaya, yeni başlayanlara yol göstermeye ve onlara yardımcı olmaya çalışıyorum.

Post A Reply