Redimensionar imagem em PHP

Muhammad Abubakar 15 fevereiro 2024
  1. Carregue a imagem antes de redimensionar
  2. imagecopyresized() em PHP
  3. imagecopyresampled() em PHP
  4. imagescale() em PHP
Redimensionar imagem em PHP

Neste artigo tutorial, discutiremos o redimensionamento de uma imagem em PHP.

Carregue a imagem antes de redimensionar

Antes de redimensionar uma imagem, devemos primeiro carregá-la como um recurso de imagem dentro do script. Não é o mesmo que usar funções como file_get_contents() para obter o conteúdo do arquivo de imagem. Para carregar o arquivo, precisamos usar funções como imagecreatefromjpeg(), imagecreatefrompng() e imagecreatefromgif(), entre outras. Dependendo do tipo de imagem que iremos redimensionar, usaremos uma função diferente de acordo.

getimagesize() em PHP

Depois de carregar a imagem, usamos getimagesize() para calcular a largura, altura e o tipo da imagem de entrada. Esta função retorna uma lista de itens, onde a largura e altura da imagem são armazenadas nos índices 0 e 1, respectivamente, e as constantes IMAGETYPE_XXX são armazenadas no índice 2. Usaremos o valor desta constante retornada para descobrir o que tipo de imagem a ser usada e qual recurso usar.

<?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:

imagem redimensionada php - imagem original

Resultado:

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

Output_image:

imagem de redimensionamento php

Ambas são as mesmas imagens porque apenas carregamos a imagem e calculamos o tamanho da imagem original nesta seção.

imagecopyresized() em PHP

imagecopyresized() pega uma área oblonga de largura src_w e altura src_h de src_image na posição (src_x,src_y) e a coloca durante uma área retangular da imagem de destino na posição(dst_x,dst_y). É uma função embutida no 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:

imagem redimensionada php - imagem original

Output_image:

imagem de redimensionamento php

Conforme discutido acima, a função imagecopyresize() aceita dez parâmetros, que estão listados abaixo.

Parâmetros Explicação
$dst_image O recurso de imagem de destino
$src_image O recurso de imagem de origem
$dst_x A coordenada x do ponto de destino
$dst_y A coordenada y do ponto de destino
$src_x A coordenada x do ponto de origem
$src_y A coordenada y do ponto de origem
$dst_w A largura de destino
$dst_h A altura de destino
$src_w A largura da fonte
$src_h A altura da fonte

Ele retorna o valor booleano TRUE em caso de sucesso ou FALSE em caso de falha.

imagecopyresampled() em PHP

imagecopyresampled() copia uma parte oblonga de uma imagem para valores de pixel diferentes, interpolando perfeitamente para reduzir a dimensão de uma imagem, mantendo um alto nível de clareza.

Ele funciona de forma semelhante ao recurso imagecopyresized(), com o benefício adicional de amostrar a imagem, além de redimensioná-la.

<?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:

imagem redimensionada php - imagem original

Output_image:

imagem de redimensionamento php

A função imagecopyresampled() aceita dez parâmetros diferentes.

Parâmetros Explicação
$image_p Ele determina a imagem de destino.
$image Ele determina a imagem de origem.
$x_dest Ele determina a coordenada x da imagem de destino.
$y_dest Ele determina a coordenada y da imagem de destino.
$x_src Ele determina a coordenada x da imagem de origem.
$y_src Ele determina a coordenada y da imagem de origem.
$wid_dest Ele determina a largura da nova imagem.
$hei_dest Ele determina a altura da nova imagem.
$wid_src Ele determina a largura da imagem antiga.
$wid_src Ele determina a altura da imagem antiga.

Nota: também podemos fazer a reamostragem proporcionalmente, o que é possível dando a largura e a altura da dest_image em vez de porcentagem.

imagescale() em PHP

Você especifica o tamanho em vez de definir a largura ou altura da imagem mais recente. Se você quiser que o tamanho da nova imagem seja a metade da primeira, defina o tamanho como 0,8. Aqui está o código de exemplo para dimensionar uma imagem por um determinado fator, preservando a proporção.

Multiplicamos a largura e a altura originais da imagem com a escala especificada na função scale image().

aqui está seu exemplo:

<?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:

imagem redimensionada php - imagem original

Output_image:

imagem de redimensionamento php

Além disso, o PHP possui um recurso integrado que permite dimensionar uma imagem para a largura e altura especificadas.

Veja o código de exemplo.

<?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:

imagem redimensionada php - imagem original

Output_Image:

imagem de redimensionamento php