如何使用PHP或.htaccess从其他站点获取图像?

时间:2012-10-15 17:34:45

标签: php .htaccess imagemagick gd gravatar

好的,这就是我要做的事。

在我的网站上,我有一组我上传的图片用作我的头像。这些网站通常要求不同的大小,并且非常挑剔他们接受的URL。

我要做的是从Gravatar服务器获取一个Gravatar图像,并使用自定义的URL,即时或缓存来提供它。

我的图片的Gravatar网址100x100px:

http://gravatar.com/avatar/b6e428090e62182266a4e9dd87297ee1.png?s=100

我想要或多或少地为网站提供的内容:

http://alenonimo.com.br/avatar/avatar100.png

现在让我解释一下我在这里要解决的问题,因为它很有趣。

某些网站接受头像图片的第三方网址,例如phpBB等。它们也有不同的尺寸,如100x100像素,120x120像素,200x200像素等。但是,如果它带有URL上的“s”变量,它们拒绝接受Gravatar URL,它定义了所服务图像的大小来自Gravatar。如果没有选项,默认大小始终为80x80像素。

所以我想为这些网站提供Gravatar图像并在URL上定义大小,这是因为它没有注意到来自Gravatar的图像生成器。我希望这些网站认为图像实际上来自我的网站。它允许我设置那些不接受Gravatar的网站的大小,幸运的是,我可以通过去Gravatar一次性更改所有这些网站上的所有头像图像。

我很确定可以使用Apache的RewriteEngine完成,但我缺乏代码功能。我在网上找到的所有示例都将重定向内容从同一站点重定向到同一站点上的其他位置,但实际情况并非如此。我还想确保size属性是一个或多或少有效的数字,而不是接受任何东西。因此,名为“100.png”的文件可以,但“banana.png”不会。

这本身就很有趣,但它又发生了另一件事。如果网站不接受PNG文件但接受JPG或GIF文件怎么办?可能不会发生在只显示图像的网站上,但如果我也可以向从URL上传的网站提供图像,这对我来说会很有趣。此外,即使Gravatar脱机也可能确保显示某些内容也很有趣,就像缓存系统一样。这可以通过PHP实现,但我不确定它会有多复杂。

有人可以帮我处理RewriteEngine规则吗?或者甚至给我一些关于如何制作这个PHP脚本的指针?这里的其他人会感兴趣吗?

1 个答案:

答案 0 :(得分:2)

在这里,您需要让您的服务器收听扩展名为.png的.php文件,这可以使用.htacces轻松完成

RewriteEngine on
RewriteRule ^avatar/([a-z,A-Z,0-9,-_]+)$ index.php?avatar_param=$1

Php脚本

<?php

if(isset($_GET['avatar_param']))
{
    $avatar_size = filter_var($_GET['avatar_param'],FILTER_SANITIZE_NUMBER_INT);
    $user_email_hash = 'b6e428090e62182266a4e9dd87297ee1';

    $get_gravar_image = 'http://gravatar.com/avatar/'.$user_email_hash.'.png?s='.$avatar_size;
    echo '<img src="'.$get_gravar_image.'" />';
}

  ?>

通过查看您提供的网址结构,我已使用数字作为图片的大小,只需使用上面的代码即可。

尝试使用网址中的大小,您会发现它是动态的并且工作得很好

演示

http://thetutlage.com/demo/avatarProblem/avatar/avatar100.png