Na verdade a classe se chama somente class.upload.php ou Class Upload, é um nome meio genérico e por isso os desenvolvedores adotaram esta classe como Classe Verot. Isso porque Verot é o sobrenome do criador da class, seu nome é Colin VEROT.

Até hoje eu não encontrei uma class tão completa para trabalhar com imagens como esta, uso já faz alguns anos e hoje trabalhando com cakephp não foi diferente. Vou explicar aqui um pouco de como trabalhar com esta class dentro do Cakephp.

Primeiramente devemos transformar a class em um component. É muito simples, um component nada mais é do que uma class, então só devemos colocá-la dentro de uma class e estender para o objeto.

Baixe a class normal neste link: http://www.verot.net/php_class_upload_download.htm

Abra a class com seu editor e insira no inicio:

[sourcecode language='php']
class UploadComponent extends Object {
[/sourcecode]
Obs: Não se esquece de fechar a class no final. :)

Coloque dentro da pasta de components do seu projeto.

Pulando a parte de formulários e html, vamos ver como fica o controller.

No controller, habilite o component com public $components = array('Upload');

O script para fazer upload é bem simples, você pode até criar uma função no controller e depois chamar a função pelo método, veja como eu crio a função:

[sourcecode language='php']

private function uploadImg($imagem){
$this->Upload->upload($imagem);
$imgName = date(‘dmY_His’);
$this->Upload->file_new_name_body = $imgName;
$this->Upload->image_resize = true;
$this->Upload->image_x = 400;
$this->Upload->image_ratio_y = true;
$this->Upload->jpeg_quality = 70;
$this->Upload->allowed = array(‘image/jpeg’,'image/jpg’,'image/gif’);
$this->Upload->process(“img/usuarios/”);
if ($this->Upload->processed) {
$this->Upload->clean();
} else {
$this->erro = $this->Upload->error;
}
return $imgName.”.”.$this->Upload->file_src_name_ext;
}
[/sourcecode]

Linha 01: Iniciamos a função, eu criei como private, mas caso você precise usá-la em outros controllers, substitua private por public.

Linha 02: Iniciamos o componente nesta linha e o atribuímos a imagem. A variavel $imagem deve receber o array completo de um arquivo.

Linha 03: Definimos um nome padrão para o arquivo, eu costumo criar o arquivo como dia, mes, ano, hora, minuto e segundo.

Linha 04: Atribuímos o nome padrão que criamos para a variável do component file_new_name_body. O componente vai copiar o arquivo e dar o nome que atribuímos e não o mesmo nome do arquivo original.

Linha 05: image_resize serve para habilitar o redimensionamento da imagem. Caso ele esteja como false, a linhas 06 e 07 não irão funcionar.

Linha 06: Em image_x definimos o tamanho do redimensionamento da imagem.

Linha 07: image_ratio_y é muito importante, se a imagem estiver com o redimensionamento habilitado, esta variável faz que a altura da imagem seja redimencionada na proporção da largura, assim a imagem não fica distorcida.

Linha 08: A jpeg_quality copia o arquivo na qualidade escolhida, neste caso com a qualidade 70.

Linha 09: Allowed configura os tipos de arquivos que serão aceitos. Para aceitar todos os tipos de de imagens, é só colocar image/*.

Linha 10: Process é comando que executa o upload. Dentro de Process é o diretório que o arquivo será gravado.

Linha 11: Verifica se o upload foi um sucesso.

Linha 12: Se o upload for um sucesso, a função clean() vai executar uma limpeza do component.

Linha 14: Se o upload falhar, a função irá retornar o erro na variável $this->erro.

Linha 16: file_src_name_ext pega a extensão do arquivo, então eu aproveito para montar o nome do arquivo completo e retornar na função.

Dentro do método é só chamar a função, veja um exemplo:

[sourcecode language='php']
$this->data['Model']['imagem'] = $this->uploadImg($this->data['Model']['imagem']);
[/sourcecode]

Para trabalhar com o erro que a função gerou, basta imprimir a variável $this->erro.

A Class Verot é muito bem documentada, seu autor teve um cuidado nesse processo, tem uma explicação completa sobre todos os recursos da class. Você pode acompanhar a documentação completa neste link: http://www.verot.net/res/sources/class.upload.html.

Vou listar alguns dos recursos que a classe tem:

  • Aplicar marcas d’agua na imagem
  • Escrever na imagem
  • Alterar contraste
  • Aplicar efeito negative
  • Cortar imagem
  • Redimensionar de forma inteligente
  • Alterar qualidade
  • É possível detectar a largura e altura da imagem e validar
  • Converter em outros formatos: jpg, gif, png, bmp e etc
  • Dar zoom na imagem

Há muito mais recursos, vale a pena conferir sua documentação.

Atualização [02-11-09]
Como algumas pessoas tiveram dúvidas quanto o component para cekaphp da class verot, disponibilizei para download neste link: http://www.renanlima.com/downloads/uploadVerot.zip