Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Jcrop+jQuery, помогите с PHP кодом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Dezmont
Отправлено: 16 Июля, 2010 - 00:35:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




Здравствуйте господа. Может сможете помочь, а то я уже 2 дня мучаюсь, никак сделать не могу. =(
Решил я подключить Jcrop к своему будущему сайту. Но вылезла куча проблем, которые никак решить не могу.
Значит есть у меня 100500 страниц, на которых по 20 изображений. Кликая на какое-либо изображение мы попадаем на страницу jcrop.php, на которой у меня картинка и превьюшка. Эта страница работает нормально. Вот часть кода:
CODE (text):
скопировать код в буфер обмена
  1. <div id=pictures>
  2.  
  3. <script language="Javascript">
  4.  
  5.                         jQuery(window).load(function(){
  6.  
  7.                                 jQuery('#cropbox').Jcrop({
  8.                                         onChange: showPreview,
  9.                                         onSelect: updateCoords,
  10.                                         minSize: [<? echo "$cut_w, $caut_h"?>],
  11.                                         aspectRatio: 4/3
  12.                                 });
  13.  
  14.                         });
  15.  
  16.                         function showPreview(coords)
  17.                         {
  18.                                 if (parseInt(coords.w) > 0)
  19.                                 {
  20.                                         var rx = 240 / coords.w;
  21.                                         var ry = 180 / coords.h;
  22.  
  23.                                         jQuery('#preview').css({
  24.                                                 width: Math.round(rx * 640) + 'px',
  25.                                                 height: Math.round(ry * 400) + 'px',
  26.                                                 marginLeft: '-' + Math.round(rx * coords.x) + 'px',
  27.                                                 marginTop: '-' + Math.round(ry * coords.y) + 'px'
  28.                                         });
  29.                                 }
  30.                         };
  31.                        
  32.                         function updateCoords(c)
  33.                         {
  34.                                 $('#x').val(c.x);
  35.                                 $('#y').val(c.y);
  36.                                 $('#w').val(c.w);
  37.                                 $('#h').val(c.h);
  38.                         };
  39.  
  40.                         function checkCoords()
  41.                         {
  42.                                 if (parseInt($('#w').val())) return true;
  43.                                 alert('Please select a crop region then press submit.');
  44.                                 return false;
  45.                         };
  46. </script>
  47.  
  48.                 <table width="100%" border="0">
  49.                 <tr>
  50.                 <td width="640px">
  51.                 <img src="<? echo "image.php?nc=1&cat=$cat&image=$image"?>" id="cropbox" >
  52.                 </td>
  53.                 <td valign="top" align="center">
  54.         <div style="background:url(design/now.jpg); padding: 21px 0px 80px 3px; width:280px;" >
  55.                 <div style="width:240px;height:180px;overflow:hidden; border: #333 solid 2px; text-align:center;" >
  56.                         <img src="<? echo "image.php?nc=1&cat=$cat&image=$image"?>" id="preview">
  57.                 </div>
  58.         </div>
  59.         </td>
  60.                 </tr>
  61.                 </table>
  62.                 <form action="http://localhost/3/saveCrop.php" method="post" >
  63.                 <input type="hidden" id="x" name="x" >
  64.                         <input type="hidden" id="y" name="y" >
  65.                         <input type="hidden" id="w" name="w" >
  66.                         <input type="hidden" id="h" name="h" >
  67.                         <input type="hidden" id="<? echo "$cat"?>" name="cat" >
  68.                         <input type="hidden" id="<? echo "$image"?>" name="image" >
  69.                         <input type="submit" value="Crop Image" >
  70.                 </form>
  71.  
  72. </div>
  73.  

В Хэад я подключил всё что нужно. Скрипт работает нормально, и с ним я вроде разобрался.
Вторым этапом нужно сделать ПХП файл, на который будет отсылать форма, который, в свою очередь, будет генерировать изображение. Тут то и начались проблемы (в общем то проблемы у меня постоянно, т.к. пока я мало знаю, но эту я никак не смог решить). Этот файл я взял опять же с сайта Jcrop и пытался подогнать под себя.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  4. {
  5.         $jpeg_quality = 90;
  6.  
  7.         $src = "files/abstraction/21.jpg";
  8.         Header("Content-type: image/jpeg");
  9.         $img_r = imagecreatefromjpeg($src);
  10.         $dst_r = ImageCreateTrueColor( $_POST['w'], $_POST['h'] );
  11.  
  12.         imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
  13.         $targ_w,$_POST['h'],$_POST['w'],$_POST['h']);
  14.  
  15.         header('Content-type: image/jpeg');
  16.         imagejpeg($dst_r,null,$jpeg_quality);
  17.  
  18.         exit;
  19. };
  20.  
  21. ?>

Зачем используется f ($_SERVER['REQUEST_METHOD'] == 'POST') я не знаю, т.к. работает и без этого, но, вероятно, так правильно. Решил всё таки оставить.
Суть проблемы.
Есть 20 изображений на левой странице. Кликаем по любому из них. Открывается страница с моим HTML кодом, на которую, методом $_GET, я отправляю переменные: $cat (это папка с изображениями) и $image (непосредственно само изображение). Всё хорошо и всё работает. Далее форма, которая отправляет ПХП скрипту координаты X и Y, ширину и высоту W и H, для выделенной области.
И ещё мне нужно отправить значения переменных $cat и $image моему скрипту, чтобы он автоматически прописывал путь в $src=files/$cat/$image.
И при таком ПХП файле у меня генерируется PHP картинка, которую невозможно скачать (качается ПХП файл). Нужно как то сделать так, чтобы создавалась обыкновенная картинка, которая нигде не сохраняется, но которую пользователь может спокойно скачать себе.
Вот, никак не могу это сделать. Помогите пожалуйста.

P.S. Сайт этого плагина Jcrop.


Отредактировано модератором: JustUserR, 16 Июля, 2010 - 00:54:23
Убрал ошибочный BB-тег
 
 Top
JustUserR
Отправлено: 16 Июля, 2010 - 01:00:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Dezmont пишет:
И при таком ПХП файле у меня генерируется PHP картинка, которую невозможно скачать (качается ПХП файл
То есть ваше клиентское web-приложение которое организует просмотр изображений в их уменьшенном и натуральном размере работает следующим образом - сначала оно получает список определенных идентификаторов изображений для показа и на их основе гененирует для каждой картинки GET-запрос к удаленному PHP-скрипту - который должен выдать соответствующий HTTP-заголовок и двоичные данные уменьшенного представления картинки При этом заместо генерации превью изображения происходит попытка сохранить предложенный файл - такая ситуация возникает в том случае если пересылаемый с данными MIME-тип невозможен для показа в браузере - это может быть вызвано ошибкой со стороны web-сервера когда требуемый PHP-скрипт не был вызван как CGI-приложений по причине отсуствия или неправильноно переопределения требуемых директив Но причиной возникновения проблемы может быть изначально неправильно сгенерированный URL-путь - например отсутствие требуемого urlencode-ирования данные или неправильная кодировка данных
Для огранизации скачивания самой картинки можно сделать спецальный iframe-элемент в котором будет запрашиваться PHP-скрипт предлагающих сохранить картинку - это делается за счет использования HTTP-заголовка Content-disposition или же установкой MIME-типа который заведомо не будет распознан браузером но в таком случае придется дополнительно прописывать желаемое имя сохраняемого файла в реальном web-пути за счет alias-инга
Для диагностики вашего клиентского приложения можете использовать например Средства разработчика в IE - включив отладку JS-скрипты вы можете получить генеририемые URL-пути и обратиться к ним напрямую через telnet и выяснить причины некорректной работы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Dezmont
Отправлено: 16 Июля, 2010 - 01:31:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010  


Помог: 1 раз(а)




JustUserR пишет:
То есть ваше клиентское web-приложение которое организует просмотр изображений в их уменьшенном и натуральном размере работает следующим образом - сначала оно получает список определенных идентификаторов изображений для показа и на их основе гененирует для каждой картинки GET-запрос к удаленному PHP-скрипту - который должен выдать соответствующий HTTP-заголовок и двоичные данные уменьшенного представления картинки При этом заместо генерации превью изображения происходит попытка сохранить предложенный файл - такая ситуация возникает в том случае если пересылаемый с данными MIME-тип невозможен для показа в браузере - это может быть вызвано ошибкой со стороны web-сервера когда требуемый PHP-скрипт не был вызван как CGI-приложений по причине отсуствия или неправильноно переопределения требуемых директив Но причиной возникновения проблемы может быть изначально неправильно сгенерированный URL-путь - например отсутствие требуемого urlencode-ирования данные или неправильная кодировка данных
Для огранизации скачивания самой картинки можно сделать спецальный iframe-элемент в котором будет запрашиваться PHP-скрипт предлагающих сохранить картинку - это делается за счет использования HTTP-заголовка Content-disposition или же установкой MIME-типа который заведомо не будет распознан браузером но в таком случае придется дополнительно прописывать желаемое имя сохраняемого файла в реальном web-пути за счет alias-инга
Для диагностики вашего клиентского приложения можете использовать например Средства разработчика в IE - включив отладку JS-скрипты вы можете получить генеририемые URL-пути и обратиться к ним напрямую через telnet и выяснить причины некорректной работы


Мозг взорван. Я конечно отчасти понял, прочитав 3 раза, но конкретного ответа на свой вопрос не нашёл. Предположим это путь в браузере: http://localhost/3/saveCrop.php. Видимым итогом этого скрипта является картинка, но картинку эту нельзя сохранить как картинку, нажав ПКМ. Так вот я и хотел узнать, что нужно дописать в коде, чтобы появилась такая возможность. Я уверен, что это можно реализовать, потому что видел, но сам не знаю как.
 
 Top
Реф
Отправлено: 16 Июля, 2010 - 01:48:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010  
Откуда: Реутов, Россия


Помог: 0 раз(а)




Dezmont пишет:
Зачем используется f ($_SERVER['REQUEST_METHOD'] == 'POST') я не знаю, т.к. работает и без этого, но, вероятно, так правильно. Решил всё таки оставить.

Это условие проверяет, что используем метод запроса POST. К слову, есть масса вещей без которых сайт может работать и без которых он станет находкой для злоумышленников.

Над основным вопросом ещё подумаю.


-----
Думать надо головой, а не головкой!
 
 Top
JustUserR
Отправлено: 16 Июля, 2010 - 02:00:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Dezmont пишет:
Предположим это путь в браузере: http://localhost/3/saveCrop.php. Видимым итогом этого скрипта является картинка, но картинку эту нельзя сохранить как картинку, нажав ПКМ
Если при запросе вашего PHP-скрипа в отдельном окне браузера генерируется реальная конечная картинка а не содержащий ее HTML-документ - то есть HTTP-ответ содержит соответствующий MIME-тип изображения и ее двоичные данные в 7bit-формае - то в таком случае проблема с сохранение картинки путем ПКМ является исключительно багом в вашем браузере - поскольку на такой одиночный объект картинки никакие клиентские JS-скрипты не действуют и не могут оказывать влияние на возможность ее сохранения
Следует удостовериться также что используемая HTML-страница с картинкой каждый раз при ее запросе реально генерируется PHP-скриптом и загружается с web-сервера - а не используется из кеша поскольку в таком случае даже если клиентский JS-скрипт был модифицирован и проблема была устранена но эффект не будет заметен - также нужно проверять не только контейнерную HTML-страницу но и все используемые ей зависимости и подключаемые элементы на предмет кеширования


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB