Cargar y cambiar el tamaño de varias imágenes en Laravel
Aparte de este blog, estoy ejecutando un canal de YouTube donde comparto los videos tutoriales. Recientemente, uno de los suscriptores del canal de YouTube preguntó sobre cómo cambiar el tamaño de varias imágenes en Laravel. Quieren cambiar el tamaño de varias imágenes de una vez. En este artículo, estudiamos cómo cargar y cambiar el tamaño de varias imágenes en Laravel.
Intervention Image es una biblioteca de código abierto que nos permite manipular imágenes. Voy a usar esta biblioteca para cambiar el tamaño de las imágenes.
Empezando
Para lograr nuestro objetivo, debe instalar y configurar la biblioteca de imágenes de intervención en el proyecto Laravel. Abra la terminal en el directorio raíz de su proyecto y ejecute el comando:
composer require intervention/image
Una vez instalada la biblioteca, abra el config/app.php
archivo y agregue proveedores de servicios, fachada en él. Agregue los proveedores de servicios para este paquete a la $providers
matriz.
InterventionImageImageServiceProvider::class,
Agregue la fachada a la $aliases
matriz.
'Image' => InterventionImageFacadesImage::class,
A continuación, necesitamos un directorio donde almacenamos nuestros archivos cargados. Laravel Filesystem proporciona un disco público para almacenar los archivos. El disco público contiene archivos que son de acceso público. Encontrará los archivos cargados en la storage/app/public
carpeta. Para acceder a estos archivos en la web, debe crear un enlace simbólico desde public/storage
hasta storage/app/public
.
Crea un enlace simbólico usando el comando:
php artisan storage:link
Este comando crearía una carpeta de almacenamiento en el directorio público. Aquí es donde almacenamos nuestros archivos.
Cargar y cambiar el tamaño de las imágenes en Laravel
Para cargar archivos en un servidor, necesita un formulario. Creemos un formulario donde puede seleccionar varios archivos para cargar en un servidor. A continuación se muestra un código de muestra del formulario que irá dentro de su archivo de vista.
<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" multiple />
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
En el formulario, he tomado un nombre de entrada de archivo como ‘profile_image []’ que envía una serie de archivos al servidor. Además, agregué un atributo ‘múltiple’ que nos permite seleccionar varios archivos. Reemplace el marcador de posición ROUTE_URL con su valor real.
Como necesitamos cargar y cambiar el tamaño de las imágenes, en el controlador agregue dos fachadas de la siguiente manera.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image; //Intervention Image
use IlluminateSupportFacadesStorage; //Laravel Filesystem
class ImageController extends Controller
{
}
Al agregar la fachada, puede llamar a las funciones de cambio de tamaño de la biblioteca de imágenes de intervención. En el siguiente código, subiré los archivos en dos lugares. Uno es la imagen original. El segundo está en el directorio de miniaturas. Primero cargamos la imagen original en la carpeta de miniaturas y luego la cambiamos de tamaño.
public function store(Request $request)
{
if ($request->hasFile('profile_image')) {
foreach($request->file('profile_image') as $file){
//get filename with extension
$filenamewithextension = $file->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $file->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.uniqid().'.'.$extension;
Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));
Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));
//Resize image here
$thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
}
return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");
}
}
Aquí estamos cambiando el tamaño de la imagen proporcionalmente. Al hacerlo, mantenemos la relación de aspecto y la imagen no se cortará. Estoy pasando el ancho como 400 y la altura como 150. Puede cambiar estos valores según sus necesidades.
Adelante, pruébalo. Obtendrá la versión de cambio de tamaño de las imágenes cargadas en el directorio ‘storage / profile_images / thumbnail’.
Si está buscando un cultivo duro, reemplace las líneas siguientes
$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
$constraint->aspectRatio();
});
$img->save($thumbnailpath);
Con
$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);
Espero que entiendas cómo cargar y cambiar el tamaño de varias imágenes en Laravel. Comparta sus pensamientos y sugerencias en la sección de comentarios a continuación.
Artículos relacionados
- Cómo cargar un archivo a S3 usando el sistema de archivos Laravel
- Cómo realizar una copia de seguridad de la aplicación Laravel
- Cómo integrar el boletín de MailChimp en la aplicación Laravel