Pregunta Librería GD

eXtreM3

Buenas! ¿Hay alguna manera de retocar una imagen en php?, me explico:

Tengo un formulario mediante el cual subo una imagen al servidor, y me ha surgido una necesidad: las imágenes tienen que ser cuadradas.

La primera opción que se me ha ocurrido es simplemente restringir la subida a que el alto sea igual que el ancho, pero esto no es muy... como se dice... cómodo para el usuario, tener que andar retocando una foto, las dimensiones... nada, casi lo descarto automáticamente.

Se me ha ocurrido - solución real que busco con este hilo - que cuando el usuario sube una imagen (por ejemplo de 640x480 pixeles, autorrellenar la imagen con color BLANCO (es el fondo de la web y no pasaría nada, está todo pensado xD) para que quede cuadrada.

Es decir en el ejemplo que he puesto, pues habría que hacer la siguiente operación:

640 - 480 = 160 píxeles blancos a rellenar / 2 = 80 píxeles blancos a rellenar por arriba y por abajo

Es posible esto?

Os muestro mi ejemplo con un par de imágenes aclaratorias:

El usuario sube esta imagen:

ahora es cuando hay que realizar las instrucciones pertinentes en el código, para que la imagen final sea esta:

Sé que con la libreria GD se pueden dibujar rectangulos y rellenarlos del color que quieras (he mirado ejemplos y sé cómo pintar rectangulos blancos, que es precisamente lo que quiero, pero lo que no sé es cómo hacerlo para una imagen...)

A ver si fuera posible... al que me de la solución (o un tutorial de donde mirarlo, etc) le hago un monumento xD

MUCHAS GRACIASSSS

erdanblo

Sí puedes hacerlo.

¿Como?

No tengo ni puta idea ya que me tendria que mirar la documentación. Pero creo que el quid de la cuestión esta en crear un nuevo objeto imagen, y traerte la imagen que subas a este objeto, centrarla, y rellenar de blanco.

Mirate las imagecreatefrom

http://es.php.net/manual/en/book.image.php

Y luego te preocupas del problema de centrar y rellenar.

eXtreM3

Me parece buena idea..., entonces si el usuario sube una imagen de 640x480, tendría que:

  1. Guardar esa imagen
  2. Crear una nueva imagen totalmente blanca de 640x640
  3. Colocar la imagen original centrada (esto es lo más difícil xD) encima de la nueva
  4. Guardar el resultado

Voy a intentarlo, gracias ;)

edit: me podias haber puesto el enlace en español xD http://docs.php.net/manual/es/book.image.php

PiradoIV

Te va a llegar simplemente con mirar estas funciones:

$dst_image = imagecreatetruecolor($ancho, $alto);
$src_image = imagecreatefromjpeg($nombre_del_fichero) // (o frompng, fromgif, ...);
imagecopyresampled($dst_image, $src_image, ...); // mírate la documentación

Para no cargar el servidor, puedes generar la imagen y guardarla en un fichero, así no la tendrás que generar cada vez.

bLaKnI

Eso ultimo es lo que hacemos nosotros con un CMS en particular.

Cuando la imagen pasada no tiene los tamaños predefinidos, siempre se redimensiona a un tamaño particular que mantenga proporciones y se rellena el espacio restante en width y height mediante las funciones de PHP para crear imagenes.
Fondo gris, y ale! (en tu caso blanco... xD)

Ahora no tengo el codigo a mano, soz! :(

eXtreM3

Una pregunta... ya he conseguido arreglar mi problema... al final no pude hacer lo de rellenar de blanco el espacio sobrante, pensé una solución mejor y la llevé a cabo.

Cuando termino de hacer todas las operaciones con mi $imagen, es bueno para el servidor hacer un imagedestroy($imagen) ??? He leído por ahí en documentaciones que libera de la memoria del servidor la carga que ha generado $imagen, realmente es bueno? pregunto.

Otra pregunta, dónde hay que poner esa instrucción? al final de todo?

bLaKnI

Hay que ponerlo! Si y si!
Porque eso no es mas que una estructura de datos interna que se ha usado para gestar la imagen final.
Esta ya esta en disco, así que el Object debes liberarlo.
Ponlo justo cuando hayas acabado de realizar todas las tareas con la imagen particular.

Si es un bucle, para cada imagen, entonces eso va dentro del bucle, porque debes destruir cada Object recreado.

eXtreM3

#7 perfecto gracias ^^

Usuarios habituales

  • eXtreM3
  • bLaKnI
  • PiradoIV
  • erdanblo