Сергей Добросклонов
|
|
« : 31-03-2010 18:13 » |
|
Не нашёл форума по PHP, поэтому пишу здесь... У меня есть скрипт каптчи, я его изменил под свои нужды, но у скрипта есть маленькая проблема: изображение выдаёт с большой потерей качества. Нигде переменной отвечающей за качество не нашёл. Может кто знает как сделать качество картинки на 100%... <?php session_start(); // выбираем случайную картинку $im=ImageCreateFromJpeg(round(mt_rand(1,3)).".jpg"); // генерируем цвет надписи $color=ImageColorAllocate($im,mt_rand(255,255),mt_rand(255,255),mt_rand(255,255)); // создаём изображение проверочного кода ImageTtfText($im, 30, mt_rand(0,0), 15, 27, $color, "beast_impact.ttf", $_SESSION['uid']); // имя картинки (переменная) , размер шрифта, углы наклона, отступ слева, отступ сверху, цвет, шрифт, текст(сам код) Header("Content-type: image/jpg"); ImageJpeg($im); ImageDestroy($im); ?>
|
|
« Последнее редактирование: 31-03-2010 18:15 от RXL »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 31-03-2010 18:17 » |
|
Барин, почитай о форматах сжатия графики. Используй imagegif(), либо imagepng(). О imagejpeg почитай в мануале: imagejpeg
(PHP 4, PHP 5)
imagejpeg — Output image to browser or file
Описание
bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
imagejpeg() creates a JPEG file from the given image .
Список параметров
image An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().
filename The path to save the file to. If not set or NULL, the raw image stream will be outputted directly. To skip this argument in order to provide the quality parameter, use NULL.
quality quality is optional, and ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file). The default is the default IJG quality value (about 75).
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
|
|
« Последнее редактирование: 31-03-2010 18:21 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #2 : 10-04-2010 18:12 » |
|
Можете дать ссылку на нормальный скрипт капчи, с кнопкой обновления изображения. Сам хотел сделать, но не понял как Подучил AJAX, понял как делаются асинхронные запросы, но ответ от сервера научился принимать только в текстовом формате и формате xml. А вот как вернуть созданное изображение не знаю.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #3 : 11-04-2010 07:34 » |
|
Барин, AJAX никак не поможет. Загрузить и отобразить картинку, без сторонних плагинов типа Java и Flash, можно только загрузив ее через тег img или iframe/frame. Соответственно, просто смени URL тега img, в котором отображается CAPTCHA. Чтобы не мешали такие факторы, как одинаковое имя и кеширование, добавляй к имени параметр со случайным значением.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Сергей Добросклонов
|
|
« Ответ #4 : 11-04-2010 09:46 » |
|
Понятно, сегодня попробую, потом отпишусь.
|
|
|
Записан
|
|
|
|
Сергей Добросклонов
|
|
« Ответ #5 : 05-09-2011 15:42 » |
|
Спустя кучу времени вернулся в данную тему. С каптче всё хорошо. Но только на локальном компьютере. А вот на серваке появляется только фон, а цифр нет. По-видимому не срабатывает функция imagettftext, которая отвечает за наложение текста. Для её работы нужны GD и Free Type библиотеки. Проверял, на серваке - они установлены и включены. В чём может быть проблема?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #6 : 05-09-2011 15:48 » |
|
обрати внимание
imagettftext
что делает?
изображение - шрифт - текст
Изображение должно получиться Текст - наверное есть Шрифт? Путь к шрифту?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #7 : 05-09-2011 15:50 » |
|
А протрасировать? В лог кидать сообшения, по прохождению каждого этапа, заодно записывать полученную картинку на диск. Тогда можно уже говорить, кто именно виноват.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #8 : 05-09-2011 15:52 » |
|
Именно! Внимательно читай документацию и (почти) все будет понятно.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #9 : 05-09-2011 15:53 » |
|
я бы посоветовал поизучать аналоги http://www.google.com/recaptchaПравда рекапчу уже народ ломает вовсююю...
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Сергей Добросклонов
|
|
« Ответ #10 : 07-09-2011 14:50 » |
|
Мне порекомендовали написать ./ перед названием шрифта, то есть так: ImageTtfText($im, 30, mt_rand(0,0), 15, 27, $color, "./beast_impact.ttf", $chislo); Теперь всё работает.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #11 : 08-09-2011 05:47 » |
|
Я же сказал, что надо читать документацию... http://ru2.php.net/manual/en/function.imagettftext.php The path to the TrueType font you wish to use. Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path. When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces. In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems. <?php // Set the enviroment variable for GD putenv('GDFONTPATH=' . realpath('.'));
// Name the font to be used (note the lack of the .ttf extension) $font = 'SomeFont'; ?>
Полезно еще почитать доку к библиотеке GD. И не пиши регистр идентификаторов как тебе вздумается! Да, сейчас PHP не чувствителен к регистру идентификаторов и "ImageTtfText" и "imagettftext" - это одно и тоже, но в будущем поведение PHP может измениться.
|
|
« Последнее редактирование: 08-09-2011 05:49 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|