php

Recortar foto con PHP

Hoy voy a enseñarte a recortar una foto con PHP dando al usuario la posibilidad de recortar una foto y luego guardarla en el servidor con PHP.

De este modo vamos a darle al usuario la opción de recortar una imagen y guardar el resultado en PHP. Luego ya puedes ligar esa foto o imagen a una base de datos, alojarla en el servidor, usarla para crear otra imagen, etcétera.

Usaremos Cropper.js en el lado del cliente y después enviaremos el resultado a PHP. Con esto vamos a ahorrar recursos pues el recorte de la foto se hará del lado del cliente pero al final prácticamente vamos a recortar la foto con PHP.

Explicación

Básicamente vamos a usar dos cosas que ya he expuesto en mi blog. La primera es cómo recortar una foto con JS, pero en este caso no vamos a descargarla, sino enviarla al servidor como expliqué en mi post de enviar un canvas a PHP.

Nota: recuerda que la imagen puede venir de cualquier lugar. Yo usaré una imagen estática por simplicidad.

Preparando interfaz para recortar

Primero veamos el código HTML en donde mostramos la imagen a recortar e iniciamos la librería de Cropper.js. También ahí estamos importando la librería y todo eso:

<!DOCTYPE html>
<html lang="es">

<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Recortar imagen con JavaScript - By Parzibyte</title>
 <script src="js/cropper.min.js"></script>
 <script src="js/script.js"></script>
 <link rel="stylesheet" href="css/cropper.min.css">
 <link rel="stylesheet" href="css/estilo.css">
</head>

<body>
 <div style="text-align: center;">
  <h1>Recortar imagen con JavaScript</h1>
  <br>
  <button id="subir">Subir recorte a PHP</button>
  <br>
  <a href="https://parzibyte.me/blog">By Parzibyte</a>
  <br>
  <img src="video-game-2234745_1920.jpg" id="imagen">
 </div>
</body>

</html>

Presta atención a dos elementos. El primero es el botón con el id subir, que va a enviar la imagen recortada al servidor con PHP.

El segundo elemento es la imagen con el id imagen, el src de esta imagen es la que vamos a poner para que se recorte.

Enviar foto recortada a PHP

Una vez que el usuario haga clic en el botón, se va a obtener el canvas y se subirá a PHP.

document.addEventListener("DOMContentLoaded", () => {
 const $btnSubir = document.querySelector("#subir");
 const $imagen = document.querySelector("#imagen");

 let cropper = new Cropper($imagen, {
  responsive: false, // <-- Si no se pone en false, la imagen se mueve cuando cambia el tamaño de la ventana
 });

 $btnSubir.onclick = async () => {
  if (!cropper) {
   return;
  }
  // Obtener el canvas recortado
  const canvas = cropper.getCroppedCanvas();

  // Convertir la imagen a Base64 y ponerlo en el enlace
  const data = canvas.toDataURL("image/png");
  const fd = new FormData();
  fd.append("imagen", data); // Se llama "imagen", en PHP lo recuperamos con $_POST["imagen"]
  const respuestaHttp = await fetch("imagen.php", {
   method: "POST",
   body: fd,
  });
  const nombreImagenSubida = await respuestaHttp.json();
  console.log("La imagen ha sido enviada y tiene el nombre de: " + nombreImagenSubida);

 };

});

Primero obtenemos el lienzo recortado con getCroppedCanvas, luego lo convertimos a imagen como base64 y lo enviamos a nuestro servidor PHP usando fetch.

El servidor nos responderá con el nombre de la imagen que acabamos de subir. Esto no es obligatorio, solo es para mostrar que podemos manejar la respuesta de PHP.

Fíjate en que enviamos la imagen con FormData y que vamos a recuperarla en PHP accediendo a $_POST en PHP con la clave imagen.

Recibir imagen recortada en PHP

Finalmente veamos el código para recibir la imagen en PHP. Recuerda que vamos a recibir la imagen en base64 así que debemos decodificarla, calcular un nombre único y escribir el contenido en un archivo.

<?php
$imagenCodificada = $_POST["imagen"];
$imagenCodificadaLimpia = str_replace("data:image/png;base64,", "", $imagenCodificada);
$imagenDecodificada = base64_decode($imagenCodificadaLimpia);
$nombreImagenGuardada = "imagen_" . uniqid() . ".png";
file_put_contents($nombreImagenGuardada, $imagenDecodificada);
echo json_encode($nombreImagenGuardada);

Poniendo todo junto

Recortar imagen con PHP y Cropper JS

El código completo del lado del cliente y servidor te lo dejo en mi GitHub. Y así es como podemos dejar que el usuario recorte una foto con PHP y después procesarla para cualquiera de nuestras necesidades.

En mi blog tengo más entradas sobre PHP y JavaScript.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • Hola, vi tu articulo y me sorprende la simplicidad con la que lo creaste, no soy programador ni mucho menos, pero me gusta este mundo, actualmente me gustaria comenzar con Kotlin para hacer algun app (sencilla), muchos saludos tus articulos son muy interesantes

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.