2014-03-01 194 views
3

我正在上傳屏幕截圖到我的網站。 我想上傳與寬度和高度相同的屬性的原始圖像,只有我想減小其大小,例如,如果上傳前的圖像大小是3 MB,然後上傳/保存它必須是300 KB但在我的情況下圖像是生成沒有顯示完全空白的圖像。上傳壓縮圖像大小-PHP

下面是我用上傳我的文件的代碼..

<form action="" method="post" enctype="multipart/form-data" id="something" class="uniForm"> 
    <input name="new_image" id="new_image" size="30" type="file" class="fileUpload" /> 
    <button name="submit" type="submit" class="submitButton">Upload/Resize Image</button> 

<?php 
    if(isset($_POST['submit'])){ 
     if (isset ($_FILES['new_image'])){ 
      $imagename = $_FILES['new_image']['name']; 
      $source = $_FILES['new_image']['tmp_name']; 
      $target = "images/".$imagename; 
      move_uploaded_file($source, $target); 

      $imagepath = $imagename; 
      $save = "images/" . $imagepath; //This is the new file you saving 
      $file = "images/" . $imagepath; //This is the original file 

      list($width, $height) = getimagesize($file) ; 


      $tn = imagecreatetruecolor($width, $height) ; 
      $image = imagecreatefromjpeg($file) ; 
      imagecopyresampled($tn, $image, 0, 0, 0, 0, $width, $height, $width, $height) ; 

      imagejpeg($tn, $save, 70) ; 

      $save = "images/sml_" . $imagepath; //This is the new file you saving 
      $file = "images/" . $imagepath; //This is the original file 

      list($width, $height) = getimagesize($file) ; 

      $modwidth = 130; 

      $diff = $width/$modwidth; 

      $modheight = 185; 
      $tn = imagecreatetruecolor($modwidth, $modheight) ; 
      $image = imagecreatefromjpeg($file) ; 
      imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height) ; 

      imagejpeg($tn, $save, 70) ; 
     echo "Large image: <img src='images/".$imagepath."'><br>"; 
     echo "Thumbnail: <img src='images/sml_".$imagepath."'>"; 

     } 
    } ?> 

它工作正常,如果我上傳jpg圖片/但不是爲別人打工 我想用它爲每個圖像類型

回答

1

對於類型檢測使用下面的代碼和說明。

<?php 
function imageCreateFromAny($filepath) { 
    $type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize() 
    $allowedTypes = array(
     1, // [] gif 
     2, // [] jpg 
     3, // [] png 
     6 // [] bmp 
    ); 
    if (!in_array($type, $allowedTypes)) { 
     return false; 
    } 
    switch ($type) { 
     case 1 : 
      $im = imageCreateFromGif($filepath); 
     break; 
     case 2 : 
      $im = imageCreateFromJpeg($filepath); 
     break; 
     case 3 : 
      $im = imageCreateFromPng($filepath); 
     break; 
     case 6 : 
      $im = imageCreateFromBmp($filepath); 
     break; 
    } 
    return $im; 
} 
?> 
0
//This may not be the answer 

//in php we have different functions for different image formats so this may helps you 
imagecreatefromjpeg (string $filename) 
imagecreatefrompng (string $filename) 
imagecreatefromgif (string $filename) 

imagecreatefromjpeg DOC

imagecreatefrompng DOC

imagecreatefromgif DOC

+0

感謝兄弟 我KNW他們 我已經使用了1,我真的不KNW如何使用檢測的類型,如果源PNG或其他這樣我們就可以據此查詢 – user3177068