Oca
2

Php’de, transparent png’li resmi beyaz arkaplanlı jpeg resime dönüştürmek

Png uzantılı resimi  jpege dönüştürmeye çalıştığımızdabir takım sıkıntılarla karşılaşmaktayız. Mesela eğer resim dosyasının uzantsını png’den jpege dönüştürüp sonra crop benzeri işleme tabi tuttuğumuzda resimden arta kalan siyah bir görüntü olmakta 🙂 Bu durumla karşılaşmamak için resimimizi aşağıdaki gibi kod bazlı işleme tutmak lazım.


$image = imagecreatefrompng($originalFile);

 imagejpeg($image, $outputFile, 100)

yukarıdaki kodda $originalFile değişkeni ile png uzantılı dosyamızın yolunu giriyoruz. Bir alt satırda ise resimi jpeg formatına dönüştürmekteyiz.

Şimdi karşımıza bir başka sıkıntı daha çıkacaktır. Bildiğiniz üzere jpeg formatı transparent özelliğini desteklememektedir. Pngli resimde transparentli yerler var ise jpeg e çevirdiğimizde, resmimizdeki yerleri siyaha dönüştürecektir.

Şimdi bahsetmiş olduğum sorunları aşağıda yazmış olduğum “ImageConverter” isimli class dosyası ile çözmüş olacağız.


<?php
class ImageConverter
{
 public function png2Jpeg($originalFile, $outputFile)
 {
 $image = imagecreatefrompng($originalFile);

 $image = $this->imageTransToWhite($image);

 imagejpeg($image, $outputFile, 100);
 imagedestroy($image);
 }

 private function imageTransToWhite($trans)
 {
 $w = imagesx($trans);
 $h = imagesy($trans);
 $white = imagecreatetruecolor($w, $h);

 $bg = imagecolorallocate($white, 255, 255, 255);
 imagefill($white, 0, 0, $bg);

 imagecopy($white, $trans, 0, 0, 0, 0, $w, $h);

 return $white;
 }
}
?>

yukarıdaki class’da yapılan işlemleri açıklamak istersek;

“png2Jpeg” isimli fonksiyona ilgili parametreleri göndererek çağırıyoruz. $originalFile paramteresine pngli dosyanın yolunu belirtiyoruz (Örn: enes.png). $outputFile değişkeni de jpeg uzantılı dosyanın yolunu veriyoruz (Örn: enes.jpg).  “imagecreatefrompng” fonksiyonu ile pngli resimi image isimli değişkene atıyoruz. Bir aşağıdak satırda “imageTransToWhite” isimli fonksiyonu çağırıyoruz. Eğer resmimizde transparentli yer var ise  transparent olan yerleri bizim için beyaza dönüştürecektir. “imagejpeg” fonksiyonu ise pngli resmimizi bir güzel jpeg formatına dönüştürecektir. Daha sonra ise “imagedestroy” fonksiyonu ilede png uzantılı resimle işimizin bittiğini söylüyoruz.

Yazmış olduğum classı güle güle kullanın efem. 🙂

1 Yorum bulunmaktadır - “Php’de, transparent png’li resmi beyaz arkaplanlı jpeg resime dönüştürmek”

  • hakan gürkan 14 Ocak 2011, 15:38

    süper! gerçekten çok teşekkürler

Yorum Yapın

 

Twitter'dan Takip Et! Twitter'dan Takip Et!

Etiketler

Son Yazılar

Son Yorumlar

Haftanın Özlü Sözü

Akıllı bir adam yalnız kendi tecrübelerinden, çok akıllı bir adam başkalarının da tecrübelerinden yararlanır. (Çin Atasözü)

Bağlantılar

Arşivler