movescode / cropper
Official image crop and thumbnail component for MovesOS
Requires
- php: ^8.2
- ext-fileinfo: *
- ext-gd: *
- ext-mbstring: *
README
Componente oficial de thumbnails, recorte e cache de imagens do MovesOS. Usa GD, valida o conteúdo da imagem e mantém cada operação de limpeza confinada ao cache configurado.
Requisitos e instalação
- PHP 8.2+
- GD
- Fileinfo
- Mbstring
composer require movescode/cropper:^1.0
Criar thumbnails
use MovesCode\Cropper\Cropper; $cropper = new Cropper( cachePath: 'storage/images/cache', quality: 75, compressor: 5 ); $proportional = $cropper->make('storage/images/photo.jpg', 500); $cropped = $cropper->make('storage/images/photo.jpg', 500, 300);
Sem altura, a proporção original é mantida. Com largura e altura, a imagem usa recorte central no formato cover.
make() retorna o caminho do cache ou null quando a origem não existe. Chamadas repetidas com a mesma origem e dimensões reutilizam o arquivo existente.
Formatos
São aceitos JPEG, PNG, GIF e WebP. Transparência é preservada quando o formato permite.
Para gerar cache diretamente em WebP:
$cropper = new Cropper('storage/images/cache', webP: true); $thumb = $cropper->make('storage/images/photo.png', 800, 450);
Conversão WebP
$webp = $cropper->toWebP('storage/images/photo.png', unlinkImage: false);
Com unlinkImage: true, a origem é removida somente após a conversão bem-sucedida.
Limpar cache
$cropper->flush('storage/images/photo.jpg'); // somente essa origem $cropper->flush(); // todo o cache configurado
A limpeza seletiva identifica todas as dimensões criadas para a mesma origem.
Qualidade e compressão
- JPEG/WebP: qualidade entre 0 e 100.
- PNG: compressão entre 0 e 9.
- Valores fora do intervalo são normalizados.
Segurança e limites
A origem precisa ser uma imagem decodificável. Dimensões são limitadas a 10.000 pixels por eixo e 40 milhões de pixels de saída. O diretório raiz não pode ser usado como cache e cada exclusão é confirmada dentro do cache real.
Veja exemple/index.php. Licença MIT.