Redimensionar imagem em PHP
- Carregue a imagem antes de redimensionar
-
imagecopyresized()
em PHP -
imagecopyresampled()
em PHP -
imagescale()
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:
Resultado:
Width:225
Height:225
Type:2
here is jpeg output:
Output_image:
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:
Output_image:
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:
Output_image:
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:
Output_image:
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:
Output_Image: