2009-08-10 22 views
9

Estoy cargando capturas de pantalla del producto a mi sitio web ... Quiero subir la imagen original tal como está y también crear una miniatura para ella, pero después de subir ambos archivos, el tamaño de archivo de la miniatura creada es un poco mayor de lo esperado. ¿Hay alguna manera de que pueda reducir el tamaño del archivo de la miniatura sin comprometer demasiado la calidad de php o el uso de Imagemagick (que no tengo ni idea de cómo usarlo pero estoy dispuesto a aprender si es necesario) ...
A continuación se muestra el código que estoy usando para subir mis archivos ..
comprimir el tamaño del archivo de imagen al cargarlo?

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

     } 
    } ?> 

favor me punto en la dirección correcta ... Gracias

Respuesta

13

No pase 100 como la calidad de imagejpeg() - algo más de 90 es generalmente una exageración y apenas se consigue un mayor JPEG. Para una miniatura, pruebe 75 y trabaje hacia abajo hasta que la compensación de calidad/tamaño sea aceptable.

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

esto busca la ubicación del servidor de la imagen. Pero quería cambiar el tamaño de la imagen local y cargar – logan

2

75 es la configuración de calidad predeterminada, sin embargo, notará que la calidad disminuirá considerablemente si la usa. 90 le ofrece una gran calidad de imagen y reduce el tamaño del archivo a la mitad, si desea reducir el tamaño del archivo, use aún más 85 u 80, pero nada debajo de eso.

1

Si usa jpeg, usar una calidad entre 75 y 85 es generalmente más que aceptable (y 100 lleva demasiado espacio, para una ganancia que no es tan importante, por cierto), al menos para las fotos.

Como nota al margen, si se trata de capturas de pantalla, usar PNG puede obtener una mejor calidad: jpeg degrada las imágenes (está bastante bien para fotos, pero para capturas de pantalla, con fuentes dibujadas por píxeles, puede traer un efecto no agradable)

2

Debe ser 60, representa el 60 por ciento.

Ejemplo: Si abre una imagen en Photoshop e intenta guardarla para web y selecciona jpg, puede ver que al usar 60 sigue estando en alta calidad, pero con un tamaño de archivo inferior. Si quieres más bajo, con más degradación, lo que significa que los colores se distorsionan más.

Más de 60 no le da nada mejor, solo un tamaño de archivo más grande.

Es la optimización de imagen estándar para web. Mantenga la calidad pero mantenga el tamaño del archivo lo más bajo posible.

3

Hola @halocursed Solo trato de comprimir usando su código para diferentes tipos de imágenes como png y gif que la imagen viene en negro. Entonces, modifico el bloque de código y trabajo bien para 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; 

     } 
    } 
?> 
Cuestiones relacionadas