Ver Mensaje Individual
  #12 (permalink)  
Antiguo 13/04/2011, 16:52
Avatar de KoswiDigital
KoswiDigital
 
Fecha de Ingreso: abril-2011
Ubicación: Galicia - España
Mensajes: 220
Antigüedad: 13 años, 7 meses
Puntos: 37
Respuesta: Cortar imagenes con CSS

Hola.

Yo lo que suelo hacer es, además de crear los thumbs con php, utilizar un fondo (tipo canvas) para que ocupen exactamente lo mismo.

Me explico:

Código PHP:
    $origen imagecreatefromjpeg($imagen);
    
$x imagesx($origen);
    
$y imagesy($origen);
    
$nx 200;        // establezco el ancho máximo
    
$ny $y*$nx/$x;  // regla de 3 que comentan por ahí arriba
    
$destino imagecreatetruecolor(200,200);    // tamaño total de la imagen: 200x200 (esto vendría a ser el canvas)
    
imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y);

    
$destino_tn 'ruta-de-destino/tn_'.$fileName;    
    
imagejpeg($destino $destino_tn 100); 
De esta manera, verás un fondo negro ocupando 200x200 y dentro la imagen. Eso sí, si el alto de la imagen es más pequeño que 200, se verá pegada a la parte superior y dejará un hueco negro en la inferior. Para evitar esto, tendrás que utilizar algo más de matemática y modificar un poco la función imagecopyresized:

Código PHP:
    $posx = (200 $nx) / 2;            // si el ancho de la imagen se ajusta a los 200px, el resultado será 0
    
$posy = (200 $ny) / 2;            // si, lo que interesa, que es el alto, es de pongamos 150px, el resultado será 25.
                                        // Y esto nos centraría la imagen en nuestro canvas.

    
imagecopyresized($destino,$origen,$posx,$posy,0,0,$nx,$ny,$x,$y);    // ahora indicamos las coordenadas del punto
                                                                         // de origen y de destino 
Creo que no me he dejado nada atrás. Que alguien me corrija si es así.


Espero que sirva de ayuda. Un saludo.
__________________
http://www.koswidigital.com - Diseño web, Programación web, Fotografía profesional, Retoque digital.

Última edición por KoswiDigital; 13/04/2011 a las 17:55 Razón: he cometido un pequeño error en la última función. solucionado.