<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Renan Lima &#187; class verot</title>
	<atom:link href="http://www.renanlima.com/blog/tag/class-verot/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.renanlima.com/blog</link>
	<description>Um pouco do que gosto, faço e crio</description>
	<lastBuildDate>Fri, 03 Sep 2010 15:04:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Cakephp &#8211; Trabalhando Upload com a classe Verot</title>
		<link>http://www.renanlima.com/blog/cakephp-trabalhando-upload-com-a-classe-verot/</link>
		<comments>http://www.renanlima.com/blog/cakephp-trabalhando-upload-com-a-classe-verot/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 15:45:48 +0000</pubDate>
		<dc:creator>Renan Lima</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[class verot]]></category>
		<category><![CDATA[component upload]]></category>
		<category><![CDATA[components cakephp]]></category>
		<category><![CDATA[love cakephp]]></category>
		<category><![CDATA[upload de imagens]]></category>

		<guid isPermaLink="false">http://www.renanlima.com/blog/?p=951</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 é <a href="http://www.verot.net/home.htm">Colin VEROT</a>.</p>
<p>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.</p>
<p>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.</p>
<p>Baixe a class normal neste link: <a href="http://www.verot.net/php_class_upload_download.htm" target="_blank">http://www.verot.net/php_class_upload_download.htm</a></p>
<p>Abra a class com seu editor e insira no inicio:</p>
<pre class="brush: php">
class UploadComponent extends Object {
</pre>
<p><em> Obs: Não se esquece de fechar a class no final.</em> <img src='http://www.renanlima.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Coloque dentro da pasta de components do seu projeto.</p>
<p>Pulando a parte de formulários e html, vamos ver como fica o controller.</p>
<p>No controller, habilite o component com <code>public $components = array('Upload');</code></p>
<p>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:</p>
<pre class="brush: php">

private function uploadImg($imagem){
$this-&gt;Upload-&gt;upload($imagem);
$imgName = date(&#039;dmY_His&#039;);
$this-&gt;Upload-&gt;file_new_name_body   = $imgName;
$this-&gt;Upload-&gt;image_resize         = true;
$this-&gt;Upload-&gt;image_x              = 400;
$this-&gt;Upload-&gt;image_ratio_y        = true;
$this-&gt;Upload-&gt;jpeg_quality         = 70;
$this-&gt;Upload-&gt;allowed = array(&#039;image/jpeg&#039;,&#039;image/jpg&#039;,&#039;image/gif&#039;);
$this-&gt;Upload-&gt;process(&quot;img/usuarios/&quot;);
if ($this-&gt;Upload-&gt;processed) {
$this-&gt;Upload-&gt;clean();
} else {
$this-&gt;erro = $this-&gt;Upload-&gt;error;
}
return $imgName.&quot;.&quot;.$this-&gt;Upload-&gt;file_src_name_ext;
}
</pre>
<p><strong>Linha 01:</strong> Iniciamos a função, eu criei como private, mas caso você precise usá-la em outros controllers, substitua private por public.</p>
<p><strong>Linha 02:</strong> Iniciamos o componente nesta linha e o atribuímos a imagem. A variavel $imagem deve receber o array completo de um arquivo.</p>
<p><strong>Linha 03:</strong> Definimos um nome padrão para o arquivo, eu costumo criar o arquivo como dia, mes, ano, hora, minuto e segundo.</p>
<p><strong>Linha 04:</strong> Atribuímos o nome padrão que criamos para a variável do component <em>file_new_name_body</em>. O componente vai copiar o arquivo e dar o nome que atribuímos e não o mesmo nome do arquivo original.</p>
<p><strong>Linha 05:</strong> image_resize serve para habilitar o redimensionamento da imagem. Caso ele esteja como false, a linhas 06 e 07 não irão funcionar.</p>
<p><strong>Linha 06: </strong>Em image_x definimos o tamanho do redimensionamento da imagem.</p>
<p><strong>Linha 07: </strong> 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.</p>
<p><strong>Linha 08:</strong> A jpeg_quality copia o arquivo na qualidade escolhida, neste caso com a qualidade 70.</p>
<p><strong>Linha 09: </strong>Allowed configura os tipos de arquivos que serão aceitos. Para aceitar todos os tipos de de imagens, é só colocar <em><span style="color: #999999;">image/*</span></em>.</p>
<p><strong>Linha 10:</strong> Process é comando que executa o upload. Dentro de Process é o diretório que o arquivo será gravado.</p>
<p><strong>Linha 11:</strong> Verifica se o upload foi um sucesso.</p>
<p><strong>Linha 12:</strong> Se o upload for um sucesso, a função clean() vai executar uma limpeza do component.</p>
<p><strong>Linha 14:</strong> Se o upload falhar, a função irá retornar o erro na variável $this-&gt;erro.</p>
<p><strong>Linha 16: </strong><span><span style="margin-left: 0px ! important;"><code>file_src_name_ext</code></span></span> pega a extensão do arquivo, então eu aproveito para montar o nome do arquivo completo e retornar na função.</p>
<p>Dentro do método é só chamar a função, veja um exemplo:</p>
<pre class="brush: php">
$this-&gt;data[&#039;Model&#039;][&#039;imagem&#039;] = $this-&gt;uploadImg($this-&gt;data[&#039;Model&#039;][&#039;imagem&#039;]);
</pre>
<p>Para trabalhar com o erro que a função gerou, basta imprimir a variável $this-&gt;erro.</p>
<p>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: <a href="http://www.verot.net/res/sources/class.upload.html" target="_blank">http://www.verot.net/res/sources/class.upload.html</a>.</p>
<p>Vou listar alguns dos recursos que a classe tem:</p>
<ul>
<li>Aplicar marcas d&#8217;agua na imagem</li>
<li>Escrever na imagem</li>
<li>Alterar contraste</li>
<li>Aplicar  efeito negative</li>
<li>Cortar imagem</li>
<li>Redimensionar de forma inteligente</li>
<li>Alterar qualidade</li>
<li>É possível detectar a largura e altura da imagem e validar</li>
<li>Converter em outros formatos: jpg, gif, png, bmp e etc</li>
<li>Dar zoom na imagem</li>
</ul>
<p>Há muito mais recursos, vale a pena conferir sua documentação.</p>
<blockquote style='font-size:11px;'><p>
<strong>Atualização [02-11-09]</strong><br />
Como algumas pessoas tiveram dúvidas quanto o component para cekaphp da class verot, disponibilizei para download neste link: <a href="http://www.renanlima.com/downloads/uploadVerot.zip">http://www.renanlima.com/downloads/uploadVerot.zip</a>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.renanlima.com/blog/cakephp-trabalhando-upload-com-a-classe-verot/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
