随机图像的URL

时间:2013-03-01 05:20:49

标签: css url image

我想制作一些我在网络开发中没有看过的东西,但似乎有可能。 我想要一个可以放入任意HTML <IMG/>标记或CSS background-image属性的网址,当访问该网址时, 是一个随机图片。我不希望页面指向或重定向到随机图像,我不希望它显示或嵌入随机图像,因为这些东西不适用于上述要求。我已经看到了使用Javascript交换属性或隐藏元素在网页中显示随机图像的解决方案,但这必须使整个页面成为图像,没有先前或后续的二进制或ASCII数据。我希望那些对编程一无所知的人可以使用它。我的目标是这样的:

http://example.com/randomImage/

理论上,每次在CSS或HTML中使用此URL加载页面时,随机图像将显示在引用的元素中。它应该有效,以便如果您有多个<IMG/>元素或多个元素及background-image引用此页面,则它们都应显示随机不同的图像。

我的第一个想法是使用PHP(在下面描述的结构中)查看特定目录,随机选择图像文件,并回显其二进制数据。 如果可以,那我该怎么做呢?如果没有,那么有没有人有任何其他想法?

我的主要想法是伪代码:

<?PHP
$chosenImage = getRandomFileFrom("./rand/");
$bytes = readFileAsBinary($chosenImage);
foreach($bytes as $byte){
    echo $byte;
}
?>

我不关心真或伪随机。它可以每次循环我所关心的一切;我在这项工作中需要的是,多个图像可以作为单个URL引用

2 个答案:

答案 0 :(得分:1)

你当然可以用PHP做到这一点。

首先,选择一个随机文件(参见Select random file from directory

function random_pic($dir = 'imagedir') {
    $files = glob($dir . '/*.jpg');
    if (!$files) return false;

    $file = array_rand($files);
    return $files[$file];
}

然后您可以使用PHP readfile函数将其发送给用户。您可以在此处阅读:http://www.php.net/readfile请参阅示例1,我在下面稍作修改:

function outputImage( $filename ) {
    header('Content-Description: File Transfer');
    header("Content-type: image/jpeg");
    header('Content-Disposition: attachment; filename='.basename($filename ));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename ));
    ob_clean();
    flush();
    readfile($filename );
    exit;
}

然后将它们全部拉到一起:

// Get a filename
$filename = random_pic();

// Check that a file was found
if (!$filename) {
    header('HTTP/1.0 404 Not Found');
    die();
}

// Output the image
outputImage( $filename );

您还可以更改$files = glob($dir . '/*.jpg');以查找不同的图片格式,但您还必须更改outputImage以检测格式并将Content-type类型标头设置为{{1 }}或image/jpeg等...

如果您只提供一种类型的图像,您可以随时设置Apache来处理对'scriptImage.jpg'的请求到PHP脚本,然后客户端浏览器绝对不会更聪明。有关详细信息,请查看How to redirect all requests to a file, except images using Apache?(尽管您当然会反其道而行之)同时查看Apache重写规则:http://httpd.apache.org/docs/current/rewrite/flags.html

我没有测试过这段代码,但它应该没有太多努力。希望有所帮助!

答案 1 :(得分:1)

你在运行Apache吗?有一个RandomLocation Apache模块可以处理这种事情。 Their docs describe almost the exact thing you're trying to do.