Для этого проекта мне нужно создать динамические логотипы для страницы на основе данных из базы данных MySQL. В таблице хранятся индекс изображения, цвет переднего плана и цвет фона.
В целях тестирования я создал небольшое изображение в Photoshop для имитации изображения, и я использую случайные числа для создания цветов переднего плана.
Я хочу создать несколько рандомизированных изображений на странице, но браузер сохраняет ресурс для изображения одинаковым для каждого вызова. Есть ли способ создать несколько случайных изображений на одной странице?
Я попытался заставить его работать с использованием случайных строк запросов и буферизации вывода, но они не дали мне удачи.
Снимок экрана :
http://img.ruphp.com/php/iMP59.png
Структура каталога :
index.php logo.png/ logo.png/circle.png logo.png/index.php
index.php
<html> <body style="background-color: #000000; color: #FFFFFF; font-family: 'Segoe UI'"> <?php for ( $i = 0 ; $i <= 10 ; $i++ ) { echo "<img src='logo.png' />"; } ?> </body> </html>
logo.png / index.php
<?php $im = imagecreatefrompng("circle.png"); $white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF); $black = imagecolorallocate($im, 0x00, 0x00, 0x00); $x = imagecolorexact($im, 0xFF, 0xFF, 0xFF); $y = imagecolorexact($im, 0xCC, 0xCC, 0xCC); $z = imagecolorexact($im, 0xAA, 0xAA, 0xAA); $randx = mt_rand(0, 255); $randy = mt_rand(0, 255); $randz = mt_rand(0, 255); imagecolorset($im, $x, $randx, $randz, $randz); imagecolorset($im, $y, $randy, $randy, $randx); imagecolorset($im, $z, $randz, $randx, $randy); header('Content-Type: image/png'); imagepng($im); ?>
Скорее всего, ваш образ кэшируется браузером, поэтому выполняется только один запрос и повторяется одно и то же изображение для всех десяти вызовов.
Вам нужно будет сделать каждый URL-адрес другим, используя случайный параметр GET, например, например:
<?php for ( $i = 0 ; $i <= 10 ; $i++ ) { $postfix = mt_rand(0, 10000); echo "<img src='logo.png?random=$postfix' />"; } ?>
обратите внимание, однако, что это делает изображения необработанными: GD будет запускаться заново каждый запрос. Но похоже, что это то поведение, которое вы хотите.