2015-12-23 95 views
1

我試圖將JPG(以及任何圖像)轉換爲PNG。我有一個HTML表單,可以很好地將圖像發佈到服務器上。我需要重命名該文件並將其轉換爲PNG。在我執行相關表數據庫插入操作後,在我的代碼中,我再次重命名文件以將記錄ID追加到文件名以確保其唯一性。PHP將POST圖像轉換爲PNG

我更多的是一個客觀的C程序員,然後PHP,所以我在這裏用這個代碼掙扎,我發現在其他問題似乎沒有爲我工作。

這裏是print_r($_FILES);

Array ([image] => Array ([name] => BBnL9Ho.jpg [type] => image/jpeg [tmp_name] => /tmp/phphhqHam [error] => 0 [size] => 1636))

所以,我想將其轉換爲PNG和重命名BBnL9Ho.jpg to image1.png。我曾嘗試使用下面的代碼試過,但無濟於事:

$newfileName = imagepng(imagecreatefromjpeg($_FILES['image']['tmp_name']), "image1.png"); 

後來我做了相關的數據庫表的INSERT後,我再次更改名稱並附加相關的數據庫記錄的ID(我存儲在文件名單獨的表則由於一對多的關係形式的數據的其餘部分):

$fileName="$lastinsertID".$newfileName; 

然後我插入名成正確地進入數據庫。然後我需要將文件移動到上傳目錄,我試圖這樣做:

move_uploaded_file("$fileName",$dir . $fileName); 

這是我的問題所在。該文件不移動,當我檢查文件的屬性時,它似乎並沒有實際轉換文件。我用它來檢查類型:

$fileType = $_FILES["image"]["type"]; 

它仍然顯示它是JPG。我一定錯過了一些非常明顯的事情,但我希望得到一些幫助。

非常感謝。

回答

1

使用以下腳本將任何圖像(JPEG,PNG和GIF)轉換爲PNG格式。仔細閱讀以下腳本,我已經在每個關鍵步驟添加了評論。

// $dir specifies the directory where you upload your image files 

// get the file by it's temporary name 
$tmp_file_name = $_FILES['image']['tmp_name']; 

// get the file extension 
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION)); 

// specify the whole path here 
$actual_file_name = $dir . basename($_FILES['image']['name'], "." . $ext) . ".png"; 

// check whether a valid image is uploaded or not 
if(getimagesize($tmp_file_name)){ 

    // get the mime type of the uploaded image 
    $image_array = getimagesize($tmp_file_name); 
    $mime_type = $image_array['mime']; 

    // get the height and width of the uploaded image 
    list($width_orig, $height_orig) = getimagesize($tmp_file_name); 
    $width = $width_orig; 
    $height = $height_orig; 

    if($mime_type == "image/gif"){ 
     // create a new true color image 
     if($image_p = imagecreatetruecolor($width, $height)){ 

      // create a new image from file 
      if($image = imagecreatefromgif($tmp_file_name)){ 

       // copy and resize part of an image with resampling 
       if(imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig)){ 

        if(imagepng($image_p, $actual_file_name, 0)){ 
         // image is successfully uploaded 
         // free resources 
         imagedestroy($image_p); 
         imagedestroy($image); 

         // perform the insert operation and get the last inserted id 
         // $lastinsertID = XXXX 

         // new file name 
         $filename = $dir . $lastinsertID . basename($_FILES['image']['name'], "." . $ext) . ".png"; 

         //move the file to your desired location 
         if(rename($actual_file_name, $filename)){ 
          echo "success"; 
         }else{ 
          echo "error"; 
         } 

        }else{ 
         //Destroy both image resource handler 
         imagedestroy($image); 
         imagedestroy($image_p); 
         echo "Error"; 
        } 
       }else{ 
        //Destroy both image resource handlers 
        imagedestroy($image); 
        imagedestroy($image_p); 
        echo "Error"; 
       } 
      }else{ 
       //destroy $image_p image resource handler 
       imagedestroy($image_p); 
       echo "Error"; 
      } 
     }else{ 
      echo "Error"; 
     } 
    }elseif($mime_type == "image/png"){ 
     // the uploaded image is already in .png format 
     if(move_uploaded_file($tmp_file_name, $actual_file_name)){ 

      // perform the insert operation and get the last inserted id 
      // $lastinsertID = XXXX 

      // new file name 
      $filename = $dir . $lastinsertID . $_FILES['image']['name']; 

      //move the file to your desired location 
      if(rename($actual_file_name, $filename)){ 
       echo "success"; 
      }else{ 
       echo "error"; 
      } 

     }else{ 
      echo "error"; 
     } 
    }elseif($mime_type == "image/jpeg"){ 
     // create a new true color image 
     if($image_p = imagecreatetruecolor($width, $height)){ 

      // create a new image from file 
      if($image = imagecreatefromjpeg($tmp_file_name)){ 

       // copy and resize part of an image with resampling 
       if(imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig)){ 

        if(imagepng($image_p, $actual_file_name, 0)){ 
         // image is successfully uploaded 
         // free resources 
         imagedestroy($image_p); 
         imagedestroy($image); 

         // perform the insert operation and get the last inserted id 
         // $lastinsertID = XXXX 

         // new file name 
         $filename = $dir . $lastinsertID . basename($_FILES['image']['name'], "." . $ext) . ".png"; 

         //move the file to your desired location 
         if(rename($actual_file_name, $filename)){ 
          echo "success"; 
         }else{ 
          echo "error"; 
         } 

        }else{ 
         //Destroy both image resource handler 
         imagedestroy($image); 
         imagedestroy($image_p); 
         echo "Error"; 
        } 
       }else{ 
        //Destroy both image resource handlers 
        imagedestroy($image); 
        imagedestroy($image_p); 
        echo "Error"; 
       } 
      }else{ 
       //destroy $image_p image resource handler 
       imagedestroy($image_p); 
       echo "Error"; 
      } 
     }else{ 
      echo "error_An unexpected error has been occured. Please try again later."; 
     } 
    }else{ 
     echo "Only JPEG, PNG and GIF images are allowed."; 
    } 

}else{ 
    echo "Bad image format"; 
} 
+0

哇,這太棒了!謝謝!我將致力於實施並與您取得聯繫。非常感謝!我可能需要幾天時間才能找到它。 – mreynol

+0

@mreynol不客氣。讓我知道進展情況。 –

+0

好吧,我能夠給它一個鏡頭,它得到了更多。它將圖像轉換爲PNG! :)。它還將新映像名稱存儲在數據庫中,但它已將目錄名稱附加到數據庫中的文件名稱上,並將其添加到我希望它移動到的位置。另外,它沒有將文件移動到我的$ dir位置。最後,我希望得到的圖像是(lastinsertID)image1.png(例如12345image1.png)。 – mreynol