2009-08-10 44 views
9

Tôi đang tải ảnh chụp màn hình sản phẩm lên trang web của mình ... Tôi muốn tải lên hình ảnh gốc như nó và cũng tạo hình thu nhỏ cho nó, nhưng sau khi tải lên cả hai tệp, kích thước của hình thu nhỏ được tạo ra lớn hơn một chút so với dự kiến. Có cách nào tôi có thể giảm kích thước của hình thu nhỏ mà không ảnh hưởng nhiều đến chất lượng trong php hay bằng Imagemagick (tôi không biết cách sử dụng nhưng tôi sẵn sàng tìm hiểu nếu cần) ...
Dưới đây là mã tôi đang sử dụng để tải lên tập tin của tôi ..
nén kích thước tệp hình ảnh khi tải lên?

<form action="<?php echo $_server['php-self']; ?>" 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, 100) ; 

      $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, 100) ; 
     echo "Large image: <img src='images/".$imagepath."'><br>"; 
     echo "Thumbnail: <img src='images/sml_".$imagepath."'>"; 

     } 
    } ?> 

Vui lòng chỉ cho tôi đi đúng hướng ... Cảm ơn

Trả lời

13

Không vượt qua 100 như chất lượng cho imagejpeg() - bất cứ điều gì trên 90 nói chung là quá mức cần thiết và chỉ giúp bạn một JPEG lớn hơn. Đối với hình thu nhỏ, hãy thử 75 và làm việc xuống dưới cho đến khi sự cân bằng chất lượng/kích thước được chấp nhận.

//try this 
imagejpeg($tn, $save, 75) ; 
+1

điều này sẽ tìm vị trí máy chủ của hình ảnh. Nhưng tôi muốn đổi kích thước từ hình ảnh địa phương và tải lên – logan

2

75 là cài đặt chất lượng mặc định, tuy nhiên bạn sẽ nhận thấy chất lượng giảm đáng kể nếu bạn sử dụng. 90 cung cấp cho bạn chất lượng hình ảnh tuyệt vời và giảm kích thước tệp xuống một nửa, nếu bạn muốn giảm kích thước tệp thậm chí còn sử dụng nhiều hơn 85 hoặc 80 nhưng không có gì dưới đây.

1

Nếu sử dụng jpeg, sử dụng chất lượng từ 75 đến 85 thường nhiều hơn chấp nhận được (và 100 mất quá nhiều không gian, để đạt được mức độ quan trọng, btw), ít nhất là đối với ảnh.

Là một sidenote, nếu bạn đang xử lý ảnh chụp màn hình, sử dụng PNG có thể giúp bạn có chất lượng tốt hơn: jpeg làm giảm hình ảnh (nó khá ổn đối với ảnh, nhưng đối với ảnh chụp màn hình, phông chữ được vẽ bằng pixel, có thể mang lại một số hiệu ứng không đẹp mắt)

2

Nó phải là 60, nó là viết tắt của 60%.

Ví dụ: Nếu bạn mở một hình ảnh trong Photoshop và thử lưu nó cho web và chọn jpg, bạn có thể thấy rằng bằng cách sử dụng 60 nó vẫn dưới chất lượng cao, nhưng kích thước tệp thấp hơn. Nếu bạn muốn thấp hơn, với suy thoái nhiều hơn, có nghĩa là màu sắc bị bóp méo nhiều hơn.

Hơn 60 không cung cấp cho bạn bất kỳ điều gì tốt hơn, chỉ kích thước tệp lớn hơn.

Đó là tối ưu hóa hình ảnh chuẩn cho web. Giữ chất lượng cao nhưng giữ kích thước tệp càng thấp càng tốt.

3

Xin chào @halocursed Tôi chỉ cố gắng nén bằng mã của bạn cho loại hình ảnh khác như png và gif so với hình ảnh có màu đen. Vì vậy, tôi sửa đổi khối mã và làm việc tốt cho jpg, png.

<?php 
    if(isset($_POST['submit'])){ 
     if (isset ($_FILES['new_image'])){ 
      // print_r($_FILES); die; 
      $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); 
      $info = getimagesize($target); 
      if ($info['mime'] == 'image/jpeg'){ 
      $image = imagecreatefromjpeg($file); 
      }elseif ($info['mime'] == 'image/gif'){ 
      $image = imagecreatefromgif($file); 
      }elseif ($info['mime'] == 'image/png'){ 
      $image = imagecreatefrompng($file); 
      } 

      imagecopyresampled($tn, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
      imagejpeg($tn, $save, 60); 

      echo "Large image: ".$imagepath; 

     } 
    } 
?> 
Các vấn đề liên quan