2013-05-15 37 views
-1

我只是finaly設法讓用戶上傳的圖片停留透明的,當他們PNG,通過這樣做:問題顯示所上傳的圖片。PNG透明

$image_p = imagecreatetruecolor($fixed_width, $fixed_height); 

    if ($_FILES[$fileName]["type"] == "image/x-png" || $_FILES[$fileName]["type"] == "image/png") { 

     $background = imagecolorallocate($image_p, 0, 0, 0); 
     imagecolortransparent($image_p, $background); 
     imagealphablending($image_p, false); 
     imagesavealpha($image_p, true); 
    } 

    // PNG or JPG 
    if ($_FILES[$fileName]["type"] == "image/jpeg" || $_FILES[$fileName]["type"] == "image/jpg" || $_FILES[$fileName]["type"] == "image/pjpeg") { 
     $image = imagecreatefromjpeg($imageFile); 
    } else { 
     $image = imagecreatefrompng($imageFile); 
    } 


    // check if img is bigger then max width 
    $manipulated = 0; 

    if ($width_orig > $fixed_width) { 
     imagecopyresampled($image_p, $image, 0, 0, 0, 0, $fixed_width, $fixed_height, $width_orig, $height_orig); // reduce in width/height 
     $manipulated = 1; 
    } else { 
     $image_p = $image; // leave as is 
    } 

    // Output PNG or JPG 
    if ($_FILES[$fileName]["type"] == "image/jpeg" || $_FILES[$fileName]["type"] == "image/jpg" || $_FILES[$fileName]["type"] == "image/pjpeg") { 
     imagejpeg($image_p, $newfile, 65); 
    } else { 
     imagepng($image_p, $newfile, 6); 
    } 

但現在我有問題,顯示它們爲巴紐,當我打開從交友詞典文件時,它是透明的,但是當我與顯示它:

<?php 

$file = basename(urldecode($_GET['img'])); 
$file = str_replace("../", "", $file); 

$fileDir = '/home/funkydic/noaccess/avatars/'; 

$jpg = strpos($file, '.jpg'); 
$jpeg = strpos($file, '.jpeg'); 
$png = strpos($file, '.png'); 

if ($jpg != false || $jpeg != false) { 

    if (file_exists($fileDir . $file)) { 

     $imageRes = imagecreatefromjpeg($fileDir . $file); 
     header('Content-Type: image/jpeg'); 
     // Output the image 
     @imagepng($imageRes); 
     // Free up memory 
     @imagedestroy($imageRes); 
     die(); 
    } 
} 
elseif ($png != false) { 

    if (file_exists($fileDir . $file)) { 


     $imageRes = imagecreatefrompng($fileDir . $file); 

     header('Content-Type: image/png'); 
     // Output the image 
     @imagepng($imageRes); 
     // Free up memory 
     @imagedestroy($imageRes); 
     die(); 
    } 
} 
?> 

黑匣子返回,在透明區域。

+0

你的問題是? –

+0

如何在顯示圖片時保持透明度 –

+0

我認爲如果您設置了一些元素背景圖片,它將是透明的。 –

回答

0

如果你已經有了一個PNG,你只是想發送到瀏覽器,你不需要爲GD。

header('Content-Type: image/png'); 
fp = fopen($fileDir . $file, "r"); 
fpassthru($fp); 
fclose($fp); /* this is not necessary, but I prefer to keep it */ 
exit(); 

既然您導出的JPEG文件以同樣的方式(順便說一句,你在這部分的錯誤:頭說image/jpeg和你發送與@imagepng()一個PNG),我會重寫你這樣的代碼:

<?php 

$allowedMimes = array("png", "gif", "jpeg"); 
$fileDir = '/home/funkydic/noaccess/avatars/'; 

$file = basename(urldecode($_GET['img'])); 
$file = str_replace("../", "", $file); /* what's this for? you already have basename() */ 

if (file_exists($fileDir . $file)) { 
    $mime = strtolow(pathinfo($file, PATHINFO_EXTENSION)); 
    if ($mime == "jpg") $mime = "jpeg"; 

    if (in_array($mime, $allowedMimes)) { 
     header("Content-Type: image/$mime"); 
     fp = fopen($fileDir . $file, "r"); 
     fpassthru($fp); 
     fclose($fp); 
     exit(); 
    } 
    /* if you get here, extension in the GET request was wrong */ 
} 
/* if you get here, extension in the GET request was wrong or the file doesn't exist */ 
?>