ezequielg 1 Denunciar post Postado Junho 27, 2008 Bom dia galera! Estou tentando pegar a imagem de um outro site e gerar uma miniatura dela no meu site, mas não to dando jeito. Tentei da seguinte forma. ============================================================================== FUNÇÃO QUE GERA O THUMB ( nome do arquivo thumb2.php ) ============================================================================== <? # Pegando os valores passados pela URL $image_file = $_SERVER['QUERY_STRING']; $variaveis = explode('&',"$image_file"); $w = $variaveis[1]; $h = $variaveis[2]; $quality = $variaveis[3]; $url = $variaveis[4]; $img = $url; define('MAX_WIDTH', $w); define('MAX_HEIGHT', $h); $image_path = $img; $img = null; $extensao = strtolower(end(explode('.',$image_path))); if ($extensao == 'jpg' || $extensao == 'jpeg') { $img = imagecreatefromjpeg($image_path); } else if ($extensao == 'png') { $img = imagecreatefrompng($image_path); } elseif ($extensao == 'gif') { $img = imagecreatefromgif($image_path); } if ($img) { $width = imagesx($img); $height = imagesy($img); $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height); if ($scale < 1) { $new_width = floor($scale * $width); $new_height = floor($scale * $height); $tmp_img = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagedestroy($img); $img = $tmp_img; } } if (!$img) { $img = imagecreatetruecolor(MAX_WIDTH, MAX_HEIGHT); imagecolorallocate($img, 204, 204, 204); $c = imagecolorallocate($img, 153, 153, 153); $c1 = imagecolorallocate($img, 0, 0, 0); imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c); imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c); imagestring($img, 2, 12, 55, 'erro ao carregar imagem', $c1); } header('Content-type: image/jpeg'); imagejpeg($img,"",$quality); ?> ============================================================================== ============================================================================== GERANDO O THUMB DA IMAGEM EXTERNA ( nome do arquivo exibir.php ) ============================================================================== <? # Endereco da imagem $endereco = "http://www.gracher.com.br/cinema/img/foto_cadeiras.jpg"; # Configuracao da imagem $w = 100; # largura $h = 100; # altura $q = 85; # qualidade # Gera Thumb $foto_destaque = "thumb2.php?&$w&$h&$q&$endereco"; $foto_destaque = "<img src='$foto_destaque' border='0' />"; echo $foto_destaque; ?> ============================================================================== Se alguém tiver uma idéia de como fazer. Importante lembrar que a imagem é extena,ou seja, não está no meu server e sim em outro domínio. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 27, 2008 você deve carregar o conteudo da imagem senão as funções GD nao reconhecerão o formato de dados. use as funções read() fopen() ou file() para ler o conteudo da imagem original Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 27, 2008 exemplo <?php $src = 'http://forum.imasters.com.br/style_images/10/logo5.gif'; $rs = getimagesize( $src ); header( 'Content-type: ' . $rs['mime'] ); echo join( '', file( $src ) ); ?> Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 Tentei fazer da forma abaixo mais não funcionou. ============================================================================== GERANDO O THUMB DA IMAGEM EXTERNA ( nome do arquivo exibir.php ) ============================================================================== <? # Endereco da imagem $endereco = "http://www.gracher.com.br/cinema/img/foto_cadeiras.jpg"; $rs = getimagesize( $endereco ); header( 'Content-type: ' . $rs['mime'] ); # Configuracao da imagem $w = 100; # largura $h = 100; # altura $q = 85; # qualidade # Gera Thumb $foto_destaque = "thumb2.php?&$w&$h&$q&".file($endereco); $foto_destaque = "<img src='$foto_destaque' border='0' />"; echo $foto_destaque; ?> ============================================================================== RECEBO OS ERROS Warning: getimagesize() [function.getimagesize]: URL file-access is disabled in the server configuration in Warning: getimagesize(http://www.gracher.com.br/cinema/img/foto_cadeiras.jpg) [function.getimagesize]: failed to open stream: no suitable wrapper could be found in Warning: file() [function.file]: URL file-access is disabled in the server configuration in Warning: file(http://www.gracher.com.br/cinema/img/foto_cadeiras.jpg) [function.file]: failed to open stream: no suitable wrapper could be found in Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 29, 2008 Você está sem acesso, recomendo fazer uma imagem temporaria, o que o Hinom quiz dizer não é dessa maneira que você fez. Seria assim: <?php $url = "http://www.site.com/file.jpg"; $handle = fopen ($url, "r"); $buffer = ""; while (!feof ($handle)) { $buffer .= fgets($handle, 4096); } fclose ($handle); $o = fopen("tmp.tmp","w"); fwrite($o,$buffer); fclose($o); ?>ae depois é só ler a imagem "tmp.tmp", a maneira que você está usando está sem acesso. Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 Silverfox, fix exatamente o que você disse, mas deu erro assim mesmo. <?php $url = "http://www.gracher.com.br/cinema/img/foto_cadeiras.jpg"; $handle = fopen($url, "r"); $buffer = ""; while (!feof ($handle)) { $buffer .= fgets($handle, 4096); } fclose ($handle); $o = fopen("tmp.tmp","w"); fwrite($o,$buffer); fclose($o); # Endereco da imagem # Configuracao da imagem $w = 100; # largura $h = 100; # altura $q = 85; # qualidade # Gera Thumb $foto_destaque = "thumb2.php?&$w&$h&$q&tmp.tmp"; $foto_destaque = "<img src='$foto_destaque' border='0' />"; echo $foto_destaque; ?> Será que o bloqueio não é do server de onde estou puxando a imagem? O Erro que deu foi este Warning: fopen() [function.fopen]: URL file-access is disabled in the server configuration in Warning: fopen(http://www.gracher.com.br/cinema/img/foto_cadeiras.jpg) [function.fopen]: failed to open stream: no suitable wrapper could be found in Warning: feof(): supplied argument is not a valid stream resource in Warning: fgets(): supplied argument is not a valid stream resource in Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 29, 2008 Acredito que o servidor que você esteja tentando pegar a imagem seja bloqueado. Tente pegar essa imagem: http://forum.imasters.com.br/style_images/10/logo5.gif e veja se dá "acesso negado" tambem. Pode ser tanto no seu servidor quanto no que esta a foto o bloqueio. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 29, 2008 vou dar uma maozinha, mas não se acostume... nesse techo do seu script <? # Pegando os valores passados pela URL $image_file = $_SERVER['QUERY_STRING']; $variaveis = explode('&',"$image_file"); $w = $variaveis[1]; $h = $variaveis[2]; $quality = $variaveis[3]; $url = $variaveis[4]; $img = $url; define('MAX_WIDTH', $w); define('MAX_HEIGHT', $h); $image_path = $img; $img = null; $extensao = strtolower(end(explode('.',$image_path))); if ($extensao == 'jpg' || $extensao == 'jpeg') { $img = imagecreatefromjpeg($image_path); } else if ($extensao == 'png') { $img = imagecreatefrompng($image_path); } elseif ($extensao == 'gif') { $img = imagecreatefromgif($image_path); } faça assim <? # Pegando os valores passados pela URL $image_file = $_SERVER['QUERY_STRING']; $variaveis = explode('&',"$image_file"); $src = $variaveis[4]; // obtem o caminho da imagem $src = join( '', file( $src ) ); // obtem o conteudo da imagem $rs = getimagesize( $src ); // extrai dados do cabeçalho da imagem $w = $variaveis1[0]; // largura $h = $variaveis2[1]; // altura $quality = $variaveis[3]; define('MAX_WIDTH', $w); define('MAX_HEIGHT', $h); $extensao = strtolower( $rs['mime'] ); if( strpos( $extensao, 'gif' ) ){ $img = imagecreatefromgif($src); }else{ if( strpos( $extensao, 'png' ) ){ $img = imagecreatefrompng($src); }else{ $img = imagecreatefromjpeg($src); } } Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 A restrição era no meu server. Acrescentei ini_set("allow_url_fopen", 1); e não deu mais o erro. Só um detalhe agora, não está gerando o thunbnail. Uso a função abaixo para gerar o Thumb ============================================================================== FUNÇÃO QUE GERA O THUMB ============================================================================== <? # Pegando os valores passados pela URL $image_file = $_SERVER['QUERY_STRING']; $variaveis = explode('&',"$image_file"); $w = $variaveis[1]; $h = $variaveis[2]; $quality = $variaveis[3]; $url = $variaveis[4]; $img = $url; define('MAX_WIDTH', $w); define('MAX_HEIGHT', $h); $image_path = $img; $img = null; $extensao = strtolower(end(explode('.',$image_path))); if ($extensao == 'jpg' || $extensao == 'jpeg') { $img = imagecreatefromjpeg($image_path); } else if ($extensao == 'png') { $img = imagecreatefrompng($image_path); } elseif ($extensao == 'gif') { $img = imagecreatefromgif($image_path); } if ($img) { $width = imagesx($img); $height = imagesy($img); $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height); if ($scale < 1) { $new_width = floor($scale * $width); $new_height = floor($scale * $height); $tmp_img = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagedestroy($img); $img = $tmp_img; } } if (!$img) { $img = imagecreatetruecolor(MAX_WIDTH, MAX_HEIGHT); imagecolorallocate($img, 204, 204, 204); $c = imagecolorallocate($img, 153, 153, 153); $c1 = imagecolorallocate($img, 0, 0, 0); imageline($img, 0, 0, MAX_WIDTH, MAX_HEIGHT, $c); imageline($img, MAX_WIDTH, 0, 0, MAX_HEIGHT, $c); imagestring($img, 2, 12, 55, 'erro ao carregar imagem', $c1); } header('Content-type: image/jpeg'); imagejpeg($img,"",$quality); ?> EXIBINDO A IMAGEM $foto_destaque = "thumb.php?&$w&$h&$q&tmp.tmp"; $foto_destaque = "<img src='$foto_destaque' border='0' />"; echo $foto_destaque; Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 29, 2008 poderia verificar se a página retorna algum erro? Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 Não dá erro algum, apenas fica um quadrado preto com um "X" no meio Mandei uma imagem qualquer pelo FTP para ver se era algum erro do arquivo que gera o thumb, porém a imagem foi exibida e redimensionada sem erros. Somente esta imagem tmp.tmp não é exibida. Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 29, 2008 mas ae você colocou dentro de uma HTML tipo isso: <img src="thumb.php">se você abrir diretamente geralmente ele mostra o erro, digitando na url: http://site.com/thumb.php Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 Tentei direto mas também nao deu erro. radiocidadeam.com.br/web/thumb.php?&100&100&85&tmp.tmp Já o outro arquivo abre normalmente radiocidadeam.com.br/web/thumb.php?&100&100&85&vetsalute.jpg Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 Fiz a alteração que você falou hinom, mas o meu arquivo de thumb não funcionou mais, estou tentando ver o porque. Valeu pela dica, só preciso adaptar ao meu código. Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 29, 2008 é por que esse já deve existir: radiocidadeam.com.br/web/thumb.php?&100&100&85&vetsalute.jpg ao inves de gravar com a extenção TMPgrave assim: <?php $url = "http://www.site.com/file.jpg"; $extensao = strtolower(end(explode('.',$url))); $handle = fopen ($url, "r"); $buffer = ""; while (!feof ($handle)) { $buffer .= fgets($handle, 4096); } fclose ($handle); $o = fopen("tmp.".$extensao,"w"); fwrite($o,$buffer); fclose($o); ?>trocando o pela extenção certa agora ^^ Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Junho 29, 2008 Muito Obrigado silverfox! Agora funcionou. Abraços e Obrigado novamente. Compartilhar este post Link para o post Compartilhar em outros sites