Biblioteca PHP para redimensionar, dimensionar e cortar imagens.
Se você não deseja cortar, redimensionar e armazenar imagens em seu servidor, Gumlet.com é um serviço gratuito que pode processar imagens em tempo real e servir em todo o mundo através de CDN.
Este pacote está disponível através do Packagist com o fornecedor e o identificador do pacote iguais a este repositório.
Se estiver usando o Composer, em seu arquivo composer.json
adicione:
{
"require" : {
"gumlet/php-image-resize" : " 2.0.* "
}
}
Se você ainda estiver usando o PHP 5.3, instale a versão 1.7.0
e se estiver usando o PHP 5.4, instale a versão 1.8.0
desta biblioteca.
O suporte WebP é adicionado com PHP 5.6.0
e a versão atual da biblioteca oferece suporte para isso. Se você estiver enfrentando problemas, use a versão 1.9.2
desta biblioteca.
Para versões PHP >= 7.2, 2.0.1
ou superior, a versão desta biblioteca deve ser usada.
De outra forma:
include ' /path/to/ImageResize.php ' ;
Como esta classe usa namespace, ao instanciar o objeto, você precisa usar o namespace totalmente qualificado:
$ image = new Gumlet ImageResize ();
Ou alias:
use Gumlet ImageResize ;
$ image = new ImageResize ();
Nota: Esta biblioteca usa classe GD que não suporta redimensionamento de arquivos GIF animados
Para dimensionar uma imagem, neste caso para metade do seu tamanho (o dimensionamento é baseado em porcentagem):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> save ( ' image2.jpg ' );
Para redimensionar uma imagem de acordo com uma dimensão (mantendo a proporção):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToHeight ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> save ( ' image2.jpg ' );
Para redimensionar uma imagem de acordo com uma determinada medida independentemente da sua orientação (mantendo a proporção):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToLongSide ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToShortSide ( 300 );
$ image -> save ( ' image2.jpg ' );
Para redimensionar uma imagem para melhor caber em um determinado conjunto de dimensões (mantendo a proporção):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToBestFit ( 500 , 300 );
$ image -> save ( ' image2.jpg ' );
Todas as funções de redimensionamento têm a opção $allow_enlarge
que é definida como falsa por padrão. Você pode ativar passando true
para qualquer função de redimensionamento:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 500 , 300 , $ allow_enlarge = True );
$ image -> save ( ' image2.jpg ' );
Se você quiser lidar com as proporções sozinho, poderá redimensionar diretamente:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
Isso fará com que sua imagem fique distorcida se você não usar a mesma proporção largura/altura da imagem de origem.
Para cortar uma imagem:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
Isso dimensionará a imagem o mais próximo possível das dimensões passadas e, em seguida, cortará e centralizará o restante.
No caso do exemplo acima, uma imagem de 400px × 600px será redimensionada para 200px × 300px e, em seguida, 50px serão retirados da parte superior e inferior, deixando você com 200px × 200px.
Modos de corte:
Poucas opções de modo de corte estão disponíveis para que você escolha como deseja lidar com o eventual excesso de largura ou altura após redimensionar sua imagem. O modo de corte padrão usado é o CROPCENTER
. Como resultado, esses trechos de código são equivalentes:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPCENTER );
$ image -> save ( ' image2.jpg ' );
Caso você tenha uma imagem de 400px × 600px e queira recortá-la para 200px × 200px a imagem será redimensionada para 200px × 300px, então você pode indicar como deseja tratar esses 100px excedendo passando o valor do corte modo que deseja usar.
Por exemplo, passar no modo de corte CROPTOP
resultará em 100px retirados da parte inferior, deixando você com 200px × 200px.
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPTOP );
$ image -> save ( ' image2.jpg ' );
Pelo contrário, passar no modo de corte CROPBOTTOM
resultará em 100px retirados do topo, deixando você com 200px × 200px.
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPBOTTOM );
$ image -> save ( ' image2.jpg ' );
Corte livre:
Também existe uma maneira de definir a posição de corte personalizada. Você pode definir $x e $y no método freecrop
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> freecrop ( 200 , 200 , $ x = 20 , $ y = 20 );
$ image -> save ( ' image2.jpg ' );
Para carregar uma imagem de uma string:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
$ image -> save ( ' image.jpg ' );
Você também pode retornar o resultado como uma string:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
echo $ image -> getImageAsString ();
Magic __toString()
também é suportado:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> resize ( 10 , 10 );
echo ( string ) $ image ;
Como visto acima, você pode chamar $image->save('image.jpg');
Para renderizar a imagem diretamente no navegador, você pode chamar $image->output()
;
Ao salvar em disco ou enviar para o navegador, o script assume o mesmo tipo de saída que a entrada.
Se você quiser salvar/gerar um tipo de imagem diferente, você precisa passar uma constante PHP IMAGETYPE_
* (suportada):
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
Isso permite que você salve em um tipo diferente da fonte:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image.png ' , IMAGETYPE_PNG );
As propriedades $quality_jpg
, $quality_webp
e $quality_png
estão disponíveis para você configurar:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> quality_jpg = 100 ;
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
Por padrão, eles são definidos como 85 e 6, respectivamente. Consulte as entradas manuais para imagejpeg()
e imagepng()
para obter mais informações.
Você também pode passar a qualidade diretamente para os métodos save()
, output()
e getImageAsString()
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' , null , 100 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> output ( IMAGETYPE_PNG , 4 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ result = $ image -> getImageAsString ( IMAGETYPE_PNG , 4 );
Estamos passando null
para o tipo de imagem no exemplo acima para ignorá-lo e fornecer a qualidade. Neste caso, o tipo de imagem é assumido como o mesmo da entrada.
Por padrão, o entrelaçamento de imagens está ativado. Pode ser desabilitado definindo $interlace
como 0
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> interlace = 0 ;
$ image -> save ( ' image2.jpg ' );
Ao realizar operações, a imagem original é mantida, para que você possa encadear as operações sem destruição excessiva.
Isso é útil para criar vários tamanhos:
$ image = new ImageResize ( ' image.jpg ' );
$ image
-> scale ( 50 )
-> save ( ' image2.jpg ' )
-> resizeToWidth ( 300 )
-> save ( ' image3.jpg ' )
-> crop ( 100 , 100 )
-> save ( ' image4.jpg ' )
;
ImageResize lança ImageResizeException por conta própria em caso de erros. Você pode capturar isso ou capturar a Exception geral que está estendendo.
Não é de se esperar, mas se algo der terrivelmente errado no meio do caminho, então aviso ou aviso Erros podem ser mostrados no PHP GD e nas funções de imagem (http://php.net/manual/en/ref.image.php)
try {
$ image = new ImageResize ( null );
echo " This line will not be printed " ;
} catch ( ImageResizeException $ e ) {
echo " Something went wrong " . $ e -> getMessage ();
}
Você pode aplicar efeitos especiais para novas imagens, como desfoque ou adicionar banner.
$ image = new ImageResize ( ' image.jpg ' );
// Add blure
$ image -> addFilter ( function ( $ imageDesc ) {
imagefilter ( $ imageDesc , IMG_FILTER_GAUSSIAN_BLUR );
});
// Add banner on bottom left corner
$ image18Plus = ' banner.png '
$ image -> addFilter ( function ( $ imageDesc ) use ( $ image18Plus ) {
$ logo = imagecreatefrompng ( $ image18Plus );
$ logo_width = imagesx ( $ logo );
$ logo_height = imagesy ( $ logo );
$ image_width = imagesx ( $ imageDesc );
$ image_height = imagesy ( $ imageDesc );
$ image_x = $ image_width - $ logo_width - 10 ;
$ image_y = $ image_height - $ logo_height - 10 ;
imagecopy ( $ imageDesc , $ logo , $ image_x , $ image_y , 0 , 0 , $ logo_width , $ logo_height );
});
Inverte uma imagem usando um determinado modo e este método é apenas para PHP versão 5.4.
$ flip = new ImageResize ( ' image.png ' );
$ image = imagecreatetruecolor ( 200 , 100 );
$ image -> addFilter ( function ( $ image ) {
imageflip ( $ image , IMG_FLIP_HORIZONTAL );
});
Ambas as funções serão usadas na ordem em que foram adicionadas.
Você pode ativar a correção de cores gama, que está desativada por padrão.
$ image = new ImageResize ( ' image.png ' );
$ image -> gamma ( true );
https://gumlet.github.io/php-image-resize/index.html
Esta biblioteca é mantida por Gumlet.com