| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > напечатать картинку |
| Автор: gcc 21.5.2008, 19:11 | ||||||||
выносит в текстовом формате любые картинки, как исправить?? найти не могу не получаеться!! вот я хочу вывести картинку между своими шаблонами!!
http://search.cpan.org/dist/GD-SecurityImage/lib/GD/SecurityImage.pm все остально работает - получаеться, еще куки не работают и редирект, наверно что-то с cgi модулем? н оя не понял что он хочет еще? подскажите как вывести это изображение? |
| Автор: KSURi 22.5.2008, 01:16 | ||
Вот это по идее должно работать |
| Автор: gcc 22.5.2008, 11:55 |
| спасибо! я еще сделал: 1) открыл картинку в срипте cgi 2) вставил всрипт cgi скрипт как картинку |
| Автор: gcc 22.5.2008, 15:38 | ||||
не работает!
тоест ьмне нужно передать закодированно число и картинку, можите показать правильно как?
это означает любой тип, короче не хочет работаеть! подскажимте полностью пожалуйста! ИЛИ если поставить вот так: <img src="my_image_script.cgi" /> то как сделать проверку вводимого числа? как передать число? или тчо нужно сделать? |
| Автор: nitr 23.5.2008, 00:11 | ||
gcc, проверьте так:
Добавлено через 21 секунду Не зря ведь вы его получаете ;) Добавлено через 2 минуты и 14 секунд Просто обычно это PNG, а не JPG/JPEG |
| Автор: nitr 25.5.2008, 00:18 |
| gcc, закрывайте тему, раз помогло ;) |
| Автор: gcc 25.5.2008, 00:41 |
| сори, я не пробовал еще, я замучался с этой картинкой, что не хочу печатать, поже попробую сделать, но по-моиму пробовал так как вы написали... |
| Автор: nitr 25.5.2008, 04:17 | ||
Если верить документации:
Но у меня с примером выше работает. |
| Автор: KSURi 25.5.2008, 21:31 |
| У меня на апаче 2.х отрабатывало и без binmode вообще. PS: я не понимаю, зачем надо делать binmode на оба потока, вернее, что так делать и не надо вроде; делать надо на тот поток, который по умолчанию не принимает/отображает или некорректно обрабатывает непечатные символы. |
| Автор: gcc 14.6.2008, 05:33 | ||||
| не работает, все что пишу - не хочет работать вод пример, код картинки в середине, кто-то скажет гже ошибка пожалуйста?
если поставить
пишет: Illegal division by zero at add line 286. |
| Автор: Itsys 14.6.2008, 11:59 | ||||
Я не стал сильно копаться в твоем скрипте, но проблема в том, что ты пытаешься вставить содержимое картинки прямо в HTML, он тебе ее и показывает. Так что скрипт работает верно. Для того чтобы вставить в HTML именно картинку, а не ее машинное представление, необходимо указывать так:
gen_pic.pl (например, как написал KSURi - http://forum.vingrad.ru/index.php?showtopic=212545&view=findpost&p=1520467):
|
| Автор: tolkien 14.6.2008, 12:46 |
| Я так понял. Вы генерите на лету html страничку и картинку. При этом код картинке вставляете в html документ. Отправляете заголовок Content-Type: */*; charset=utf-8. Откуда браузер знает как отобразить данный документ? Ему что надо самому догадки строить? Короче отправляйте заголовок text/html. Картинку. Сохраните в файл. И ссылку на нее вставте в документ, в тег <img>. |
| Автор: gcc 16.6.2008, 03:14 | ||||||
nitr, определено:
просто если ставить так
но нужно делать запрос в базу еще, чтобы узнать число которое на картинке (именно так и сделал). тут написано, что можно в cgi вставить?
если можно вставить сразу через cgi скрипт, то покажите 100% работающий если не сложно... |
| Автор: tolkien 16.6.2008, 13:07 |
| Смотри на заголовок в примере "print "Content-type: image/jpeg\n\n";" Отправляется только картинка. Ты где нибудь вобще встречал html документ с внедренными бинарными данными? Если да. То дай ссылку на такой экземпляр. Я тоже на него посмотрю. |
| Автор: GoDleSS 16.6.2008, 14:57 | ||
Кстати допускаю такой вариант, только не в ХТМЛ напрямую, а попробовать генерить с яваскриптом, в переменную типа Image скармливать бинарные данные. Не пробовал, но покопать в этом направлении можно. |
| Автор: tolkien 16.6.2008, 15:05 |
| Плохое направление для раскопок. Javascript просто может быть отключен. Это раз. А во вторых. Данные отправятся не как бинарные, а как текстовые. Знаешь в чем разница? В том что в таком виде картинка будет битой. |
| Автор: GoDleSS 16.6.2008, 15:29 | ||
1. Раскопки можно вести и в тупиковом направлении, для интереса 2. А вот с этим моментом вынужден согласиться, либо сильно изголяться, либо будет нарушение изображения. |
| Автор: yurik_l 16.6.2008, 16:21 | ||
А что у Image есть такие свойства или методы? |
| Автор: gcc 16.6.2008, 16:49 | ||
подсказали так:
|
| Автор: ginnie 16.6.2008, 17:02 |
| Уважаемый gcc, последний способ наиболее эффективен и хорошо масштабируется на архитектуре с несколькими серверами. Надо в форму передавать зашифрованный параметр, содержащий хэш и дату устаревания картинки. Для повышения стойкости можно ключ шифрования выбирать случайно из набора. |
| Автор: gcc 16.6.2008, 17:08 |
| Уважаемый ginnie, что такое "устаревания картинки"? я найти не могу |
| Автор: ginnie 16.6.2008, 18:15 |
| gcc, обычно для капчи ограничивают время, в течении которого она принимается сервером, чтобы усложнить вариант использования системы распознавания изображений. Т.е. схема такая:
|
| Автор: nitr 16.6.2008, 20:55 | ||
т.е. предлагается заранее хранить это всё на сервере? Мне интересно, как это "заранее". Просто в своем опыте такое не встречал |
| Автор: ginnie 16.6.2008, 23:34 |
| Уважаемый nitr, представьте, что у Вас сервер должен показывать 100 капчей в секунду. Одна картинка генерируется 0.4 сек (для примера). Как это сделать? Генерируем 10000 картинок (за 1 час) и показываем их пользователям случайным образом. Картинки не удаляем, а дополняем новыми (для получения необходимого объема) и заменяем через некоторое время. Код, изображенный на картинке включен в имя файла. |
| Автор: nitr 16.6.2008, 23:35 |
ваш подход мне ясен. Спасибо. Имхо, со временем заменить стоит ;) |
| Автор: tolkien 18.6.2008, 16:36 |
| Я бы не использовал БД. Зачем она нужна там где без нее легко обойтись? Можно поступить так 1.генерим случайную послед букв и цифр для картинки $captch_str 2.генерим саму картинку $captch_image содержащее $captch_str 3. генерим случайное имя файла для капчи $name_captch фиксированной длины. 4. создаем 2 файла 1й файл. картинка $captch_image с именем $name_capth.jpg 2ой файл с $captch_str c именем $name_captch.txt 5. добавляем $name_captch в файл $captch.txt В процессе работы случайным образом выбираем $namt_captch из файла $captch.txt. Кол.во записей опред. размер файла и делится на длину записи $name_captch. И дальше остается только случайным образом сгенерить число. Помоему это будет работать гораздо быстрее чем варианты с БД. |
| Автор: dmitryk1 20.6.2008, 06:59 | ||
поищи tiddleWiki. В браузерах типа файерфокса он позволяет сохранять в себя бинарные файлы. А поскольку он сам страничка, получается что это именно то, что надо. Кстати, ещё пример - электронное письмо с вложением. Только они не бинарными вставляются, а перекодируются во что-то. |
| Автор: Ramirez 13.8.2008, 20:15 |
| Иногда очень хочется отдать данные вместе со страницей. Картинки например. Чтобы не генерить доп. обращений к серверу... а ведь давноесть способ (и не только с картинками): <IMG SRC="data:image/gif;base64,[...]"> [...] - вместо этого идет картинка закодированная в base64. Но как всегда в IE это не работает (незнаю как в 7 версии) =\ вот пример как это работает: http://www.greywyvern.com/code/php/binary2base64 кстати, про IE7: http://dean.edwards.name/weblog/2005/06/base64-ie/ Вауу, это даже в IE6 (6.0.2900) работает! http://dean.edwards.name/my/base64-ie.html |
| Автор: gcc 30.1.2009, 11:59 | ||
| попросили сделать эту эрунду сейчас хоть убей, но картинка просто пустая может кто-то показать рабочую, или в чем проблема?
|
| Автор: gcc 30.1.2009, 12:16 |
| включаю ее так http://domain.ru/captcha.pl |
| Автор: shamber 30.1.2009, 15:07 |
| стормозил |
| Автор: gcc 30.1.2009, 16:05 |
| я еще вспомнил это в книге "Рецепты для Программирования на perl" по-моиму 3 издание это было кстате, я вот не понял, зачем генерить случайно число и криптографировать его? если бот будет перебирать цыфры которые на картинке и вводить все в подрят, то в чем смылс от еще одного случайно числа или от криптографирования его? (если от перебора цифр и букв, то проще просто банить тех кто много раз вводит не правильно ...) |
| Автор: Usmanec 26.2.2009, 22:39 | ||||
| Могу предложить рабочий пример. Скрипт гостевой находиться на одном серваке каптча на другом и все работает! http://usman.sid.su/cgi-bin/talk/gbook.pl?a=add (Можно теститить сколько влезет сайт давно умер...) http://usmancity.ru/cgi-bin/captcha/captcha.cgi?a2Pza3 Каждый раз циферки каптчи разные (Всмысле прорисовываются по разному, делал, что они еще плясали то в лево наклонятся то в право и тд, но не понравилось). (Зайдите по ссылке и пообоновляйте страницу...) Скрипт каптчи
Обрезанный скрипт формы
|
| Автор: gcc 2.10.2009, 14:19 |
| вот нашел модель http://search.cpan.org/~kazeburo/Catalyst-Plugin-Captcha-0.03/lib/Catalyst/Plugin/Captcha.pm но дело не в этом... подскажите, по каким причинам картинка может не выводиться в mod_perl? в собственном сервере catalyst'a выводиться... в CGI по-моиму выдавалась нормально может загловок криво выдается, но пока не нашел как посмотреть или поменять.... |
| Автор: gcc 2.10.2009, 14:54 | ||
| в /myapp_server.pl -r выводиться а в mod_perl2 не хочет
|
| Автор: gcc 2.10.2009, 15:18 | ||
| догадываюсь что проблема в print $c->create_captcha(); то что mod_perl ее не видит через print ? нашел метод body, но пусто тоже самое, как это отправить в mod_perl2?
|
| Автор: gcc 3.10.2009, 10:37 | ||||
| сделал, я наверное не допонял в шаблон поставить:
|