Cambiar el tamaño de la imagen en PHP

Muhammad Abubakar 30 enero 2023
  1. Cargue la imagen antes de cambiar el tamaño
  2. imagecopyresized() en PHP
  3. imagecopyresampled() en PHP
  4. imagescale() en PHP
Cambiar el tamaño de la imagen 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:

php cambiar el tamaño de la imagen - imagen original

Producción :

Width:225
Height:225
Type:2
here is jpeg output:

Output_image:

php cambiar el tamaño de la imagen

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:

php cambiar el tamaño de la imagen - imagen original

Output_image:

php cambiar el tamaño de la imagen

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:

php cambiar el tamaño de la imagen - imagen original

Output_image:

php cambiar el tamaño de la imagen

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:

php cambiar el tamaño de la imagen - imagen original

Output_image:

php cambiar el tamaño de la imagen

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:

php cambiar el tamaño de la imagen - imagen original

Output_Image:

php cambiar el tamaño de la imagen

Artículo relacionado - PHP Image