Cambiar el tamaño de la imagen en PHP
- Cargue la imagen antes de cambiar el tamaño
-
imagecopyresized()
en PHP -
imagecopyresampled()
en PHP -
imagescale()
en PHP
En este artículo del tutorial, discutiremos el cambio de tamaño de una imagen en PHP.
Cargue la imagen antes de cambiar el tamaño
Antes de cambiar el tamaño de una imagen, primero debemos cargarla como un recurso de imagen dentro del script. No es lo mismo que usar funciones como file_get_contents()
para obtener el contenido del archivo de imagen. Para cargar el archivo, necesitamos utilizar funciones como imagecreatefromjpeg()
, imagecreatefrompng()
, y imagecreatefromgif()
, entre otras. Dependiendo del tipo de imagen que cambiemos de tamaño, usaremos una función diferente en consecuencia.
getimagesize()
en PHP
Después de cargar la imagen, usamos getimagesize()
para calcular el ancho, alto y el tipo de la imagen de entrada. Esta función devuelve una lista de elementos, donde el ancho y la altura de la imagen se almacenan en los índices 0 y 1, respectivamente, y las constantes IMAGETYPE_XXX
se almacenan en el índice 2. Usaremos el valor de esta constante devuelta para averiguar qué tipo de imagen a utilizar y qué función utilizar.
<?php
function load_image($filename, $type) {
$new = 'new34.jpeg';
if( $type == IMAGETYPE_JPEG ) {
$image = imagecreatefromjpeg($filename);
echo "here is jpeg output:";
imagejpeg($image, $new);
}
elseif( $type == IMAGETYPE_PNG ) {
$image = imagecreatefrompng($filename);
echo "here is png output:";
imagepng($image,$new);
}
elseif( $type == IMAGETYPE_GIF ) {
$image = imagecreatefromgif($filename);
echo "here is gif output:";
imagejpeg($image, $new);
}
return $new;
}
$filename = "panda.jpeg";
list($width, $height,$type) = getimagesize($filename);
echo "Width:" , $width,"\n";
echo "Height:", $height,"\n";
echo "Type:", $type, "\n";
$old_image = load_image($filename, $type);
?>
Input_Image:
Producción :
Width:225
Height:225
Type:2
here is jpeg output:
Output_image:
Ambas son las mismas imágenes porque solo cargamos la imagen y calculamos el tamaño de la imagen original en esta sección.
imagecopyresized()
en PHP
imagecopyresized()
toma un área alargada de ancho src_w
y altura src_h
de src_image
en la posición (src_x,src_y)
y la coloca en un área rectangular de la imagen de destino en la posición (dst_x, dst_y)
. Es una función incorporada en PHP.
<?php
// File and new size
$filename = 'panda.jpeg';
$percent = 0.5;
// Content type
header('Content-Type: image/jpeg');
// Get new sizes
list($width, $height, $type) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
$type = $list[2];
echo $type;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Output
imagejpeg($thumb,'new.jpeg');
?>
Input_Image:
Output_image:
Como se discutió anteriormente, la función imagecopyresize()
acepta diez parámetros, que se enumeran a continuación.
Parámetros | Explicación |
---|---|
$dst_image |
El recurso de imagen de destino |
$src_image |
El recurso de la imagen de origen |
$dst_x |
La coordenada x del punto de destino |
$dst_y |
La coordenada y del punto de destino |
$src_x |
La coordenada x del punto fuente |
$src_y |
La coordenada y del punto fuente |
$dst_w |
El ancho de destino |
$dst_h |
La altura del destino |
$src_w |
El ancho de la fuente |
$src_h |
La altura de la fuente |
Devuelve el valor booleano VERDADERO en caso de éxito o FALSO en caso de error.
imagecopyresampled()
en PHP
imagecopyresampled()
copia una porción oblonga de una imagen en una diferente, interpolando perfectamente los valores de píxeles para reducir la dimensión de una imagen, manteniendo un alto nivel de claridad.
Funciona de manera similar a la función imagecopyresized()
, con el beneficio adicional de muestrear la imagen además de cambiar su tamaño.
<?php
// The file
$filename = 'panda.jpeg';
$percent = 2;
// Content type
header('Content-Type: image/jpeg');
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Output
imagejpeg($image_p, 'resampled1.jpeg', 100);
?>
Input_Image:
Output_image:
La función imagecopyresampled()
acepta diez parámetros diferentes.
Parámetros | Explicación |
---|---|
$image_p |
Determina la imagen de destino. |
$image |
Determina la imagen de origen. |
$x_dest |
Determina la coordenada x de la imagen de destino. |
$y_dest |
Determina la coordenada y de la imagen de destino. |
$x_src |
Determina la coordenada x de la imagen de origen. |
$y_src |
Determina la coordenada y de la imagen de origen. |
$wid_dest |
Determina el ancho de la nueva imagen. |
$hei_dest |
Determina la altura de la nueva imagen. |
$wid_src |
Determina el ancho de la imagen antigua. |
$wid_src |
Determina la altura de la imagen antigua. |
Nota: también podemos hacer un remuestreo proporcionalmente, lo cual es posible dando ancho y alto de dest_image
en lugar de porcentaje.
imagescale()
en PHP
Usted especifica el tamaño en lugar de definir el ancho o el alto de la última imagen. Si desea que el nuevo tamaño de imagen sea la mitad de la primera imagen, establezca el tamaño en 0.8. Aquí está el código de ejemplo para escalar una imagen por un factor dado mientras se conserva la proporción.
Multiplicamos el ancho y alto original de la imagen con la escala especificada dentro de la función scale image()
.
aquí está su ejemplo:
<?php
function load_image($filename, $type) {
if( $type == IMAGETYPE_JPEG ) {
$image = imagecreatefromjpeg($filename);
}
elseif( $type == IMAGETYPE_PNG ) {
$image = imagecreatefrompng($filename);
}
elseif( $type == IMAGETYPE_GIF ) {
$image = imagecreatefromgif($filename);
}
return $image;
}
function scale_image($scale, $image, $width, $height) {
$new_width = $width * $scale;
$new_height = $height * $scale;
return resize_image($new_width, $new_height, $image, $width, $height);
}
function resize_image($new_width, $new_height, $image, $width, $height) {
$image12 = 'hello.jpeg';
$new_imag = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_imag, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
return imagejpeg($new_imag, $image12);
}
$filename = "panda.jpeg";
list($width, $height, $type) = getimagesize($filename);
$old_image = load_image($filename, $type);
$image_scaled = scale_image(0.8, $old_image, $width, $height);
?>
Input_Image:
Output_image:
Aparte de eso, PHP tiene una función incorporada que le permite escalar una imagen al ancho y alto especificados.
Vea el código de ejemplo.
<?php
$out_image = "sca.jpeg";
$image_name ="panda.jpeg";
// Load image file
$image = imagecreatefromjpeg($image_name);
// Use imagescale() function to scale the image
$img = imagescale( $image, 500, 400 );
header("Content-type: image/jpeg");
imagejpeg($img,$out_image);
?>
Input_Image:
Output_Image: