скрипт поворота изображений

#php #javascript #html #onclick

#php #javascript #HTML #onclick

Вопрос:

Итак, у меня есть этот скрипт, который будет поворачивать изображения, расположенные в каталоге, который отлично работает. Однако для поворота изображения требуется обновление страницы. Есть ли способ, которым я могу изменить это, чтобы оно поворачивало изображение при нажатии на само изображение? Заранее спасибо

HTML:

 <img src="rotate.php" alt="random image" />
  

PHP:

 <?php
    $folder = 'images/';

    $exts = 'jpg jpeg png gif';

    $files = array(); $i = -1;
    if ('' == $folder) $folder = './';

    $handle = opendir($folder);
    $exts = explode(' ', $exts);
    while (false !== ($file = readdir($handle))) {
        foreach($exts as $ext) {
            if (preg_match('/.'.$ext.'$/i', $file, $test)) {
                $files[] = $file;
                  $i;
            }
        }
    }
    closedir($handle);
    mt_srand((double)microtime()*1000000);
    $rand = mt_rand(0, $i);

    header('Location: '.$folder.$files[$rand]);
?>
  

Комментарии:

1. Возможно, используйте JavaScript, поскольку это проблема на стороне клиента.

2. Значит, PHP работает нормально? Просто ищете решение для браузера?

3. @Matt Все, что я опубликовал, отлично работает. Я просто искал способ превратить отображение изображения в функцию onclick, чтобы она могла извлекать другое изображение из rotate.php при нажатии.

Ответ №1:

Обновление: это очень простой способ, но протестируйте его и посмотрите, работает ли он;

  <script>
  function changeImage(o){
   o.src = 'http://www.domain.com/testtest.php?'   (new Date()).getTime(); // time to help stop caching
    }
 </script>
 <img src="http://www.domain.com/testtest.php" onclick="changeImage(this)" />
  

и в вашем php добавьте заголовок содержимого для отправки изображения, например, если это gif или png…

  <?php
// see link at bottom for getting file extention

 switch ($selected_random_file_extention) {
  case "gif":
     header('Content-type: image/gif');
     $file_ext = "gif"; break;
   case "jpg":
     header('Content-type: image/jpg')
     $file_ext = "jpg"; break;
   case 3:
     header('Content-type: image/png');
     $file_ext = "png"; break;
  }

  //header('Content-type: image/gif'); // send as image 



   //$random_image_name = rand(1,5);

     // you would add $folder.$files[$rand]; and include you script above
     $random_image_name = $folder.$files[$rand]; 



                            // adjust paths as needed
       $img_file = "http://www.domain.com/".$random_image_name.".gif";
                                                               // .$file_ext;


   readfile($img_file);  // not sure how memory will go

    ?>
  

Идея состоит в том, чтобы установить header тип содержимого и читать и записывать файл в выходной буфер с помощью readfile , вооружившись этим, вы могли бы использовать ajax в качестве другого средства запроса изображения и с помощью status легко отображать индикатор загрузки.

Если вам нужно переписать URL-адрес, вы можете изменить расширение .php для src или даже не иметь расширения.

http://php.net/manual/en/function.pathinfo.php

с помощью pathinfo 'extension' вы можете получить расширение, а затем установить соответствующую скорость Content-type

Комментарии:

1. Я видел примеры java, в которых перечислены изображения, однако там более 20 000 изображений. Я мог только представить, насколько медленным это получится.

2. @syllable3, верно, тогда это другой вопрос, являются ли имена изображений в предсказуемой схеме именования, например, пронумерованными?

3. отрицательный. Они никоим образом не предсказуемы. Некоторые включают интервал, некоторые включают цифры и т.д.

4. $syllable3 другим способом может быть использование перезаписи URL-адреса, у вас есть доступ к этому на сервере?

5. Так нужно ли мне добавлять больше заголовков для каждого типа изображения? Пример: ` <?php header(‘Тип содержимого: изображение / gif’); // отправить как заголовок изображения (‘Тип содержимого: изображение / jpg’); заголовок(‘Тип содержимого: изображение/png’); ` …

Ответ №2:

 <script>
function changeSrc(element) {
  var file_names = ["image1.png", "image2.png", "image3.png"]; //etc
  var i = Math.floor(Math.random() * file_names.length);
  element.src = file_names[i];
}
</script>
<img src="image1.png" onclick="changeSrc(this)">
  

Просто объедините ваши $files в строку, заключенную в кавычки через запятую, и вставьте ее в качестве значения для массива file_names выше.

Комментарии:

1. Который работал бы, если бы все изображения были в одном формате именования. В каталоге также более 20 000 изображений, что, как я мог только предположить, значительно замедлит процесс.

2. Можно ли было бы изменить var file_names на каталог, чтобы он просто поворачивал любое изображение в этом каталоге?

3. Казалось бы, это правильная идея. В принципе, измените атрибут src с помощью JavaScript, добавляя случайное число к строке запроса каждый раз, когда нажимается ссылка. Это обновляет изображение и предотвращает кэширование. <img src=»rotate.php?1526321″ alt=»случайное изображение» />

Ответ №3:

Вы могли бы добавить IFRAME, а затем с помощью javascript случайным образом обновить этот фрейм

Комментарии:

1. Как насчет кэширования изображений в браузере?

2. Чтобы улучшить этот ответ, рассмотрите возможность добавления примера фрагмента кода.

Ответ №4:

Вы рассматривали возможность выполнения этого с помощью ajax? Таким образом, вы могли бы запустить PHP, а затем обновить изображение, но не остальную часть страницы.

Комментарии:

1. У меня нет. Не очень знаком с ajax.

2. Ajax на удивление прост, если вы не возражаете против использования фреймворка вроде jQuery. (Документация: api.jquery.com/jQuery.ajax ) Аналогичным вариантом может быть использование JavaScript для обновления html-кода в div, содержащем ваше изображение, путем удаления тега image и добавления нового. (Хотя это может привести к неполному обновлению изображения.)

Ответ №5:

Если вы не хотите переходить на его клиентскую часть, я бы добавил ссылку вокруг вашего тега IMG и разделил ваш PHP-скрипт на два файла.

 <a href="rotate.php"><img src="random.php" alt="random image" /></a>
  

Файл 1 (rotate.php ): Поворачивает изображения

Файл 2 (random.php ): Перенаправляет на случайное изображение

 header('Location: '.$folder.$files[$rand]);
  

Комментарии:

1. Я протестировал это. При первой загрузке страницы изображение прерывается, а при нажатии на него загружается фактическое изображение на сайт. (т.е. testsite.com/whateverimage.jpg ) Таким образом, после этого пользователь не может снова щелкнуть изображение, чтобы перейти к следующему.