0

我有一個圖像庫,用戶可以在上傳圖像後上傳圖像,PHP腳本創建它的兩個副本 - 一個用於縮略圖,另一個用於在較大尺寸的圖庫中顯示。imagecreatefromstring對於某些PNG圖像文件返回false

應用程序工作正常,只是,當上傳一些圖片PNG,聲明

if([email protected]($filedata)) 

返回false。

以下是腳本。請幫忙。

<!---------------Processing uploaded image-----------------> 
<?php 
if (isset($_FILES['file1'])) 
    { 
     if($fgmembersite->CheckLogin()) 
      { 
      if($_FILES['file1']['error']>0) 
       { 
       echo "file upload error".$_FILES['file1']['error']; 
       } 
      else 
       {  
       $allowedtype=array('image/jpg','image/jpeg','image/pjpeg','image/gif','image/png'); 
       $maxsize=10*1024*1024; 
       $filename= mysql_real_escape_string($_FILES['file1']['name']); 
       $tmp_name=$_FILES['file1']['tmp_name']; 
       $size=$_FILES['file1']['size']; 
       $type=$_FILES['file1']['type']; 
       $ext=$filename; 
       if (!in_array($type,$allowedtype)) 
        { 
        die ('Invalid file type'); 
        } 
       if ($size>$maxsize) 
        { 
        die ('error- file size must be less than'.($maxsize/1024/1024).'MB'); 
        } 
       filedata=file_get_contents($tmp_name); 
       if([email protected]($filedata)) 
        { 
        $width=imagesx($image); 
        $height=imagesy($image); 

        //creating images 
        $large=imagecreatetruecolor(445,380); 
        imagecopyresampled($large,$image,0,0,0,0,445,380,$width,$height); 
        $largepath = 'image/large/' . uniqid('img',true) . '.jpg' ; //assigning file location and path 
        $thumb=imagecreatetruecolor(54,54); 
        imagecopyresampled($thumb,$image,0,0,0,0,54,54,$width,$height); 
        $thumbpath = 'image/thumb/' . uniqid('thumb',true) . '.jpg' ; 
        if (imagejpeg($thumb,$thumbpath) && imagejpeg($large,$largepath)) 
         { 
         $con = connect(); 
         query("INSERT INTO gallery (caption,thumbpath,largepath) values ('$caption','$thumbpath','$largepath')"); 
         } 
        header('location:'.$_SERVER["PHP_SELF"]); 
        } 
       else 
        echo "failed"; 
       } 
     } 
    } 
?> 

回答

3

檢查上imagejpeg手動,它需要一個可選的第三個參數是質量(0 - 100):

if (imagejpeg($thumb,$thumbpath, 92) && imagejpeg($large,$largepath, 96)) 
+0

謝謝,用給定的語法嘗試過,但沒有結果。 – 2013-03-12 14:22:27

+0

@HYDERALI你確定你看到的是修改後的圖像,而不是緩存的版本?您應該嘗試生成大量不同質量的相同圖像,並比較文件大小和視覺質量。 – jeroen 2013-03-12 14:23:54

+0

我從同一圖像生成不同質量參數(0 - 100)的圖像。文件大小和質量都得到提高。但即使以100爲質量參數,也不具有原始圖像的質量和文件大小。 – 2013-03-12 14:40:05

相關問題