2009-08-10 3 views
9

Я загружаю скриншоты продуктов на свой сайт ... Я хочу загрузить исходное изображение так, как оно есть, а также создать для него миниатюру, но после загрузки обоих файлов размер создаваемого миниатюры немного больше, чем ожидалось. Есть ли способ уменьшить размер файла эскиза без ущерба для качества в php или с помощью Imagemagick (который я понятия не имею, как использовать, но я хочу узнать, если необходимо) ...
Ниже приведено код я использую, чтобы загрузить свои файлы ..
сжать размер файла изображения при загрузке?

<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."'>"; 

     } 
    } ?> 

Просьба указать меня в правильном направлении ... Спасибо

ответ

13

Не передавайте 100, как качество для imagejpeg() - ничего более 90, как правило, избыточна и просто получает вас больше JPEG. Для эскиза попробуйте 75 и работайте вниз, пока не будет приемлемым соотношение качества и размера.

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

Это поиск местоположения сервера. Но я хотел изменить размер локального изображения и загрузить – logan

2

75 - настройка качества по умолчанию, однако вы заметите значительное снижение качества, если вы ее используете. 90 дает вам отличное качество изображения и уменьшает размер файла в два раза, если вы хотите еще больше уменьшить размер файла, используя 85 или 80, но ничего не понимаете.

1

При использовании jpeg использование качества от 75 до 85 обычно более чем приемлемо (и 100 занимает слишком много места, для усиления, которое не так важно, кстати), по крайней мере для фотографий.

В качестве побочного элемента, если вы имеете дело со скриншотами, использование PNG может улучшить качество изображения: jpeg ухудшает изображения (это нормально для фотографий, но для скриншотов, с шрифтами, которые нарисованы пикселями, может принести некоторый нехороший эффект)

2

Должно быть 60, оно составляет 60 процентов.

Пример: Если вы открыли изображение в Photoshop и попробуйте сохранить его в Интернете и выберите jpg, вы можете увидеть, что с помощью 60 он все еще находится под высоким качеством, но имеет меньший размер файла. Если вы хотите снизить, с большей деградацией, то есть цвета будут искажены больше.

Более 60 не дают вам ничего лучшего, только больший размер файла.

Это стандартная оптимизация изображения для Интернета. Сохраняйте высокое качество, но сохраняйте размер файла как можно ниже.

3

Здравствуйте, @ halocursed Я просто пытаюсь сжать, используя ваш код для другого типа изображения, такого как png и gif, чем изображение становится черным. Итак, я модифицирую блок кода и хорошо работаю для 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; 

     } 
    } 
?> 
Смежные вопросы