2011-09-27 42 views
4

我想用透明度plz幫助調整圖像的PNG尺寸。 下面是代碼:用透明度調整圖像PNG的尺寸

function resize($width,$height) { 

    $new_image = imagecreatetruecolor($width, $height); 

    imagealphablending($new_image, false); 
    imagesavealpha($new_image,true); 
    $transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127); 
    imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent); 

    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
    $this->image = $new_image; 
} 
+2

,其結果是什麼呢?沒有圖像?透明度丟失了? –

+0

結果是我失去了透明度 –

回答

2

試試這個

修訂

function createThumb($upfile, $dstfile, $max_width, $max_height){ 
     $size = getimagesize($upfile); 
     $width = $size[0]; 
     $height = $size[1]; 
     $x_ratio = $max_width/$width; 
     $y_ratio = $max_height/$height; 
     if(($width <= $max_width) && ($height <= $max_height)) { 
       $tn_width = $width; 
       $tn_height = $height; 
     } elseif (($x_ratio * $height) < $max_height) { 
       $tn_height = ceil($x_ratio * $height); 
       $tn_width = $max_width; 
     } else { 
       $tn_width = ceil($y_ratio * $width); 
       $tn_height = $max_height; 
     } 
     if($size['mime'] == "image/jpeg"){ 
       $src = ImageCreateFromJpeg($upfile); 
       $dst = ImageCreateTrueColor($tn_width, $tn_height); 
       imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height); 
       imageinterlace($dst, true); 
       ImageJpeg($dst, $dstfile, 100); 
     } else if ($size['mime'] == "image/png"){ 
       $src = ImageCreateFrompng($upfile); 

    // integer representation of the color black (rgb: 0,0,0) 
    $background = imagecolorallocate($src, 0, 0, 0); 
    // removing the black from the placeholder 
    imagecolortransparent($src, $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($src, false); 

    // turning on alpha channel information saving (to ensure the full range 
    // of transparency is preserved) 
    imagesavealpha($src, true); 
       $dst = ImageCreateTrueColor($tn_width, $tn_height); 
       imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height); 
       Imagepng($dst, $dstfile); 

     } else { 

       $src = ImageCreateFromGif($upfile); 
       $dst = ImageCreateTrueColor($tn_width, $tn_height); 
       imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height); 
       imagegif($dst, $dstfile); 
     } 
    } 
+0

不幸的是它不工作:( –

+0

你發送什麼值功能?你收到什麼信息?是什麼意思「它不工作」? –

+0

我試過這個 $ image-> createThumb ($ src ['final_file'],$ src ['final_file_100'],100,100);但是我得到的圖像沒有透明度? –

0

有一個簡單易用,開源庫稱爲PHP Image Magician。它採用GD和支持透明度的基礎使用的

例子:

$magicianObj = new imageLib('racecar.png'); 
$magicianObj -> resizeImage(100, 200, 'crop'); 
$magicianObj -> saveImage('racecar_small.png');