2014-11-23 4 views
0

Я делаю это как учебное упражнение, и я все еще новичок в PHP. Я знаю еще меньше о javascript:Обновить изображение без перезагрузки страницы?

Сценарий, который я пишу, должен позволять пользователю загружать изображение со своего жесткого диска, разрешать пользователю изменять его с помощью некоторых элементов управления на странице, а затем отображать измененные образ.

В настоящее время я использую PHP только для этого, и для этого требуется, чтобы пользователь установил параметры элементов управления, а затем POST (требуя полной перезагрузки страницы). Может ли кто-нибудь указать мне в сторону лучшего способа сделать это? Есть ли что-нибудь подобное, чтобы я мог взглянуть?

Было бы здорово, если бы я мог в конечном итоге обновить изображение в режиме реального времени, когда пользователь сместил элемент управления. Я ищу javascript? AJAX?

Вот базовая версия моего кода:

<?php session_start(); ?> 
<html> 
    <head> 
     <script> 
      <?php 
       if(isset($_POST['upload_submit'])) { // PROCESS UPLOAD FORM////////////////////////////////////////////////////// 
        $tmp_file = $_FILES['file_upload']['tmp_name']; 
        $filename = basename($_FILES['file_upload']['name']); 
        $_SESSION['file_name'] = $filename; // load filename into SESSION so that it survives page reloads from POST 
        move_uploaded_file($tmp_file, $filename); 
       } 

       if(isset($_POST['process_submit'])){ // PROCESS CONTROL FORM////////////////////////////////////////////////////// 
        $im = imagecreatefromjpeg($_SESSION['file_name']); 
        imagefilter($im, IMG_FILTER_COLORIZE, $_POST['colred'], $_POST['colgreen'], $_POST['colblue'], $_POST['colalpha']); 
        imagejpeg($im, "newimage.jpg"); //output to file 
        imagedestroy($im); // free memory 
        $_SESSION['Modified'] = TRUE; // flag that the image has been modified so that the page will display newimage.jpg instead of original 
       } 
      ?> 
     </script> 
    </head> 
    <body> 
     <?php 
      if(isset($_SESSION['Modified'])){ // Image has been modified at least once (display modified image. do not display upload form) 
       echo("<img src='newimage.jpg' width='400px'><br />"); 
      }elseif(isset($_FILES['file_upload']['name'])) { // Image has been uploaded but not yet modified (do not display upload form) 
       echo("<img src=$filename . ' 'width=400px'><br />"); 
      } else { // FIRST State that the form is in when the page is loaded. (No image uploaded so display upload form) 
       echo("<form action='index.php' enctype='multipart/form-data' method='POST'> 
        <input type='file' name='file_upload' /> 
        <input type='submit' name='upload_submit' value='Upload' /> 
       </form>"); 
      } 

      echo("<form action='index.php' method='post'><br />"); // display form with 4 slider controls (Red, Green, Blue, Alpha) and a submit button 
       echo("<table>"); 
        echo (isset($_POST['colred'])) ? "<tr><td>Red:</td><td> 0<input type='range' name='colred' min='0' max='255' value=" . $_POST['colred'] . ">255</td></tr>" 
         :"<tr><td>Red:</td><td> 0<input type='range' name='colred' min='0' max='255'>255</td></tr>"; 
        echo (isset($_POST['colgreen'])) ? "<tr><td>Green:</td><td> 0<input type='range' name='colgreen' min='0' max='255' value=" . $_POST['colgreen'] . ">255</td></tr>" 
         : "<tr><td>Green:</td><td> 0<input type='range' name='colgreen' min='0' max='255'>255</td></tr>"; 
        echo (isset($_POST['colblue'])) ? "<tr><td>Blue:</td><td> 0<input type='range' name='colblue' min='0' max='255' value=" . $_POST['colblue'] . ">255</td></tr>" 
         : "<tr><td>Blue:</td><td> 0<input type='range' name='colblue' min='0' max='255'>255</td></tr>"; 
        echo (isset($_POST['colalpha'])) ? "<tr><td>Alpha:</td><td> 0<input type='range' name='colalpha' min='0' max='255' value=" . $_POST['colalpha'] . ">127</td></tr>" 
         : "<tr><td>Alpha:</td><td> 0<input type='range' name='colalpha' min='0' max='255' value='127'>255</td></tr>"; 
       echo("</table>"); 
       echo("<button name='process_submit'>Process</button>"); 
      echo("</form>"); 
     ?> 
    </body> 
</html> 
+0

Попробуйте загрузить изображение с помощью javascript. Вы даже можете сделать предварительную загрузку! – www139

+0

PHP будет работать только один раз, прежде чем страница загрузится в браузере. после этого все, что вы можете сделать с php, - это запросить новую страницу (или, возможно, запросить страницу с ajax). в любом случае вы хотите использовать javascript для обработки страниц in situ. – Octopus

ответ

0

Возможно, вы можете делать все, что хотите, без всех элементов управления формой PHP. HTML5 добавил

<canvas></canvas> 

элемент, который вы можете поместить изображения в и манипулировать данными изображения непосредственно с помощью JavaScript. Затем вы можете отправить эти данные в фоновом режиме в PHP, чтобы сохранить изображение для хранения или загрузки или что-то еще.

См. http://www.html5rocks.com/en/tutorials/canvas/imagefilters/ для получения некоторых примеров фильтров изображений, написанных на javascript. Вы также можете легко обрезать, повернуть, масштабировать и т.д., используя javascript и холст.

http://jsfiddle.net/av01d/FT7a9/

+0

вам не нужен объект холста. вы можете просто выполнить javascript на теге img. – Octopus

+0

Только для некоторых основных вещей. Холст дает вам гораздо большую мощность манипуляции с пикселями. Вот почему он был создан. WIth canvas вы можете рисовать на изображении так же, как и его фотошоп, который вы не можете сделать с тегом img. – user2782001

+0

Спасибо, user2782001! Я тоже посмотрю на холст. Этот учебник делает очень классный материал. Мой проект исходит от профессора, который поручил мне разработать класс манипуляции с файлами php. Его цель - заставить меня изучать php, поскольку это то, что они используют в своих проектах. Я застрял на стороне сервера обработки изображений, но думаю, что обработка обновлений на странице на стороне клиента - честная игра. Canvas для меня новый: я обязательно проверю это позже. (Я хотел поддержать ваш комментарий, но мне не хватает репутации ...) – user3687308

0

Image перезарядка не так уж сложна по сравнению с процессом загрузки. Забывая загрузку, вы можете использовать javascript для редактирования атрибута 'src' элемента, чтобы перезагрузить изображение. like: document.getElementsByTagName ("Image1") [0] .setAttribute ("src", "http://media-cache-ak0.pinimg.com/736x/63/50/59/635059d03e7f3a00219571c767b89c38.jpg");

+0

Спасибо за помощь. Можно ли это сделать в режиме реального времени? Может быть, это вызвало событие «onchange» с одного из ползунков? – user3687308

Смежные вопросы