Foros del Web » Programando para Internet » PHP »

Recortar imágenes por ambos extremos

Estas en el tema de Recortar imágenes por ambos extremos en el foro de PHP en Foros del Web. Hola a todos y gracias por leerme, he mirado en las FAQ y he sacado un ejemplo de recorte masivo, he usado lo del recorte ...
  #1 (permalink)  
Antiguo 08/01/2009, 04:42
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Recortar imágenes por ambos extremos

Hola a todos y gracias por leerme, he mirado en las FAQ y he sacado un ejemplo de recorte masivo, he usado lo del recorte pero con imagecreatetruecolor para que no quede tan quemada la foto, hasta aquí todo bien, el problema es que la foto se recorta desde abajo, teniendo en cuenta que recorto 30px me gustaría que me recortara 15px de abajo y otros tanto de arriba y la verdad es que no sé cómo o si es posible, lo que he hecho:

Código PHP:
<?php 
$img
="bat.jpg";
$destino="bet.jpg";
$cutpx=30;
$size getimagesize($img); 
//creo la miniatura 
$img1 imagecreatetruecolor($size[0],$size[1]-$cutpx);       
//creo la imagen a partir $img  
$img2 imagecreatefromjpeg($img); 
//cambio el tamaño de la imagen  
imagecopyresampled($img1,$img2,0,0,0,0,$size[0],$size[1]-$cutpx$size[0], $size[1]-$cutpx); 
//la guardo modificada  
imagejpeg($img1,$destino,"99");  
imagedestroy($img1);
?>
Funciona sin problemas lo único que sólo recorta de abajo, alguna idea?

Muchas gracias
__________________
Chanante!
  #2 (permalink)  
Antiguo 08/01/2009, 05:58
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: Recortar imágenes por ambos extremos

En el imagecopyresample, esos cuatro ceros, son los parametros de las coordenadas de la esquina superior izquierda que junto con el tamaño determinan el rectangulo que se copia y el rectangulo donde se copia. Para lo que tu quieres, seria algo como
Código PHP:
imagecopyresampled($img1,$img2,0,0,0,$cutpx/2,$size[0],$size[1]-$cutpx$size[0], $size[1]-$cutpx); 
  #3 (permalink)  
Antiguo 08/01/2009, 06:10
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Respuesta: Recortar imágenes por ambos extremos

Muchas gracias, supongo que para recortar en x sera igual, me viene de perlas esto que me has pasado.

El caso es que quiero crear thumbs pero no escalando si no recortando y escalando para centrar más o menos la imagen de manera automática.

Muchas gracias
__________________
Chanante!
  #4 (permalink)  
Antiguo 08/01/2009, 06:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Recortar imágenes por ambos extremos

y no era mas rápido, ¿leer el manual de PHP ???

http://php.net/imagecopyresampled

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 08/01/2009, 13:37
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Respuesta: Recortar imágenes por ambos extremos

Esa solución ya la había buscado, pero entre tú y yo, no he entendido nada. La verdad, cada vez que voy a php.net me siento tonto.

Soy diseñador gráfico no programador, no me han enseñado php en ningún lado. Ni siquiera estudié matemáticas en el último ciclo de enseñanza (estudié latín).

En el foro de flash es donde yo puedo ayudar a la gente a que comprenda conceptos que a mí me resultan obvios. Y no sé flash por estudiar el manual, en su día alguien me echó una mano a mí y así mismo me defiendo programando cosas en flash. Si respondieramos a la gente diciendo que se lean el manual, entonces, ¿para qué los foros?. Te lees el manual y punto.

Por ejemplo no entiendo cómo todavía hay gente que no sabe que es un genitivo (y tenemos en nuestro idioma). Siempre puedo decir: ¿y no era más rápido leer la gramática latina?. Cada uno sabe de lo suyo, si quieres echarme una mano te lo agradeceré, en cuanto a las broncas ya me las echa la novia.


Un saludo
__________________
Chanante!
  #6 (permalink)  
Antiguo 08/01/2009, 14:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Recortar imágenes por ambos extremos

Mmm aun asi deberias de tener una base, algo basico para comprender, si te fijas los parámetros para la función son bastante claros:
Código:
imagecopyresampled(
    resource $dst_image, /* La imagen destino (el thumb) */
    resource $src_image, /* La imagen fuente */
    int $dst_x, /* El punto X de la imagen destino donde se va a insertar la imagen */
    int $dst_y, /* El punto Y de la imagen destino donde se va a insertar la imagen */
    int $src_x, /* El punto X de la imagen fuente donde vas a copiar */
    int $src_y, /* El punto Y de la imagen fuente donde vas a copiar */
    int $dst_w, /* El ancho de la imagen destino */
    int $dst_h, /* El alto de la imagen destino */
    int $src_w, /* El ancho de la imagen fuente a copiar */
    int $src_h /* El alto de la imagen fuente */  )
Con esos datos puedes copiar y redimensionar la imagen y crear el thumb.

Saludos
  #7 (permalink)  
Antiguo 09/01/2009, 01:17
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Respuesta: Recortar imágenes por ambos extremos

Es que tu explicación es cojonuda, esto es lo que pone php.net:

Cita:
int imagecopyresampled ( resource $img_dst , resource $img_org , int $Xdst , int $Ydst , int $Xorg , int $Yorg , int $ancho_dst , int $alto_dst , int $ancho_org , int $alto_org )
imagecopyresampled() copia una porción rectangular de una imagen sobre otra, suavizando los valores de los píxeles mediante interpolación, de forma que al reducir el tamaño de una imagen aún mantiene una buena claridad. img_dst es la imagen de destino, img_org es el identificador de la imagen de origen. Si las coordenadas de origen y destino y ancho y alto son diferentes, se encogerá o agrandará el fragmento de imagen según sea necesario. Las coordenadas son relativas a la esquina superior izquierda. Esta función se puede usar para copiar regiones dentro de la misma imagen (si img_dst es la misma que img_org ) pero si las regiones se superponen, los resultados serán impredecibles.
Te juro que esto no lo entiendo.

El caso es que esto sigue siendo un foro y como moderador deberías ser más comprensivo. He mirado en las FAQ, he mirado en php.net y no lo he tenido claro. Entonces ¿qué hago?, puedo no preguntar en el foro, en ese caso no serviría de nada. Te digo lo mismo que ha pateketrueke si quieres ayudar estupendo sino lo que recibo es una bronca y no veo por qué.

Tengo base como diseñador, la terminología usada en los lenguajes de programación son crípticos, en serio, para mí lo tuyo es una traducción al lenguaje coloquial si php.net tuviera tu elocuencia entraría menos por aquí.

En todo caso gracias por los datos que me has pasado son bastante claros.
__________________
Chanante!
  #8 (permalink)  
Antiguo 09/01/2009, 01:51
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: Recortar imágenes por ambos extremos

Consejo sobre el manual de PHP.net: lee siempre la version en ingles. La version en castellano da pena, muchas veces no esta actualizada.

Ademas, ten en cuenta que es un manual de referencia. Presupone cierto conocimiento basico.
  #9 (permalink)  
Antiguo 09/01/2009, 02:21
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Respuesta: Recortar imágenes por ambos extremos

Pues gracias, la verdad es que nunca lo había pensado así, de inglés sí que tengo algo de base (al menos más que en php). Siento no tener la base necesaria y sé que si pillo a alguien en un mal día puede que le moleste una pregunta obvia pero de verdad que busco en google, luego en las faq, luego en php.net y si no saco nada ya es cuando os pido ayuda. No me entusiasma y prefiero ayudar a que me ayuden pero cuando no hay más remedio...

Gracias a todos y un saludo.
__________________
Chanante!
  #10 (permalink)  
Antiguo 09/01/2009, 12:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Recortar imágenes por ambos extremos

Pues es un problema simple de matematicas, no tanto de PHP, simplemente dibuja tus cuadros, si necesitas copiar y cambiar el tamaño, vas a tener que aplicar la logica.

Imagina la imagen original es de 300 x 400, si quieres convertirla a un thumb de 50x50 y a la vez recortarle 15px de arriba y 15px de abajo por ejemplo, primero le restas al alto la cantidad:
Código php:
Ver original
  1. <?php
  2. $width = 300;
  3. $height = 400;
  4. $offset_bottom = 15;
  5. $offset_top = 15;
  6. $new_height = $height - $offset_bottom;

Posteriormente copias y haces el resampling:
Código php:
Ver original
  1. <?php
  2. $destwidth = 50;
  3. $destheight = 50;
  4.  
  5. $source_x = $offset_top; // Vamos a copiar con un cierto desface
  6. $source_y = 0;
  7.  
  8. $dest_x = 0;
  9. $dest_y = 0;
  10.  
  11. imagecopyresampled( $source, $dest, $dest_x, $dest_y, $source_x, $source_y, $destwidth, $destheight, $width, $newheight );

Si te fijas es simple, solo restamos el padding que quieres y ya esta.

Saludos
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 23:01.