Share Pastebin
Guest
Public paste!

Eber

By: a guest | Oct 2nd, 2008 | Syntax: PHP | Size: 3.09 KB | Hits: 118 | Expires: Never
Copy text to clipboard
  1. // Este script você pode usar assim... thumb.php?src=imagem.jpg&w=200
  2. // onde o parâmetro src = caminho da imagem e w = largura desejada
  3.  
  4. // Aqui, um jeito fácil e rápido de pegar a extensão do arquivo em qualquer string
  5. $ext = strtolower(substr(strrchr($_GET['src'], "."), 1));
  6.  
  7. // Como meu site fica no dreamhost e eu quero pegar imagens de fontes externas, tive que usar
  8. // o cURL para receber a imagem. Este código eu peguei do wiki deles. Dá uma olhada:
  9. // http://wiki.dreamhost.com/CURL
  10. $source = $_GET['src'];
  11. $ch = curl_init();
  12. $timeout = 0;
  13. curl_setopt($ch, CURLOPT_URL, $source);
  14. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  16. curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
  17. $image = curl_exec($ch);
  18.  
  19. // Depois eu transformo esta imagem num objeto que o php vai poder manipular
  20. $img = imagecreatefromstring($image);
  21.  
  22. // Como eu não podia usar o getimagesize (por causa de restrições de segurança do Dreamhost)
  23. // eu utilizei estas funções para pegar as dimensões da imagem
  24. $width = imagesx($img);
  25. $height = imagesy($img);
  26.  
  27. // O lugar de onde eu estava pegando as imagens podia me direcionar para outra imagem caso aquela não
  28. // fosse mais encontrada no servidor, de forma que o script retornava uma imagem invalida. Para evitar
  29. // este tipo de coisa, eu checo se os valores das dimensões estão setados, e caso não estejam, eu pego uma
  30. // imagem local (no caso a "img+nd.jpg") e a utilizo no lugar da que seria carregada inicialmente
  31. if($width == false || $height == false) {
  32.         $ext = "jpg";
  33.         imagedestroy($img);
  34.         $img = imagecreatefromjpeg("img_nd.jpg");
  35.         list($width, $height) = getimagesize("img_nd.jpg");
  36. }
  37.  
  38. // Aqui eu carrego alguns valores de acordo com o tipo da imagem. $toshow é a função que eu irei utilizar para mostrar
  39. // a imagem, e $mime é o mime type da imagem
  40. switch($ext) {
  41.         case "jpg":
  42.                 $toshow = "imagejpeg";
  43.                 $mime = "image/jpeg";
  44.                 break;
  45.         case "gif":
  46.                 $toshow = "imagegif";
  47.                 $mime = "image/gif";
  48.                 break;
  49.         case "png":
  50.                 $toshow = "imagepng";
  51.                 $mime = "image/png";
  52.                 break;
  53. }
  54.  
  55. // Defino o cabeçalho do documento dizendo que esta é a imagem tipo tal...
  56. header("Content-type: ".$mime);
  57.  
  58. // Se a largura da minha imagem for maior do que a largura que eu especifiquei na chamada do arquivo, eu redimensiono
  59. // esta imagem
  60. if(isset($_GET['w']) && $width > $_GET['w']) {
  61.         $newwidth = $_GET['w'];
  62.         $newheight = ($height / $width) * $newwidth;
  63.         $tmp = imagecreate($newwidth,$newheight); // crio uma imagem vazia com as novas dimensões
  64.         imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // copio a imagem original para a imagem http://wiki.dreamhost.com/CURL
  65.         eval($toshow."(\$tmp);"); // utilizo eval para executar a função para mostrar a imagem de acordo com o que foi estabelecido no switch acima
  66.         imagedestroy($tmp); // destruo e libero memória da imagem que acabou de ser criada
  67. } else {
  68.         // Caso contrário, eu simplesmente mostro a imagem
  69.         eval($toshow."(\$img);");
  70. }
  71.  
  72. imagedestroy($img); //destruo e libero memória da imagem que foi utilizada
  73.  
  74. die(); // FIM!