Foros del Web » Programando para Internet » PHP »

Rellenar exceso en thumbnails

Estas en el tema de Rellenar exceso en thumbnails en el foro de PHP en Foros del Web. Hola. He estado buscando en el foro y hay muchos posts sobre thumbnails, pero no consigo encontrar mi duda. A ver, yo cargo un jpg ...
  #1 (permalink)  
Antiguo 17/11/2004, 04:29
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 15 años
Puntos: 20
Rellenar exceso en thumbnails

Hola. He estado buscando en el foro y hay muchos posts sobre thumbnails, pero no consigo encontrar mi duda.

A ver, yo cargo un jpg del servidor, lo reduzco a unas dimensiones y lo grabo. El problema es que al forzar las dos dimensiones, alguna se me suele "quedar corta", y se rellena de negro. Mi pregunta es: ¿cómo puedo cambiar ese color de relleno?

Gracias de antemano.

Mario.
  #2 (permalink)  
Antiguo 17/11/2004, 05:16
 
Fecha de Ingreso: septiembre-2004
Ubicación: Viviendo en Manresa(Barcelona)
Mensajes: 230
Antigüedad: 13 años, 2 meses
Puntos: 0
Mira en www.php.net las funciones de imagenes, puede que alli encuentres la que te hace falta.
  #3 (permalink)  
Antiguo 17/11/2004, 06:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y .. por qué no ajustas el tamaño de tu imagen proporcional (a un ancho o algo fijo)? ..

Un saludo,
  #4 (permalink)  
Antiguo 17/11/2004, 11:01
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 15 años
Puntos: 20
No entiendo, Cluster. Yo lo que hago es lo siguiente:


Código PHP:
$ancho_foto_reducida=120;
$alto_foto_reducida=100;
$ratio=$ancho_foto_reducida/$alto_foto_reducida;

$foto_grande=imagecreatefromjpeg($ruta.$nombre_foto);
$ancho_foto_grande=imagesx($foto_grande);
$alto_foto_grande=imagesy($foto_grande);
        
$foto_reducida=imagecreatetruecolor($ancho_foto_reducida,$alto_foto_reducida);

imagecopyresampled($foto_reducida,$foto_grande,0,0,0,0,$ancho_foto_reducida,$alto_foto_reducida,$ancho_foto_grande,($ancho_foto_grande/$ratio));
    
imagejpeg($foto_reducida,$ruta.$nombre_foto); 


Es decir, le digo que coja de la foto grande una zona con las mismas proporciones que 120x100, y la reduzca a 120x100 (para evitar deformaciones). Si la foto grande es de 1200x900, por ejemplo, la aplicación coge una zona de 1200x1000 (sobran 100 píxeles de altura) y la reduce a 120x100. Esos píxeles de altura que sobran los rellena de negro, y yo necesito que los rellene de blanco.

Gracias.
  #5 (permalink)  
Antiguo 17/11/2004, 11:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El tema de "proporción" es que tu imagen quede a X pixels de ancho .. o Y de algo fijos .. y de la otra coordenada .. lo que dé.

Un ejemplo:
http://www.onlinetools.org/articles/...humbnails3.php

Pruebalo .. Fijate que se hace un cálculo sobre el tamaño de la imagen original .. para respetar eso mismo .. la proporcion.

por qué si tus imagenes son de proporcion 4:3 por ejemplo (lo típico para una fotografía digital .. una captura de una pantalla ...) no tendrás problemas .. y si no cumplen esa relación .. pues no pasa nada .. se quedará al ancho o alto que definas .. y el resto .. lo que dé.

Un saludo,
  #6 (permalink)  
Antiguo 17/11/2004, 13:19
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 15 años
Puntos: 20
Claro, en ese caso fuerzas una dimensión y la otra se calcula según el ratio o proporción. Pero yo necesito forzar las dos dimensiones, es decir, metan la fotografía que metan, tengo que crear un thumbnail de 120x100 (por ejemplo), no de 120xlo que dé. Entonces lo que hago es lo siguiente: sabes que los dos últimos argumentos que se le pasan a imagecopyresampled son las coordenadas que tú quieres reducir de la fotografía original. Si en estos argumentos metes las dimensiones de la fotografía, te reducirá la fotografía entera. En vez de hacer esto, le digo que coja un recuadro con las proporciones del thumbnail (no sé si me estoy explicando ).

Ejemplo: La fotografía grande mide 1200x900 px . Si yo quisiera forzar sólo una dimensión, y que la otra la pusiera a lo que dé, entonces llamaría a imagecopyresampled pasándole los dos últimos argumentos con valor 1200,900. Pero no es lo que quiero. Como voy a forzar las dos dimensiones, lo que hago es pasarle esos dos argumentos con valor 1200,1000, porque el thumbnail que generará será de 120x100 y quiero mantener la proporción. Entonces él coge una región de la foto original equivalente a 1200x1000 y la reduce a 120x100 (la proporción es correcta), pero como la foto era de 1200x900, le ha tenido que meter relleno en la altura. Y aquí es donde voy: el relleno es negro, y necesito que sea del color que yo quiera.

Es decir, mi problema no es que le meta relleno, yo cuento con eso. El problema es que necesito controlar el color de ese relleno.

No sé si he liado más la bola...

Mario.
  #7 (permalink)  
Antiguo 17/11/2004, 13:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, queda claro .. estás haciendo un "crop" (que llaman los programas de diseño).

En ese caso .. tal vez tendrías que usar:

imagecolorallocate()
http://www.php.net/manual/en/functio...orallocate.php

para definir una "mascara" del color que tu quieras y desde ahí seguir el proceso que tienes actualmente ...

Fijate en los ejemplos de los usuarios de esa función en el manual oficial de PHP ..hay ejemplos interesantes que tal vez te sirvan.

Un saludo,
  #8 (permalink)  
Antiguo 17/11/2004, 15:22
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 15 años
Puntos: 20
¡Solucionado gracias a la función imagecolorallocate()!

Gracias a ambos.

Mario.
  #9 (permalink)  
Antiguo 17/11/2004, 15:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Podrías poner el código que quedó .. así sirve de ejemplo para todos.

Un saludo,
  #10 (permalink)  
Antiguo 18/11/2004, 03:33
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 15 años
Puntos: 20
Aquí va:

Código PHP:
// Archivos
$nombre_foto='foto_prueba.jpg';
$nombre_thumbnail='thumb_prueba.jpg';

// Dimensiones del thumbnail
$ancho_thumbnail=120;
$alto_thumbnail=100;


// Cargamos la fotografía y guardamos sus dimensiones y ratio
$foto_entera=imagecreatefromjpeg($ruta.$nombre_foto);
$ancho_foto=imagesx($foto_entera);
$alto_foto=imagesy($foto_entera);
$ratio_foto=$ancho_foto/$alto_foto;
        
// Creamos una imagen con fondo blanco para el thumbnail
$thumbnail=imagecreatetruecolor($ancho_thumbnail,$alto_thumbnail);
$fondo=imagecolorallocate($thumbnail255255255);    
imagefill($thumbnail00$fondo); 

// Creamos el thumbnail y lo grabamos
imagecopyresampled($thumbnail,$foto_entera,0,0,0,0,$ancho_thumbnail,($ancho_thumbnail/$ratio_foto),$ancho_foto,$alto_foto);
imagejpeg($thumbnail,$ruta.$nombre_thumbnail,100); 

Lo que hace es cargar una fotografía de las dimensiones que sean, y crea con ella un thumbnail de 120x100. Si la fotografía no tiene esta misma proporción, una de las dos dimensiones se recortará (si es más grande) o se quedará corta (si es más pequeña). En este último caso, el hueco que sobra se rellenará de blanco. Esto se ha hecho así porque las fotos que se van a meter en esta aplicación son de coches sobre fondo blanco, y así no se nota el hueco sobrante. Supongo que este código se puede optimizar para que, en caso de que sobre hueco, sobre tanto por arriba como por abajo y así la foto queda centrada.

Mario.
  #11 (permalink)  
Antiguo 07/01/2005, 21:08
 
Fecha de Ingreso: mayo-2004
Ubicación: Argentina
Mensajes: 126
Antigüedad: 13 años, 6 meses
Puntos: 1
Pregunta Y para centrar la imagen?

Hola, gracias por esta info! me ayudo bastante..
ahora me surge la duda:
Como sería para centrar la imagen si es que se tiene que rellenar el thumnail?

Para evitar que aparezca blanco debajo de la imagen... Saludos!!!
Y gracias nuevamente!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:41.