Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ezequielg

Gerar Thumb de imagem externa

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

é 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 TMP

grave 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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.