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_GIFIMAGETYPE_JPEGIMAGETYPE_PNGIsso 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