O Qimage (QuickImage) é um componente desenvolvido para o framework CakePHP (versão 2.x) cujo objetivo é facilitar a manipulação e o upload de imagens. Através dele é possível copiar imagens vindas através de upload, redimensionar, cortar e adicionar marca d’água em imagens.
Instalação
Basta copiar o arquivo QimageComponent.php para a pasta /app/Controller/Component/ da sua aplicação e incluir o nome ‘Qimage’ dentro do array de componentes do seu controller. Por exemplo:
public $components = array('Qimage');
Após isto você já pode chamar os métodos do componente, vamos a eles:
copy
Este método simplesmente copia a imagem informada (que deve ser um índice do array $_FILES) para o local informado no índice ‘path’ do array passado como parâmetro. Recebe um array onde os índices que devem ser informados são:
– $data[‘file’] -> array com os dados da imagem. Geralmente são os dados do array $_FILES. Por exemplo, se estamos fazendo o upload de um campo file com o nome ‘logo’, esse parâmetro deve ser o conteúdo de $_FILES[‘logo’].
– $data[‘path’] -> local onde a imagem deve ser salva.
Exemplo:
$this->Qimage->copy(array('file' => $_FILES['foto_1'], 'path' => '/img/fotos/'));
watermark
Este método irá adicionar a marca d’água, que estiver configurada na classe, na imagem informada. Recebe um array como parâmetro onde os dados que devem ser informados são:
– $data[‘file’] -> arquivo onde a marca d’água deve ser aplicada. A imagem da marca d’água fica definida na propriedade watermarkImage da classe.
Exemplo:
$this->Qimage->watermark(array('file' => '/img/foto1.png'));
crop
Este método corta uma determinada área da imagem. Recebe um array como parâmetro cujos índices desse array que serão necessários são:
– $data[‘file’] -> imagem que deve ser cortada.
– $data[‘output’] -> local onde o arquivo gerado deverá ser salvo. Será gerado um arquivo com o mesmo nome do arquivo de entrada, portanto, deve ser um diretório diferente do diretório do arquivo de entrada, caso contrário ele será sobreescrito.
– $data[‘w’] -> largura da área que será cortada.
– $data[‘h’] -> altura da área que será cortada.
– $data[‘x’] -> ponto x onde começará o corte da imagem.
– $data[‘y’] -> ponto y onde começará o corte da imagem.
Exemplo:
$this->Qimage->crop(array(
'w' => 400,
'h' => 300,
'x' => 100,
'y' => 100,
'file' => $file,
'output' => $path
));
resize
Este método é responsável por realizar o redimensionamento de uma imagem. Recebe um array como parâmetro cujos índices desse array que serão necessários são:
– $data[‘file’] -> imagem que deve ser redimensionada.
– $data[‘output’] -> local onde o arquivo gerado deverá ser salvo. Será gerado um arquivo com o mesmo nome do arquivo de entrada, portanto, deve ser um diretório diferente do diretório do arquivo de entrada, caso contrário ele será sobreescrito.
– $data[‘width’] -> largura que a imagem deve ser redimensionada.
– $data[‘height’] -> altura que a imagem deve ser redimensionada.
– $data[‘proporcional’] – > True ou false. se for true, redimensiona a imagem somente se as dimensões originais da imagem forem maiores que as informadas nos parâmetros.
Se somente a altura ou a largura for informada, o método calculará automaticamente o valor que falta para que a imagem fique proporcional.
Exemplo:
$this->Qimage->resize(array('height' => 180, 'width' => 240, 'file' => '/img/img1.jpg', 'output' => '/img/thumbs/'));
O download do componente pode ser feito AQUI.
Qualquer dúvida quanto ao uso ou ao funcionamento, basta entrar em contato.
Até a próxima 😉
Boa noite. Apesar de ser um tutorial bem claro e explicativo não consegui fazê-lo funcionar. Por exemplo, onde eu incluo essa chamada $this->Qimage ? E o meu formulário ?
Desculpe, sou iniciante e com conceito básico. Não estou conseguindo fazer esse componente funcionar.
Parabéns, espero seu retorno!
Essa chamada do $this->Qimage vai no seu controller. Você deve chamar o método copy passando no parâmetro file os dados da superglobal $_FILES cujo índice corresponde ao seu campo. O código do componente é bem explicativo, sugiro dar uma olhada lá 😉
Amigo, onde consigo fazer o download deste componente ?
No post você diz apenas para copiar o arquivo QimageComponent.php, mas onde encontro ele ?
Obrigado.
Existe um link no post, no trecho ‘O download pode ser feito AQUI.’ Há também um link para o repositório do componente no Github.
Meu amigo onde eu coloco este parâmetro que ensinas?
“$this->Qimage->copy(array(‘file’ => $_FILES[‘foto_1’], ‘path’ => ‘/img/fotos/’));”
Fica dentro do método ADD do controller?
Obrigado
Por enquanto só testei o método resize, funciona like a charm! 🙂
Tem um erro de digitação aí no exemplo, está “reize”. Corrige aí senão a galera do copy/paste vai te processar porque não funciona…
Agora que vi, você mesmo criou, não foi? Bom trabalho cara.
Valeu.
Muito obrigado. 😉
Cara, eu gostaria de poder usar esse component como behavior, pois tornariam meu código mais enxuto. Eu transferi para um behavior e até funcionou, mas as imagens estavam sendo salvas dispixelizadas.
Não sei se por causa da “public function initialize”… Se você fosse usar como behavior o que mudaria?
Consegui… \o/ levando $this->jpgQuality = 100;
$this->errors = array(); para dentro do método resize que é o que estou usando no momento!
Pegar código pronto só é ruim para quem não estuda, mas para quem ler e tenta entender tudo é ótimo para aprender.
Valeu!
Boa noite!
Estou tendo o erro “‘Destination path is not writable!” ao utilizar a função copy do componente. Segui o exemplo do tutorial, e não sei como resolver o problema.
$foto = $this->Qimage->copy(array(‘file’ => $this->data[‘Book’][‘photo’], ‘path’ => ‘/Images/Books/’));
O que está acontecendo?