Palavra:   

Revista PHP / PHP

Carlos Silva

Desenvolvedor web, certificado ISPA CYCLADES e Macromedia. Desenvolvedor usando as tecnologias C#, JSP, PHP, JavaScript, XML, ABAP, Tableless e outros. Certificado em Segurança da Informação e atualmente trabalhando com ativos de Rede Cisco.

Upload de imagem com a classe Classclass.upload

Nesse artigo meu objetivo é mostrar como ganhar tempo e poder em seu upload de imagens.

Com a classe você pode integrar rapidamente upload de arquivos em seu site. Se o arquivo é uma imagem, você pode converter, redimensionar, cortar - lo de muitas maneiras. Você também pode aplicar filtros, adiciona bordas, frames, marca d'água, além de trabalhar com imagens direto do servidor, fazer upload múltiplo, também é possível upload de arquivo, lembrando que esse artigo é somente explicação de como utilizar a classe oficial em inglês.

Requesito  ( download )
class.upload.php 
versão: 0.24

Vamos começar criando nosso arquivo com o formulário.

Arquivo index.html
HTML
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4. <title>Revista PHP</title>
  5. fieldset {
  6. width: 50%;
  7. margin: 15px 0px 25px 0px;
  8. padding: 15px;
  9. }
  10. legend {
  11. font-weight: bold;
  12. }
  13. .button {
  14. text-align: right;
  15. }
  16. .button input {
  17. font-weight: bold;
  18. }
  19.  
  20. </style>
  21.  
  22. </head>
  23. <legend>Upload de imagem</legend>
  24. <p>Selecione a imagem e clique em 'upload' </p>
  25. <form name="form2" enctype="multipart/form-data" method="post" action="upload.php" />
  26. <p><input type="file" size="32" name="imagem" value="" /></p>
  27. <p class="button"><input type="hidden" name="acao" value="imagem" />
  28. <input type="submit" name="Submit" value="upload" /></p>
  29. </form>
  30. </fieldset>
  31. </body>
  32. </html>
www.revistaphp.com.br

Agora vamos criar nosso arquivo upload.php, para facilitar os comentários já estão no código.

Arquivo  upload.php
PHP
  1. <?php
  2. // Aqui incluimos a classe upload
  3. include('class.upload.php');
  4.  
  5. // Verificamos se a acao é igual a imagem
  6. if ($_POST['acao'] == 'imagem')
  7. {
  8. // Instanciamos o objeto Upload
  9. $handle = new Upload($_FILES['imagem']);
  10.  
  11. // Então verificamos se o arquivo foi carregado corretamente
  12. if ($handle->uploaded)
  13. {
  14. // Definimos as configurações desejadas da imagem maior
  15. $handle->image_resize = true;
  16. $handle->image_ratio_y = false;
  17. $handle->image_x = 640;
  18. $handle->image_y = 480;
  19. $handle->image_watermark = 'watermark.png';
  20. $handle->image_watermark_x = -10;
  21. $handle->image_watermark_y = -10;
  22. $handle->file_name_body_add = "_nome";
  23. $handle->mime_check = true;
  24.  
  25. // Definimos a pasta para onde a imagem maior será armazenada
  26. $handle->Process('./imagens/');
  27.  
  28. // Em caso de sucesso no upload podemos fazer outras ações como insert em um banco de cados
  29. if ($handle->processed)
  30. {
  31. // Eximos a informação de sucesso ou qualquer outra ação de sua escolha
  32. echo '<fieldset>';
  33. echo ' <legend>Operação realizada com sucesso!</legend>';
  34. echo "Aqui podemos fazer um INSERT no banco";
  35. echo '</fieldset>';
  36. }
  37. else
  38. {
  39. // Em caso de erro listamos o erro abaixo
  40. echo '<fieldset>';
  41. echo ' <legend>Erro encontrado!</legend>';
  42. echo ' Erro: ' . $handle->error . '';
  43. echo '</fieldset>';
  44. }
  45.  
  46. // Aqui nos devifimos nossas configurações de imagem do thumbs
  47. $handle->image_resize = true;
  48. $handle->image_ratio_y = false;
  49. $handle->image_x = 100;
  50. $handle->image_y = 75;
  51. $handle->image_contrast = 10;
  52. $handle->jpeg_quality = 70;
  53. $handle->file_name_body_add = "_nome";
  54.  
  55. // Definimos a pasta para onde a imagem thumbs será armazenada
  56. $handle->Process('./imagens/thumbs/');
  57.  
  58. // Excluimos os arquivos temporarios
  59. $handle-> Clean();
  60.  
  61. }
  62. else
  63. {
  64. // Em caso de erro listamos o erro abaixo
  65. echo '<fieldset>';
  66. echo ' <legend>file not uploaded on the server</legend>';
  67. echo ' Error: ' . $handle->error . '';
  68. echo '</fieldset>';
  69. }
  70. }
  71.  
  72. echo '<p><a href="index.html">Voltar</a></p>';
  73. // Aqui somente recupero o nome da imagem caso queira fazer um insert em banco de dados
  74. $nome_da_imagem = $handle->file_dst_name;
  75.  
  76. echo $nome_da_imagem;
  77. ?>
www.revistaphp.com.br


Bom nosso script terminou por aqui, mas vou mostrar outras opções para trabalhar sua imagem
PHP
  1. <?php
  2. // Definimos um novo novo para nossa imagem
  3. $handle->file_new_name_body = 'nome1';
  4.  
  5. // Adicionamos um nome no final do arquivo, ou seja no final do nome ele inclui o _data ficando nome1_data
  6. $handle->file_name_body_add = '_data';
  7.  
  8. // Mudamos a extensão do arquivo para txt ou outro qualquer
  9. $handle->file_new_name_ext = 'txt';
  10.  
  11. // Formata o nome do arquivo (espaço subtituido por _)
  12. $handle->file_safe_name = true;
  13.  
  14. // Sobrescrever o arquivo de mesmo nome, por default é false
  15. $handle->file_overwrite = true;
  16.  
  17. // Renomear arquivo automaticamente caso existir um mesmo nome de arquivo no servidor, por default é true
  18. $handle->file_auto_rename = true;
  19.  
  20. // Criamos automaticamente o diretória caso não exista no servidor, por default é true
  21. $handle->auto_create_dir = true;
  22.  
  23. // Definimos a permissão no diretório automaticamente, por default é true
  24. $handle->dir_auto_chmod = true;
  25.  
  26. // Definimos o tipo de permissão no diretório, por default é 0777
  27. $handle->dir_chmod = 0777;
  28.  
  29. // Definimos o tamanho máximo do arquivo, por default é usado o mesmo do php.ini
  30. $handle->file_max_size = '1024'; // 1KB
  31.  
  32. // Verificar o Mime-Type para um tipo de imagem
  33. $handle->mime_check = false;
  34.  
  35. // Define se a classe usa mime_magic, por default é false)
  36. $handle->mime_magic_check = true;
  37.  
  38. // Define se a classe testa os arquivos, por default é true
  39. $handle->no_script = false;
  40.  
  41. // Permitimos array de mime-types, pordefault: check Init
  42. $handle->allowed = array('application/pdf','application/msword');
  43.  
  44. // Converter o tipo de imagem para os ossíveis tipos: ''|'png'|'jpeg'|'gif' default: ''
  45. $handle->image_convert = 'jpg';
  46.  
  47. // Definimos a qualidade da imagem a ser enviada para o servidor, por default é 85
  48. $handle->jpeg_quality = 70;
  49.  
  50. // Se configurado para um tamanho em bytes, a imagem irá aproximar o jpeg_quality, assim a saída da imagem se enquadra dentro do tamanho
  51. $handle->jpeg_size = 3072;
  52.  
  53. // Determina se uma imagem será redimensionada, por default é false
  54. $handle->image_resize = true;
  55.  
  56. // Em caso da opção image_resize == true
  57. // Definimos o tamanho da Largura, por default é 150
  58. $handle->image_x = 100;
  59.  
  60. // Definimos o tamanho da altura, por default é 150
  61. $handle->image_y = 200;
  62.  
  63. // Se true, redimensiona a imagem conservar o tamanhos original, utilizando image_x E image_y como tamanhos máximo se true (padrão: falso)
  64. $handle->image_ratio = true;
  65.  
  66. // Corta a imagem
  67. $handle->image_ratio_crop = true;
  68.  
  69. // Se true, redimensiona a imagem conservar o tamanhos original, utilizando image_x E image_y como tamanhos máximo,
  70. // adequando a imagem no espaço e colorir o restante espaço.(padrão: falso)
  71. $handle->image_ratio_fill = true;
  72.  
  73. // Aplicando zoom in (padrão: falso)
  74. $handle->image_ratio_no_zoom_in = true;
  75.  
  76. // Aplicando zoom out (default: false)
  77. $handle->image_ratio_no_zoom_out = true;
  78.  
  79. // Redimenciona proporcional a imagem original em X (default: false)
  80. $handle->image_ratio_x = true;
  81.  
  82. // Redimenciona proporcional a imagem original em Y (default: false)
  83. $handle->image_ratio_y = true;
  84.  
  85. // Requer GD2+
  86. // Aplica na imagem o brightness. Valores entre -127 e 127 (default: NULL)
  87. $handle->image_brightness = 40;
  88.  
  89. // Aplica contrast na imagem. Valores entre -127 e 127 (default: NULL)
  90. $handle->image_contrast = 50;
  91.  
  92. // Aplica uma cor na imagem, Valores devem ser hexadecimais #FFFFFF (default: NULL)
  93. $handle->image_tint_color = '#FF0000';
  94.  
  95. // Irá adicionar um colorido superposição, Valores devem ser hexadecimais #FFFFFF (padrão: NULL)
  96. $handle->image_overlay_color = '#FF0000';
  97.  
  98. // Se image_overlay_color tiver ativado, determinamos a opacidade (default: 50)
  99. $handle->image_overlay_percent = 20;
  100.  
  101. // Aplicamos o efeito negativo (default: false)
  102. $handle->image_negative = true;
  103.  
  104. // Aplicamos o greyscale (default: false)
  105. $handle->image_greyscale = true;
  106.  
  107. // Aplicamos o filtro threshold. Valores devem ser entre -127 e 127 (default: NULL)
  108. $handle->image_threshold = 20;
  109.  
  110. // Aplicamos um texto sobre a imagem (default: NULL)
  111. $handle->image_text = 'Revista PHP';
  112.  
  113. // Determinamos a região da imagem que aplicamos o texto, 'h' horizontal ou 'v' vertical (default: 'h')
  114. $handle->image_text_direction = 'v';
  115.  
  116. // Definimos a cor do texto em hexadecimal (default: #FFFFFF)
  117. $handle->image_text_color = '#FF0000';
  118.  
  119. // Definimos a opacidade do texto, valores entre 0 e 100 (default: 100)
  120. $handle->image_text_percent = 50;
  121.  
  122. // Aplicamos cor de fundo no texto, em hexadecimal (default: NULL)
  123. $handle->image_text_background = '#FFFFFF';
  124.  
  125. // Definimos a opacidade do background, valores entre 0 e 100 (default: 100)
  126. $handle->image_text_background_percent = 50;
  127.  
  128. // Tamanho da fonte, valores de 1 a 5. default: 5
  129. $handle->image_text_font = 4;
  130.  
  131. // Região da imagem para mostrar o texto em X (default: NULL)
  132. $handle->image_text_x = 5;
  133.  
  134. // Região da imagem para mostrar o texto em Y (default: NULL)
  135. $handle->image_text_y = 5;
  136.  
  137. // Região da imagem para mostrar o texto, a combinação de 1 ou 2 para 'TBLR': top, bottom, left, right (default: NULL)
  138. $handle->image_text_position = 'LR';
  139.  
  140. // Definimos o espaçamento em X e Y (default: 0)
  141. $handle->image_text_padding = 5;
  142.  
  143. // Definimos o espaçamento em X (default: NULL)
  144. $handle->image_text_padding_x = 2;
  145.  
  146. // Definimos o espaçamento em Y (default: NULL)
  147. $handle->image_text_padding_y = 10;
  148.  
  149. // Alinhamos o texto, 'L', 'C' ou 'R' (default: 'C')
  150. $handle->image_text_alignment = 'R';
  151.  
  152. // Aplicando espaçamento entre as linhas (default: 0)
  153. $handle->image_text_line_spacing = 3;
  154.  
  155. // Aplicamos Flip na imagem 'h' horizontal ou 'v' vertical (default: NULL)
  156. $handle->image_flip = 'h';
  157.  
  158. // Rotacionando a imagem. Valores 90, 180 e 270 (default: NULL)
  159. $handle->image_rotate = 90;
  160.  
  161. // Cortando a imagem em varios pontos. aceita 4, 2 ou 1. Valor 'T R B L' ou 'TB LR' ou 'TBLR'. Dimensão pode ser de 20, ou 20% ou 20px (default: NULL)
  162. $handle->image_crop = array(50,40,30,20); // ou '-20 20%'...
  163.  
  164. // Difinimos a cor de fundo da imagem, em hexadecimal (default: null)
  165. $handle->image_background_color = '#FF00FF';
  166.  
  167. // Aplica aqueles efeitos de borda com relevo. valor em pixel (default: NULL)
  168. $handle->image_bevel = 20;
  169.  
  170. // Aplica aqueles efeitos de borda com relevo com a cor definida, em hexadecimal (default: #FFFFFF)
  171. // A color1 devde que será aplicada no lado superior e esquedo
  172. $handle->image_bevel_color1 = '#FFFFFF';
  173.  
  174. // Aplica aqueles efeitos de borda com relevo com a cor definida, em hexadecimal (default: #000000)
  175. // A color2 devde que será aplicada no lado inferior e direito
  176. $handle->image_bevel_color2 = '#000000';
  177.  
  178. // Aplicando borda na imagem. Aceita 4, 2 ou 1 valores são 'T R B L' ou 'TB LR' ou 'TBLR'. Dimensão pode ser de 20, ou 20px ou 20% (default: NULL)
  179. $handle->image_border = '3px'; // ou '-20 20%' ou array(3,2)...
  180.  
  181. // Definimos a cor da borda, em hexadecimal (default: #FFFFFF)
  182. $handle->image_border_color = '#FFFFFF';
  183.  
  184. // Definimos um frame, é igual uma borda com relevo parecendo um quadro mesmo: 1=flat 2=crossed (default: NULL)
  185. $handle->image_frame = 2;
  186.  
  187. // Definimos as cores de cada lado do frame, array ou espaço separado por string (default: '#FFFFFF #999999 #666666 #000000')
  188. $handle->image_frame_colors = array('#999999', '#FF0000', '#666666', '#333333', '#000000');
  189.  
  190. // Aplicamos uma marca d'agua, o arquivo png deve estar no servidor. Aceita arquivos GIF, JPG, PNG e PNG alpha (default: NULL)
  191. $handle->image_watermark = 'watermark.png';
  192.  
  193. // Define a posição onde colocar a marca d'agua. Valor positivo= esquerda, negativo= direita (default: NULL)
  194. $handle->image_watermark_x = 5;
  195.  
  196. // Define a posição onde colocar a marca d'agua. Valor positivo= superior, negativo= inferior (default: NULL)
  197. $handle->image_watermark_y = 5;
  198.  
  199. // Define a posição onde colocar a marca d'agua, a combinação pode ser 1 ou 2 para 'TBLR': top, bottom, left, right (default: NULL)
  200. $handle->image_watermark_position = 'LR';
  201.  
  202. // Definimos o reflexo com altura. Formato pode ser em pixels ou percentage, 40, '40', '40px' ou '40%' (default: NULL)
  203. $handle->image_reflection_height = '25%';
  204.  
  205. // Define o espaçamento do reflexo a imagem, pode ser negativo (default: NULL)
  206. $handle->image_reflection_space = 3;
  207.  
  208. // Definimos a cor de fundo do reflexo em hexadecimal (default: #FFFFFF)
  209. $handle->image_reflection_color = '#000000';
  210.  
  211. // Definimos o nível de opacidade da cor aplicada no reflexo, valor inteiro de 0 a 100 (default: 60)
  212. $handle->image_reflection_opacity = 60;
  213. ?>
www.revistaphp.com.br
Abraço e espero ter ajudado com esse artigo.
Maiores informações na página oficial da classe: http://www.verot.net

Opções de Interação

Comentários

Erro
Por: Deocir, 09/07/2008   18:17:30
Fiz conforme tutorial, é feito tudo certinho, até aparece a mensagem: Operação realizada com sucesso!
"Aqui podemos fazer um INSERT no banco"; Mas eu vou la na pasta ver e o arquivo que fiz upload não está lá... faltou alguma coisa?
Dúvida
Por: murillo, 06/06/2008   17:03:07
Olá, estava precisando de uma página que incluisse uma imagem, com redimensionamento, porem me deparei com um erro, o qual nao consigo resolver. Criei as variaveis $w=$handle->image_src_x; $h=$handle->image_src_y; mas nao consegui exibi-las dessa forma: echo $w . ' - ' . $h;.
Postarei o código inteiro abaixo, agradeço desde já a ajuda ;D
Abraços

if ($_POST['up'] == 'true') {// realiza upload do logo
include ("../include/class.upload/class.upload.php");
$handle = new Upload($_FILES['file']);
$handle->mime_check = true;
$handle->file_overwrite = true;
$handle->file_new_name_body = $_POST['idFab'];
$handle->Process('../dbimg/fabricantes/logo/');
$w=$handle->image_src_x;
$h=$handle->image_src_y;
$handle->image_resize = true;

if ($w > $h){
$handle->image_ratio_y = true;
$handle->image_x = 100;
} else {
$handle->image_ratio_x = true;
$handle->image_y = 75;
}

if ($handle->processed) {
echo 'Upload feito com sucesso!';
} else {
echo 'Erro: ' . $handle->error . '';
}

echo $w . ' - ' . $h;

}
erro estranho
Por: sergio, 15/02/2008   13:05:12
fiz o download do script e este quer o upload como o upload2, o upload2 funciona correctamente a nao ser na situação 2 das opcoes, o upload da-me um erro Erro: GD doesn't seem to be present

como posso resolver?? ja q queria aproveitar este codigo para inserir a foto no registo de dados de um perfil com varios campos incluindo a foto.

Obrigado
Em 1º lugar foi muito bom mas tenho uma duvida
Por: get, 09/02/2008   15:54:50
eu sou web designer toda vez que eu faço um site tem o problema de atualização do site, ex.... fotos textos e etc....

tem como vc me explicar se dar pra fazer isso ou se vc me ensima valeu brother ....

meu email get_rs@hotmail.com

get
Como fazer com upload multiplos
Por: Diego, 04/02/2008   08:21:28
E aí Carlos tudo bem? Kra excelente classe essa...
Porém eu tenho uma tabela com 4 campos, foto1, foto2, foto3 e foto4 e tenho um formulário com 4 <input files> para fazer o upload multiplo. Agora como eu faço para salvar as fotos dos input files nos respectivos campos na tabela?
Tipo <input file 1> salva no campo foto1, <input file 2> salva no campo 2 e assim com todos. Kra obrigado, eu já usei essa classe para outros trabalhos e é uma beleza, é só pra fazer isso que eu estou enroscando um pouco...rsrs. Grato