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

Cómo cargar y comprimir imágenes en Laravel

924

¿Estás buscando cómo cargar y comprimir imágenes en Laravel? Laravel proporciona una manera fácil de cargar archivos. Y comprimir las imágenes en el momento de la carga es una buena práctica. En este artículo, te muestro cómo cargar y comprimir imágenes en Laravel.

¿Por qué es necesario comprimir imágenes?

Las imágenes juegan un papel importante en su sitio web. Las imágenes agregan una mejor experiencia de usuario y una experiencia llamativa para los visitantes. Pero al mismo tiempo, también puede acabar con el rendimiento del sitio. Las imágenes pesadas ralentizan el sitio. Como resultado, su sitio tarda mucho en cargarse. A los usuarios no les gustan los sitios web lentos. Si su sitio tarda más en cargarse, es muy probable que pierda su audiencia. El tiempo de carga estándar de un sitio web es de 2 segundos. Debe tener cuidado de que su sitio se cargue en 2 segundos.

Aunque hay varios factores que deben tenerse en cuenta para mejorar la velocidad de la página, uno de ellos es el uso de imágenes optimizadas. La compresión de imágenes reduce el tamaño de la imagen original sin perder su calidad. Ayuda a aumentar la velocidad del sitio.

Dicho esto, veamos cómo cargar y comprimir imágenes en Laravel.

Subiendo imágenes en Laravel

Laravel proporciona una forma limpia de cargar las imágenes. Para comenzar con él, primero necesitamos crear un directorio donde almacenaremos las imágenes. Abra su símbolo del sistema en el directorio raíz y ejecute el siguiente comando.

php artisan storage:link

Este comando crea un directorio de "almacenamiento" en la carpeta "pública".

A continuación, cree un formulario con la entrada del archivo y el botón enviar agregando el siguiente código en su archivo blade.

<form action="{{ url('ROUTE_HERE') }}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="profile_image" id="exampleInputFile">
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

En el HTML anterior, he agregado una entrada de archivo con el nombre ‘profile_image’. También agregué lo {{ csrf_field() }}que se requiere para enviar formularios de Laravel.

Ahora, suponiendo que envíe la solicitud de publicación al store()método de su controlador, escriba un código que almacene la imagen en el servidor como se muestra a continuación.

public function store(Request $request)
{
    if($request->hasFile('profile_image')) {
        //get filename with extension
        $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
 
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
        //get file extension
        $extension = $request->file('profile_image')->getClientOriginalExtension();
 
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        //Upload File
        $request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
 
        //Compress Image Code Here
 
        return redirect('ROUTE_HERE')->with('success', "Image uploaded successfully.");
    }
}

Este código crea un nombre de archivo único y almacena el archivo dentro del directorio ‘profile_images’. Laravel genera automáticamente un directorio ‘profile_images’ en ‘public / storage’ si no existe.

Como se dijo anteriormente, es una mejor práctica optimizar la imagen en el momento de la carga. Terminamos con el código de carga de una imagen. Ahora tenemos que comprimirlo. Voy a cubrir 2 servicios: TinyPNG y reSmush.it, que proporciona las API para comprimir imágenes sobre la marcha. Veámoslos uno por uno.

Comprimir imágenes usando TinyPNG en Laravel

Para comprimir imágenes usando la API de TinyPNG, necesita obtener su clave de API. El proceso es sencillo. Registre su dirección de correo electrónico con ellos y ellos le enviarán su clave de desarrollador.

Una vez que obtenga la clave API, agréguela en el .envarchivo.

Después de esto, instale un paquete TinyPNG usando el comando:

composer require tinify/tinify

Tras la instalación del paquete, tenemos que escribir un código que comprima la imagen cargada usando TinyPNG.

Escriba un código de compresión justo debajo de la línea que carga la imagen.

//Compress Image Code Here
$filepath = public_path('storage/profile_images/'.$filenametostore);
 
try {
    TinifysetKey(env("TINIFY_API_KEY"));
    $source = TinifyfromFile($filepath);
    $source->toFile($filepath);
} catch(TinifyAccountException $e) {
    // Verify your API key and account limit.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(TinifyClientException $e) {
    // Check your source image and request options.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(TinifyServerException $e) {
    // Temporary issue with the Tinify API.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(TinifyConnectionException $e) {
    // A network connection error occurred.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
} catch(Exception $e) {
    // Something else went wrong, unrelated to the Tinify API.
    return redirect('ROUTE_HERE')->with('error', $e->getMessage());
}

El código anterior toma una imagen del directorio cargado, la envía al servidor TinyPNG para su compresión y, después de recibir una respuesta, almacena la imagen comprimida en el mismo directorio.

Este proceso se ejecuta en segundo plano. No necesita preocuparse por cómo la imagen va al servidor TinyPNG, cómo recibe la respuesta de la API. La biblioteca TinyPNG hace todas las tareas por usted.

Intente cargar la imagen ahora y debería ver que su imagen se comprime.

Comprimir imágenes usando reSmush.it en Laravel

TinyPNG funciona bien pero tiene la limitación de optimizar 500 imágenes gratuitas por mes. Si desea comprimir más de 500 imágenes, debe pagarlas. Alternativamente, los usuarios pueden elegir un servicio gratuito de reSmush.it para la compresión de imágenes. En el momento de escribir este artículo, reSmush.it comprime más de 7 mil millones de imágenes. Esto es suficiente para decir sobre la popularidad de este servicio.

Entonces, escriba el código a continuación que comprime las imágenes usando reSmush.it en Laravel.

//Compress Image Code Here
$filepath = public_path('storage/profile_images/'.$filenametostore);
$mime = mime_content_type($filepath);
$output = new CURLFile($filepath, $mime, $filenametostore);
$data = ["files" => $output];
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.resmush.it/?qlty=80');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if (curl_errno($ch)) {
    $result = curl_error($ch);
}
curl_close ($ch);
 
$arr_result = json_decode($result);
 
// store the optimized version of the image
$ch = curl_init($arr_result->dest);
$fp = fopen($filepath, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

He pasado el valor de calidad como 80 ?qlty=80en el código anterior. Puedes jugar pasando diferentes valores de calidad.

Espero que entiendas cómo cargar y comprimir imágenes en Laravel. 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