Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

imagecreatefrompng() Makes a black background instead of transparent?

Tags:

php

thumbnails

gd

I make thumbnails using PHP and GD library but my code turn png transparency into a solid black color, Is there a solution to improve my code?

this is my php thumbnail maker code:

function cropImage($nw, $nh, $source, $stype, $dest) {      $size = getimagesize($source);      $w = $size[0];       $h = $size[1];        switch($stype) {           case 'gif':           $simg = imagecreatefromgif($source);           break;           case 'jpg':           $simg = imagecreatefromjpeg($source);           break;           case 'png':           $simg = imagecreatefrompng($source);           break;       }        $dimg = imagecreatetruecolor($nw, $nh);       $wm = $w/$nw;       $hm = $h/$nh;       $h_height = $nh/2;       $w_height = $nw/2;        if($w> $h) {           $adjusted_width = $w / $hm;           $half_width = $adjusted_width / 2;           $int_width = $half_width - $w_height;           imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);       } elseif(($w <$h) || ($w == $h)) {           $adjusted_height = $h / $wm;           $half_height = $adjusted_height / 2;           $int_height = $half_height - $h_height;            imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);       } else {           imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);       }        imagejpeg($dimg,$dest,100); } 

Thank you

like image 821
Emily Avatar asked Apr 10 '10 01:04

Emily


People also ask

Why do transparent images have black background?

When a PNG image with a transparent background is selected from the Recent FIle selector and appears with a black background, the black background can be removed by re-uploading the image as a New File each time you use the image.

What is Imagecreatefrompng?

imagecreatefrompng() returns an image identifier representing the image obtained from the given filename. Tip. A URL can be used as a filename with this function if the fopen wrappers have been enabled.


2 Answers

After imagecreatetruecolor():

<?php  // ... Before imagecreatetruecolor()  $dimg = imagecreatetruecolor($width_new, $height_new); // png ?: gif  // start changes switch ($stype) {      case 'gif':     case 'png':         // integer representation of the color black (rgb: 0,0,0)         $background = imagecolorallocate($dimg , 0, 0, 0);         // removing the black from the placeholder         imagecolortransparent($dimg, $background);          // turning off alpha blending (to ensure alpha channel information         // is preserved, rather than removed (blending with the rest of the         // image in the form of black))         imagealphablending($dimg, false);          // turning on alpha channel information saving (to ensure the full range         // of transparency is preserved)         imagesavealpha($dimg, true);         break;      default:         break; } // end changes  $wm = $w/$nw; $hm = $h/$nh;  // ... 
like image 119
Adrian Avatar answered Sep 27 '22 17:09

Adrian


if the code of the correct answer don't work try this :

    //After imagecreatetruecolor(): $white = imagecolorallocate($dimg, 255, 255, 255);  imagefill($dimg,0,0,$white);  
like image 27
Yahia Mgarrech Avatar answered Sep 27 '22 17:09

Yahia Mgarrech