The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Генерация captcha средствами PIL"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [ Отслеживать ]

"Генерация captcha средствами PIL"  +/
Сообщение от alexander0203 email(ok) on 12-Июл-09, 21:19 
Ни где не смог найти работающий пример, как вывести произвольное
изображение сгенерированное python-скриптом в тег <img src="" />.

Задача собственно такова:

Имеется некая html-страница содержащая строку:

<img src="/cgi-bin/captcha.py" />

Соответственно имеется скрипт /cgi-bin/captcha.py который
создает при помощи библиотеки PIL произвольную картинку
(либо загружает ее из файла - не важно).

import Image
im = Image.open("image.jpg")
print 'Content-Type: image/jpeg \n\n'
print im

Данный скрипт неправильный (неработает) - я просто привел его
в качестве примера чтобы показать, что я хочу получить.

Как правильно вывести картинку содержащуюся в переменной "im" в
тег <img src="" />  ?

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Генерация captcha средствами PIL"  +/
Сообщение от angra (ok) on 13-Июл-09, 00:03 
В скрипте две ошибки, не считая возможного отсутствия shebang и x бита на файле.
1. python в отличии от perl всегда делает перевод строки при print, так что один \n лишний
2. print im выведет текст вроде <JpegImagePlugin.JpegImageFile instance at 0xb7b55f2c>. Для вывода содержимого объекта нужно использовать метод save и sys.stdout
Итого правильным вариантом будет
#!/usr/bin/python
import Image
import sys
im = Image.open("image.jpg")
print 'Content-Type: image/jpeg\n'
im.save(sys.stdout, "JPEG")
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Генерация captcha средствами PIL"  +/
Сообщение от mistercx on 21-Сен-09, 03:05 
>import sys
>import Image
>im = Image.open("../img/big.jpg")
>print "Content-type: image/jpeg\n"
>im.save(sys.stdout, "JPEG")

У меня этот код выводит в броузер вместо картинки какую-то охинею (всё в больших разноцветных квадратиках).

При этом:

>im.save("../img/small50.jpg", "JPEG", quality=50)

создает на диске абсолютно нормальный файл....

Интересно, где собака зарыта...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Генерация captcha средствами PIL"  +/
Сообщение от alexander0203 email(ok) on 13-Июл-09, 00:14 
Мне уже удалось найти работающий пример но он выглядит немного
по другому:

#------- captcha.py -----------
#!/usr/local/bin/python

import Image
import cStringIO

im = Image.open("image.jpg")

f = cStringIO.StringIO()
im.save(f, "PNG")
f.seek(0)
print 'Content-Type: image/png\n'
print f.read()

#------- end file -------------

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Генерация captcha средствами PIL"  +/
Сообщение от angra (ok) on 13-Июл-09, 00:18 
По сравнению с прямым выводом в stdout лишнее пожирание памяти на хранение копии картинки и ненужное преобразование в png, но говорят питонщиков подобные мелочи не интересуют ;)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Генерация captcha средствами PIL"  +/
Сообщение от alexander0203 email(ok) on 13-Июл-09, 00:34 
Скрипт написал на основе идей кода отсюда:

http://lost-theory.org/python/dynamicimg.html

Не знаю, как на счет лишнего расхода памяти - просто каптча
как правило мааааленькая картинка так что думаю что в
данном случае это не критично.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Генерация captcha средствами PIL"  +/
Сообщение от alexander0203 email(ok) on 13-Июл-09, 00:48 
Проверил ваш вариант - работает нормально. Что касается
"ненужного преобразование в png" - делать его придется
по любому. Дело в том что пример с загрузкой готового
изображения я привел для простоты. На самом деле каптча
генерируется на лету и уже потом на выходе преобразуется
в какой-нибудь конкретный формат (jpg/png - не важно).
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру