✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cargar y comprimir varias imágenes en PHP

273

Recientemente, uno de nuestros lectores preguntó cómo cargar y comprimir varias imágenes en PHP. Hay ciertos escenarios en los que debemos permitir que los usuarios carguen varias imágenes. Siempre es una buena práctica optimizar las imágenes en el momento de la carga. En este artículo, estudiamos la carga de varias imágenes y cómo comprimir imágenes durante el proceso de carga.

¿Por qué necesitamos reducir el tamaño del archivo de imagen?

Sin duda, las imágenes juegan un papel importante en su sitio web. Las imágenes llamativas atraen la atención de los lectores y pasarían más tiempo en el sitio web. Pero al mismo tiempo, las imágenes de gran tamaño ralentizan su sitio web. Como se necesita más ancho de banda, su sitio web tarda más en cargar las páginas web. Los propietarios del sitio deben prestar atención para reducir el tamaño del archivo de imagen y utilizar la mejor herramienta de compresión de imágenes para ello.

Le mostraré dos formas de comprimir imágenes: TinyPNG y el paquete artisansweb / image-optimizer.

TinyPNG es uno de los servicios de compresión de imágenes más populares en la web. Este servicio permite comprimir 500 imágenes al mes de forma gratuita a través de sus API. Por más de 500 imágenes, debes pagarlas.

Si tiene que optimizar más de 500 imágenes por mes y no quiere pagar, utilice el paquete ‘artisansweb / image-optimizer’. Este paquete utiliza el servicio reSmush.it para optimizar la imagen.

Recomendaría probar ambas soluciones, comparar el resultado y elegir la que sea adecuada para usted.

Habiendo dicho eso, echemos un vistazo a cómo comprimir imágenes después de cargarlas.

Empezando con TinyPNG

Para comenzar, debe obtener una clave API de TinyPNG. Haga clic aquí para obtener su clave API. Solo necesita ingresar su nombre y dirección de correo electrónico y recibirá el correo electrónico de su clave.

Cargar y comprimir varias imágenes en PHP

Una vez que obtenga su clave de desarrollador, instale una biblioteca PHP proporcionada por TinyPNG. Debe tener Composer instalado en el sistema para instalar la biblioteca. Abra la terminal en el directorio raíz de su proyecto y ejecute el comando:

composer require tinify/tinify

Cómo comprimir imágenes usando TinyPNG

Como se menciona en el título de este artículo, veremos cómo cargar y comprimir varias imágenes. Para esto, necesitamos crear un formulario HTML que tenga entrada de archivo para buscar múltiples imágenes. Cree index.phpy coloque el siguiente código en él.

index.php

<form method="post" enctype="multipart/form-data" action="process_images.php">
    <p>
        <label>Upload Images</label>
        <input type="file" name="images[]" accept="image/*" multiple>
    </p>
    <button type="submit" name="submit">Submit</button>
</form>

A la entrada del archivo le di un nombre como imágenes []. Esto se debe a que en el lado del servidor necesitamos una serie de archivos, ya que el usuario buscará varias imágenes.

Una vez que examinemos las imágenes y presionemos el botón de enviar, se enviarán los datos del formulario al archivo process_images.php. Este es el archivo donde necesitamos escribir un código para cargar y comprimir imágenes.

process_images.php

<?php
// Increase PHP execution time
set_time_limit(0);
 
require_once("vendor/autoload.php");
TinifysetKey("YOUR_API_KEY");
 
if (isset($_POST['submit'])) {
    $supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
 
    if (!file_exists(getcwd(). '/uploads')) {
        mkdir(getcwd(). '/uploads', 0777);
    }
  
    foreach($_FILES['images']['name'] as $key=>$val) {
        $file_name = $_FILES['images']['name'][$key];
  
        // get file extension
        $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
  
        // get filename without extension
        $filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
  
        if (in_array($_FILES['images']['type'][$key], $supported_images)) {
            $filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
            move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
  
            // optimize image using TinyPNG
            try {
                $source = TinifyfromFile(getcwd().'/uploads/'.$filename_to_store);
                $source->toFile(getcwd().'/uploads/'.$filename_to_store);
            } catch(Exception $e) {
                echo $e->getMessage();
                exit;
            }
        }
    }
    echo "Files uploaded successfully.";
}

Asegúrese de reemplazar el marcador de posición con su clave API real. En el código anterior, estamos generando un nombre de archivo único agregando tiempo. Una vez que se carga una imagen en el servidor, enviamos la imagen a la API de TinyPNG para su optimización. A cambio, obtenemos la versión comprimida de la imagen que almacenamos en el mismo lugar y con el mismo nombre de archivo.

Comprimir imágenes usando el paquete artisansweb / image-optimizer

He desarrollado el paquete Image Optimizer. Este paquete utiliza el servicio reSmush.it bajo el capó para optimizar imágenes. Si está buscando un servicio gratuito, pruebe este paquete. El reSmush.it ha optimizado miles de millones de imágenes hasta ahora. Este paquete no requiere proporcionar ninguna clave o registro. Simplemente conéctelo y listo.

Para comenzar con el paquete Image Optimizer, instálelo usando el comando:

composer require artisansweb/image-optimizer

A continuación, el código en el process_image.phpse modificará de la siguiente manera.

<?php
// Increase PHP execution time
set_time_limit(0);
 
require_once("vendor/autoload.php");
 
use ArtisansWebOptimizer;
 
if (isset($_POST['submit'])) {
    $supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
 
    if (!file_exists(getcwd(). '/uploads')) {
        mkdir(getcwd(). '/uploads', 0777);
    }
  
    foreach($_FILES['images']['name'] as $key=>$val) {
        $file_name = $_FILES['images']['name'][$key];
  
        // get file extension
        $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
  
        // get filename without extension
        $filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
  
        if (in_array($_FILES['images']['type'][$key], $supported_images)) {
            $filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
            move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
  
            // optimize image
            try {
                $img = new Optimizer();
                $source = getcwd().'/uploads/'.$filename_to_store;
                $img->optimize($source);
 
            } catch(Exception $e) {
                echo $e->getMessage();
                exit;
            }
        }
    }
    echo "Files uploaded successfully.";
}

Espero que comprenda cómo cargar y comprimir varias imágenes en PHP. Me gustaría escuchar sus pensamientos y sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More