2011-01-08 8 views
5
imagecopyresized (resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h) 

Esto es lo que quieren hacer: Tengo una imagen que es 600x1000px en tamaño, y quiero crear un pulgar que es 100x100px después de cambiar el tamaño de esa imagen a 300x500px, la coordenada x para el punto superior izquierdo del cuadrado del pulgar debe estar en 100 (src x) y 120 (src y).imagecopyresampled para cambiar el tamaño y recortar una imagen - no devolver el resultado esperado

Según lo que entiendo de este manual, el comando debe ser

$dst_image = imagecreatetruecolor(100,100); 
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg'); 
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, **300 , 500 , 600 , 1000**) 

Se Recorte de la imagen muy bien, pero no es cambiar su tamaño correctamente. Nunca lo hice para que coincida con lo que veo en mi editor de imágenes (el GIMP). ¿Qué estoy haciendo mal? Confirmé que todos los números son correctos, pero siempre cambian hacia arriba o hacia abajo sin importar lo que haga.

+0

lo que está haciendo en su imagen de origen es cortar una pieza de izquierda-x = 100 píxeles a la derecha-x = 400 píxeles de un ancho de 600 píxeles, por lo que no está centrado. y luego usar top-y de 120 píxeles y una inferior-de 620 píxeles de una altura total de 1000 píxeles, por lo que tampoco está centrada de esa manera. – dqhendricks

+0

, en la imagen de destino que está comenzando en la esquina superior izquierda e imprimiendo una imagen de 300x500 píxeles en una imagen de 100x100, por lo que los 200 píxeles correctos y los 400 píxeles inferiores se cortan, supongo. – dqhendricks

+0

muéstranos la imagen de origen y destino deseada de tu editor de imágenes, y tal vez tengamos una comprensión más clara de lo que estás tratando de hacer. – dqhendricks

Respuesta

10

Aquí hay un enlace a una función que escribí usando PHP GD para cambiar el tamaño de cualquier imagen de tamaño a cualquier tamaño arbitrario. Tiene una explicación y opciones para usar Recortar para ajustar o Letterboxing para ajustarse a la relación de aspecto de destino.

http://www.spotlesswebdesign.com/blog.php?id=1

actualización

que debe ser de la misma familia.

$dst_image = imagecreatetruecolor(100,100); 
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg'); 
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, 100, 100, 400, 400); 

toma un cuadrado de 400x400 de la fuente y lo copia en un cuadrado de 100x100 en el destino. la esquina superior izquierda del cuadrado de origen es 100 x y 120 y. xey representan el número de píxeles de la esquina superior izquierda.

+1

excelente publicación en el blog, gracias por compartir. –

+0

Hola, tengo un problema con ImageCreateTrueColor. ¿Puedo dar más de 3000 en altura y ancho? – user2003356

+0

@ user2003356 teóricamente, sí, pero dependerá de los límites de memoria php de su servidor. – dqhendricks

3

Sí, eso lo solucionó muy bien.

Para Googlers: Lo que básicamente tenía que hacer es hacer que el ancho de la fuente y la altura de la fuente se vinculen con el ancho y la altura real del área que recortaré en la imagen de origen. Lo que significa que el código tenía que ser:

imagecopyresized ($dst_image, $src_image, 0, 0, 200, 240, 100, 100, 200, 200); 

Así las variables realmente quiere decir lo siguiente: $ = src_x la coordenada X del punto superior izquierdo de la plaza en el original. Como el original tiene el doble del tamaño de la versión redimensionada de la que se extraerá el pulgar, será 200 ((original_width/resized_width) * x).

$ src_y = lo mismo, pero con la coordenada y.

$ dst_w = la anchura de la imagen generada - 100.

$ dst_h = la altura de la imagen generada - 100.

$ src_w = la anchura de la zona que voy a recortar de la original ((original_width/resized_width) * $ dst_w)

$ src_h = la altura del área que voy a recortar desde el original ((original_width/resized_width) * $ dst_h)


dqhendricks: Muchas gracias por su ayuda, realmente lo aprecio. Me estaba rascando la cabeza durante horas.

+0

No hay problema. Me alegro de poder ayudar. – dqhendricks

Cuestiones relacionadas