Manipulando imagens com CakePHP

cakephp_logoO 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.

GitHub do componente.

Qualquer dúvida quanto ao uso ou ao funcionamento, basta entrar em contato.

Até a próxima 😉

10 pensou em “Manipulando imagens com CakePHP

  1. Fabio Rybeiro

    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!

    Responder
    1. angelito Autor do post

      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á 😉

      Responder
  2. Marcos

    Amigo, onde consigo fazer o download deste componente ?

    No post você diz apenas para copiar o arquivo QimageComponent.php, mas onde encontro ele ?

    Obrigado.

    Responder
    1. angelito Autor do post

      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.

      Responder
  3. Roberto

    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

    Responder
  4. Rdso

    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.

    Responder
      1. RdSO

        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?

        Responder
        1. RdSO

          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!

          Responder
  5. Aline

    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?

    Responder

Deixe um comentário para Fabio Rybeiro Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.