2

Web 開発で見たことのないものを作りたいのですが、可能だと思われます。任意の HTMLタグまたは CSSプロパティに挿入できる URL が必要で、アクセスするランダムな画像になります。<IMG/>background-imageページがランダムな画像を指したりリダイレクトしたりしたくありません。また、ランダムな画像を表示したり埋め込んだりしたくありません。これらは上記の要件では機能しないためです。Javascriptを使用してWebページにランダムな画像を表示し、プロパティを交換したり、要素を非表示にしたりするソリューションを見てきましたが、これはページ全体を画像にする必要があり、前後のバイナリまたは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;
}
?>

真または疑似乱数は気にしません。私が気にするたびに、それは循環する可能性があります。この取り組みで必要なのは、複数の画像を 1 つの URL として参照できることだけです。

4

2 に答える 2

1

これは確かに PHP で行うことができます。

最初に、ランダム ファイルを選択します (ディレクトリからランダム ファイルを選択するを参照) 。

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

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

その後、PHPreadfile関数を使用してユーザーに送信できます。ここでそれを読むことができます: 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タイプ ヘッダーをimage/jpegorimage/pngなどに設定するように変更する必要もあります。

1 種類の画像のみを提供する場合、PHP スクリプトへの「randomImage.jpg」への要求を処理するように Apache をいつでもセットアップできます。詳細については、How to redirect all requests to a file, except images using Apache? を確認してください。(もちろん逆のことをしているでしょうが) Apache の書き換えルールもチェックしてください: http://httpd.apache.org/docs/current/rewrite/flags.html

私はこのコードをテストしていませんが、それほど努力しなくても動作するはずです。それが役立つことを願っています!

于 2013-03-01T05:41:34.700 に答える
1

Apache を実行していますか? この種のものを扱う RandomLocation Apache モジュールがあります。彼らのドキュメントは、あなたがやろうとしていることをほぼ正確に説明しています。

于 2013-03-01T05:43:18.657 に答える