Esta classe é uma alternativa ao pacote Intervention Image para um trabalho mais flexível com texto na imagem. Use-o se precisar ajustar o texto em uma determinada área, calcular automaticamente o tamanho da fonte e alterar a altura da linha . O método de desenho de texto também sabe retornar o tamanho real das inscrições, o que permitirá, por exemplo, colocar blocos uns sob os outros.
Além do trabalho flexível com texto, a classe fornece uma API de imagem semelhante ao pacote Intervenção. Inclui redimensionamento inteligente de pôsteres, filtros, desenho de formas e sobreposição de outras imagens.
Se você não usa o compositor em seu trabalho, também pode estar interessado na simplicidade da classe e na ausência de quaisquer dependências. Observe que esta classe oferece suporte apenas ao driver PHP-GD. Você também pode herdar facilmente sua classe – todos os métodos do pai podem ser substituídos.
A melhor maneira de instalar poster editor é rápida e fácil com o Composer.
No entanto, você pode solicitar a classe diretamente sem usar um carregador - isso não afetará o desempenho de forma alguma.
php composer.phar require antonlukin/poster-editor
Em caso de erro, os métodos da classe retornam uma exceção.
Portanto, é melhor chamá-los dentro de um bloco try..catch
.
// Using composer
require_once __DIR__ . ' /vendor/autoload.php ' ;
// Or directly
// require_once __DIR__ . '/PosterEditor.php';
try {
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 600 , 600 );
$ image -> show ();
} catch ( Exception $ e ) {
echo $ e -> getMessage ();
}
$image->get()
Obtenha recurso de imagem para usar comandos gd brutos.
$image->set(instance $resourse)
Defina o recurso de imagem após usar comandos gd brutos.
$image->make(mixed $data)
Crie uma nova instância de imagem a partir de arquivo ou dados binários.
$image->insert(mixed $data, array $options = array())
Cole uma determinada fonte de imagem sobre a imagem atual com uma posição opcional. O primeiro parâmetro pode ser dados binários ou caminho para arquivo ou outra instância de classe. Opções é uma matriz de coordenadas de deslocamento relativo x/y do canto superior esquerdo e opacidade de 0 a 100, onde 0 é sem transparência. Por padrão, a imagem será centralizada.
$image->canvas(int $width, int $height, array $options = array())
Inicialize a tela por largura e altura. As opções de cores de fundo estão em uma variedade de configurações de cor/opacidade. Por padrão, tela preta sem opacidade.
$image->show(string $format = null, int $quality = 90)
Envia resposta HTTP com imagem atual em determinado formato e qualidade. Formato é uma extensão de imagem de arquivo. Por padrão, os dados de resposta serão codificados no tipo da imagem atual. Se nenhum tipo de imagem estiver definido ainda, o método retornará dados codificados em jpeg. A qualidade é normalizada para todos os tipos de arquivo em um intervalo de 0 (baixa qualidade, arquivo pequeno) a 100 (melhor qualidade, arquivo grande). O valor padrão é 90. O formato PNG não tem perdas e a qualidade afeta apenas o tamanho da imagem e a velocidade de compactação.
$image->save(string $path, int $quality = 90, string $format = null)
Salve o estado atual do objeto de imagem no sistema de arquivos. Defina opcionalmente um determinado caminho onde a imagem deve ser salva. O tipo de imagem será definido pela extensão do arquivo. Se não houver extensão disponível, os dados de resposta serão codificados no tipo da imagem atual. Se nenhum tipo de imagem estiver definido ainda, o método retornará dados codificados em jpeg. Opcionalmente, você pode substituir isso pelo parâmetro format. A qualidade é normalizada para todos os tipos de arquivo em um intervalo de 0 (baixa qualidade, arquivo pequeno) a 100 (melhor qualidade, arquivo grande). O valor padrão é 90. O formato PNG não tem perdas e a qualidade afeta apenas o tamanho da imagem e a velocidade de compactação.
$image->destroy()
Libera memória associada à instância de imagem atual antes que o script PHP termine. Normalmente os recursos são destruídos automaticamente após a conclusão do script.
$image->width()
Retorna a altura em pixels da imagem atual.
$image->height()
Retorna a altura em pixels da imagem atual.
$image->resize(int $width, int $height)
Redimensiona a imagem atual com base na largura e altura fornecidas. Não presta atenção à proporção. Para redimensionar proporcionalmente, use métodos upsize
e downsize
.
$image->upsize(int $width = null, int $height = null)
Aumente o tamanho da imagem no lado maior. Calculado pela proporção para largura ou altura anulada.
$image->downsize(int $width = null, int $height = null)
Reduza o tamanho da imagem no lado maior. Calculado pela proporção para largura ou altura anulada.
$image->crop(int $width, int $height, array $options = array())
Recorte uma parte retangular da imagem atual com determinada largura e altura. Defina coordenadas x,y opcionais para mover o canto superior esquerdo do recorte para uma determinada posição.
$image->fit(int $width, int $height, string $position = 'center')
Combine corte e redimensionamento para formatar a imagem de maneira inteligente. O método encontrará automaticamente a proporção de aspecto mais adequada à imagem atual, recortá-la e redimensioná-la para a dimensão especificada. Possíveis posições top-left
, top
, top-right
, bottom-left
, bottom
, bottom-right
, right
, left
e center
por padrão.
$image->line(int $x1, int $y1, int $x2, int $y2, array $options = array())
Desenhe uma linha de x,y ponto 1 até x,y ponto 2 na imagem atual. Use o parâmetro options para definir valores de cor, opacidade e largura.
$image->rectangle(int $x, int $y, int $width, int $height, array $options = array())
Desenhe um retângulo colorido na imagem atual. Use o parâmetro de opções para definir valores de cor, opacidade, espessura e contorno.
$image->ellipse(int $x, int $y, int $width, int $height, array $options = array())
Desenhe uma elipse. Use o parâmetro options para definir valores de cor, opacidade e contorno.
$image->brightness(int $level = 0)
Altere o brilho da imagem atual de acordo com o nível fornecido. Use valores entre -100 para brilho mínimo, 0 para nenhuma alteração e +100 para brilho máximo.
$image->contrast(int $level = 0)
Altere o contraste da imagem atual no nível fornecido. Use valores entre -100 para contraste mínimo, 0 para nenhuma alteração e +100 para contraste máximo.
$image->grayscale()
Transforme uma imagem em uma versão em tons de cinza.
$image->blur()
Aplique um efeito de imagem desfocada.
$image->invert()
Inverta as cores de uma imagem.
$image->blackout()
Desenhe um retângulo de opacidade preto na imagem.
$image->rotate(int $angle, array $options = array())
Girar imagem. Defina um ângulo em graus e uma cor opcional da zona descoberta após a rotação.
$image->text(string $text, array $options = array(), array &$boundary = array())
Desenhe texto na imagem. Opções possíveis:
Use o limite para obter as dimensões reais da caixa de texto desenhada. Veja exemplos detalhados abaixo.
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 , ' bottom ' )-> blackout ( 50 );
$ logo = new PosterEditor PosterEditor ();
$ logo -> make ( ' images/logo.png ' )-> downsize ( 150 , null );
$ image -> insert ( $ logo , array ( ' x ' => 50 , ' y ' => 50 ))-> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 );
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Lorem ipsum dolor sit amet ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 1000 ,
' height ' => 400 ,
' horizontal ' => ' center ' ,
' vertical ' => ' center ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 24 ,
' lineheight ' => 1.75 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' jpg ' , 70 );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 900 , 600 );
$ image -> blackout ( 70 );
$ image -> text (
' Lorem ipsum dolor d d 4 g sit amet, consectetur adipiscing et, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex eas commodo consequat sdfsdfl ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 600 ,
' height ' => 400 ,
' horizontal ' => ' justify ' ,
' vertical ' => ' justify ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' png ' );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> crop (
900 , 600 ,
array (
' x ' => ' 0 ' ,
' y ' => ' 100 '
)
);
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Large title with unknown height. Can be multi-line ' ,
array (
' x ' => 50 ,
' y ' => 100 ,
' width ' => 800 ,
' fontpath ' => ' /fonts/merriweather.ttf ' ,
' fontsize ' => 48 ,
' lineheight ' => 1.5 ,
' color ' => ' #9999ff ' ,
),
$ boundary
);
$ image -> text (
' This text appears right after title using smart boundaries ' ,
array (
' x ' => 50 ,
' y ' => $ boundary [ ' y ' ] + $ boundary [ ' height ' ],
' width ' => 800 ,
' fontpath ' => ' /fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ff9999 ' ,
),
$ boundary
);
$ image -> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1000 , 630 , ' bottom ' );
$ image -> contrast ( 5 )-> brightness (- 30 )-> blur ();
$ image -> rectangle (
20 , 20 , 960 , 590 ,
array (
' color ' => ' #ffffff ' ,
' outline ' => true ,
' width ' => 4 ,
)
);
$ image -> ellipse (
200 , 200 , 200 , 200 ,
array (
' color ' => ' #00ff00 ' ,
' opacity ' => 50 ,
)
);
$ image -> ellipse (
800 , 200 , 200 , 200 ,
array (
' color ' => ' #ff0000 ' ,
' opacity ' => 50 ,
)
);
$ image -> rectangle (
480 , 280 , 80 , 140 ,
array (
' color ' => ' #0000ff ' ,
)
);
$ image -> line (
200 , 500 , 800 , 500 ,
array (
' color ' => array ( 255 , 255 , 0 ),
' opacity ' => 10 ,
' width ' => 4 ,
)
);
$ image -> show ( ' png ' );
Todo o código do projeto é armazenado no Github. A melhor maneira de ajudar o projeto é relatar um bug ou adicionar alguma nova funcionalidade. Você também pode abrir aqui um problema ou enviar uma solicitação pull.