Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/02/2008, 17:43
Avatar de rameau1982
rameau1982
 
Fecha de Ingreso: febrero-2007
Ubicación: Barcelona
Mensajes: 111
Antigüedad: 17 años, 2 meses
Puntos: 0
recortar imagen imagecopyresampled() desde el centro

Hola, he hecho un script para subir imagenes a un servidor, guardar la referencia en una base de datos y que las escale y recorte a un tamaño concreto: 156x215 px.
Todo sale perfecto, excepto que el recorte me lo hace siempre desde el borde superior izquierdo (como indica el manual del imagecopyresampled). Pero esto hace que no se recorte desde el centro, que es lo que quiero, me recorta o de arriba o del lado izquierdo y yo quiero que lo haga la mitad de arriba, la otra mitad de abajo, la mitad de la izquierda y la otra mitad de la derecha.
Pongo el código a ver si alguien me hecha una mano. Gracias!

Código PHP:
<?
session_name
("loginUsuario");
session_start();
$usuario=$_SESSION["usuario"];

function 
thumbjpeg($imagen,$directorio,$ancho_tn,$alto_tn,$ancho_orig,$alto_orig,$crop_width,$crop_height//ancho_tn y alto_tn son el tamaño ke deseo para el thumbnail
{
$dir_thumb=$directorio//ruta donde guardamos los thumbnails
$prefijo_thumb="tn_"//prefijo para el thumbnail
$camino_nombre=explode("/",$imagen); //por si imagen lleva una / delante
$nombre=end($camino_nombre);// Aquí tendremos el nombre de la imagen.
$anchura=$ancho_tn//le doy el ancho ke pasé
$altura=$alto_tn//le doy el alto
$anchura_orig=$ancho_orig;
$altura_orig=$alto_orig;
$cropw=$crop_width;
$croph=$crop_height;
if (!
file_exists($dir_thumb.$prefijo_thumb.$nombre)) //si no existe el thumbnail
{
$format strtolower(substr(strrchr($nombre,"."),1));
    switch(
$format)
    {
        case 
'gif' :
            
$type ="gif";
            
$img imagecreatefromgif($dir_thumb.$nombre);
            break;
        case 
'png' :
            
$type ="png";
            
$img imagecreatefrompng($dir_thumb.$nombre);
            break;
        case 
'jpg' :
            
$type ="jpg";
            
$img imagecreatefromjpeg($dir_thumb.$nombre);
            break;
        case 
'jpeg' :
            
$type ="jpg";
            
$img imagecreatefromjpeg($dir_thumb.$nombre);
            break;
        default : 
            die (
"ERROR; UNSUPPORTED IMAGE TYPE");
            break;
    }
    
$thumb imagecreatetruecolor($anchura,$altura);
imagecopyresampled ($thumb$img0000$anchura$altura$anchura_orig$altura_orig); //crea el thumbnail
if($type=="gif"){
        
imagegif($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}elseif(
$type=="jpg"){
        
imagejpeg($thumb,$dir_thumb.$prefijo_thumb.$nombre,100);
}elseif(
$type=="png"){
        
imagepng($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}elseif(
$type=="bmp"){
        
imagewbmp($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}

//imagejpeg($thumb,$dir_thumb.$prefijo_thumb.$nombre);
    
switch($format)
    {
        case 
'gif' :
            
$type ="gif";
            
$img imagecreatefromgif($dir_thumb.$prefijo_thumb.$nombre);
            break;
        case 
'png' :
            
$type ="png";
            
$img imagecreatefrompng($dir_thumb.$prefijo_thumb.$nombre);
            break;
        case 
'jpg' :
            
$type ="jpg";
            
$img imagecreatefromjpeg($dir_thumb.$prefijo_thumb.$nombre);
            break;
        case 
'jpeg' :
            
$type ="jpg";
            
$img imagecreatefromjpeg($dir_thumb.$prefijo_thumb.$nombre);
            break;
        default : 
            die (
"ERROR; UNSUPPORTED IMAGE TYPE");
            break;
    }
$thumb imagecreatetruecolor(156,215);
imagecopyresampled ($thumb$img00$cropw$croph156215156215); //crea el thumbnail

// la salvamos con el nombre y en el lugar que nos interesa.
if($type=="gif"){
        
imagegif($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}elseif(
$type=="jpg"){
        
imagejpeg($thumb,$dir_thumb.$prefijo_thumb.$nombre,100);
}elseif(
$type=="png"){
        
imagepng($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}elseif(
$type=="bmp"){
        
imagewbmp($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}
return(
$prefijo_thumb.$nombre);
}
}



$directorio_foto 'C:/xampp/htdocs/nombres/fotos/';
$nombre strtr($_FILES['foto']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù ""n-AEIOUAEIOUaeiouaeiouaeiou_"); 
$tamanio $_FILES['foto']['size'];
$tipo $_FILES['foto']['type'];
global 
$HTTP_POST_VARS;
copy($_FILES['foto']['tmp_name'],$directorio_foto.$nombre);
$nombre2=$directorio_foto.$nombre;
$my_image array_values(getimagesize($nombre2));
list(
$width$height$type$attr) = $my_image;
$llindar1 = (215 $width) / 156;
$llindar2 = (156 $height) / 215;
$crop1=($height-$llindar1) *156 $width;
$crop2=($width-$llindar2) * 215 $height;
$ratio=$width $height;
if(
$ratio<=0.725581){
    
$alto_nuevo=$height 156 /$width;
    
$nombre3 thumbjpeg($nombre,$directorio_foto,156,$alto_nuevo,$width,$height,0,$crop1);
}else{
    
$ancho_nuevo=$width 215 $height;
    
$nombre3 thumbjpeg($nombre,$directorio_foto,$ancho_nuevo,215,$width,$height,$crop2,0);
}
unlink($directorio_foto.$nombre);
$ar "./fotos/".$nombre3//aqui la url donde se sube la foto

$conn mysql_connect("localhost","root",""); 
mysql_select_db("nombres",$conn);
$sql "INSERT INTO fotos (id, foto, nombre) VALUES ('','$ar','$usuario')";
$result mysql_query$sql$conn) ;
header("Location: usuarios.php");
?>