1

我做的文件上传脚本,上传的时候会上传模糊的图片!这是我目前的脚本,试着找出我做错了什么。该脚本将图像上传为 .png,其中用户名是当前登录用户的实际用户名。

请注意,原始图像是 17x22,所以这并不是让它变得模糊的原因。

<?php
include('../class/resize.php');
//error_reporting(0);
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
$path = "../files/cloaks/"; //set your folder path
$filename = $_FILES['photoimg']['tmp_name']; //get the temporary uploaded image name
$valid_formats = array("jpg", "png", "gif", "bmp", "jpeg","GIF","JPG","PNG", "JPEG"); //add the formats you want to upload

        $name = $_FILES['photoimg']['name']; //get the name of the image
        $size = $_FILES['photoimg']['size']; //get the size of the image
        if(strlen($name)) //check if the file is selected or cancelled after pressing the browse button. 
        {
            list($txt, $ext) = explode(".", $name); //extract the name and extension of the image
            if(in_array($ext,$valid_formats)) //if the file is valid go on.
            {
            if($size < 2098888) // check if the file size is more than 2 mb
            {
            $actual_image_name =  $_POST['fname']; //actual image name going to store in your folder
            $tmp = $_FILES['photoimg']['tmp_name']; 
            if(move_uploaded_file($tmp, $path.$actual_image_name)) //check the path if it is fine
                {   
                    move_uploaded_file($tmp, $path.$actual_image_name); //move the file to the folder
                    $dburl = ('../files/cloaks/'.$actual_image_name.'');
                    $image = new ZiResize();
                    $image->load($dburl);
                    $image->resize(22,17);
                    $image->save($path.$actual_image_name);
                    //display the image after successfully upload
                    echo "<img src='files/cloaks/".$actual_image_name."'  class='preview'> <input type='hidden' name='actual_image_name' id='actual_image_name' value='$actual_image_name' />";

                }
            else
                {
                echo "failed";
                }
            }
            else
            {
                echo "Error! Max image size is 2 MB!";                  
            }
            }
            else
            {
                echo "Error! Invalid image format!";    
            }
        }
        else
        {       
        echo "Error! No file selected!";
        }       
    exit;
    }
?>

调整大小.php 代码

<?php
class ZiResize {

   var $image;
   var $image_type;

   function load($filename) {

      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {

         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {

         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {

         $this->image = imagecreatefrompng($filename);
      }
   }
   function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {

      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image,$filename,$compression);
      } elseif( $image_type == IMAGETYPE_GIF ) {

         imagegif($this->image,$filename);
      } elseif( $image_type == IMAGETYPE_PNG ) {

         imagepng($this->image,$filename);
      }
      if( $permissions != null) {

         chmod($filename,$permissions);
      }
   }
   function output($image_type=IMAGETYPE_JPEG) {

      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image);
      } elseif( $image_type == IMAGETYPE_GIF ) {

         imagegif($this->image);
      } elseif( $image_type == IMAGETYPE_PNG ) {

         imagepng($this->image);
      }
   }
   function getWidth() {

      return imagesx($this->image);
   }
   function getHeight() {

      return imagesy($this->image);
   }
   function resizeToHeight($height) {

      $ratio = $height / $this->getHeight();
      $width = $this->getWidth() * $ratio;
      $this->resize($width,$height);
   }

   function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }

   function scale($scale) {
      $width = $this->getWidth() * $scale/100;
      $height = $this->getheight() * $scale/100;
      $this->resize($width,$height);
   }

   function resize($width,$height) {
      $new_image = imagecreate($width, $height); 
      imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
      $this->image = $new_image;
   }      

}
?>
4

2 回答 2

1

保存图像时更改compression参数

function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null)

您使用的是 jpg 格式,在 php 中,您可以设置结果图像的质量,如果该质量低于原始图像,即使没有调整大小,图像也会看起来“模糊”。

你可以:

  1. 更改压缩值 ($image->save($path.$actual_image_name, NULL, 100);
  2. 将图像格式更改为不支持“压缩”的其他格式

由于您没有调整图像大小,因此可以替换它:

$image->resize(22,17);
$image->save($path.$actual_image_name);

有了这个:

$image->save($path.$actual_image_name, NULL, 100);
于 2013-03-06T13:37:53.490 回答
0

您将大小调整为 22 像素 x 17 像素。当您将图像缩小到该尺寸时,它总是看起来很模糊。您还应该使用imagecreatetruecolor它,因为它允许全色谱。imagecreate 的颜色有限,这是图像看起来模糊的另一个原因

于 2013-03-06T13:28:26.290 回答