Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   PHP (https://forum.zone-game.info/forumdisplay.php?f=125)
-   -   imagecreatetruecolor() (https://forum.zone-game.info/showthread.php?t=17650)

Gambit_J 16.01.2012 12:29

imagecreatetruecolor()
 
imagecreatetruecolor() - создаёт новое изображение true color. озвращает идентификатор чёрно-белого изображения размером x_size на y_size. Собственно как можно сменить фон? При волновом искажении изображения, получаются черные края.

Arzamas 16.01.2012 13:25

Re: imagecreatetruecolor()
 
imagecolorallocate()

З.Ы. Капчу свою пишешь?
В kcaptcha сразу за imagecreatetruecolor() идет imagealphablending(), после этого при помощи imagecolorallocate() указывается цвет фона (белый) и цвет альфа слоя (черный) и поверх рисуется белый прямоугольник
PHP код:

<?php    
$img
=imagecreatetruecolor($width$height);
imagealphablending($imgtrue);
$white=imagecolorallocate($img255255255);
imagefilledrectangle($img00$width-1$height-1$white);
?>


Gambit_J 16.01.2012 14:07

Re: imagecreatetruecolor()
 
Да, капчу. Все сделал, 1 косяк остался вот. Спс.

Добавлено через 4 минуты
Хмм, принцип понятен, но что-то все так же осталось.

Я понял, вообщем прямоугольник тоже искажаться. Мне надо как-то игнорировать этот момент, ничего в голову не лезет. Или сделать обратное искажение...

P.S. вместео прямоугольника тогда уже легче сделать заливку фона:
imagefill ($img, 0, 0, 0xf9e3e7);

Добавлено через 22 часа 29 минут
Для ясности, вот что происходит:
http://s018.radikal.ru/i502/1201/8e/e1e54c5e3579.png

Gambit_J 18.01.2012 15:18

Re: imagecreatetruecolor()
 
ни кто не шарит? :(

P.S. программатор где ты когда ты так нужен :)

Arzamas 18.01.2012 16:39

Re: imagecreatetruecolor()
 
В той же kcaptcha искривляется только текст, а потом уже накладывается на фон

Gambit_J 18.01.2012 16:56

Re: imagecreatetruecolor()
 
Цитата:

Сообщение от Arzamas (Сообщение 160156)
В той же kcaptcha искривляется только текст, а потом уже накладывается на фон

да я думал об этом, но как это сделать пока не представляю. Побывал imagecopy() ,чет не вышло =(

Побывал так же наложить фон до вывода искажения, он тупо накрывает все.

lKingHell 20.01.2012 18:51

Re: imagecreatetruecolor()
 
В своё время реализовал так, только надо добавить картинки и рандомно по номеру их выбирать. Получалось так:http://s011.radikal.ru/i317/1201/40/d6a1c5e54ec2.jpg
PHP код:

<?php
//Количество символов
define('CHARS'5);

//Функция генерации произвольной строки
function generationStr()
{
    
$num CHARS;
    
$range '35';//$range - диапазон алфавита начиная с нуля
    
$chars '1234567890aeiouybcdfghjklmnpqrstvwxz';
    
    for(
$i 0$i $num$i++)
    {
        
$str .= $chars{rand(0$range)};
    }
    return 
$str;
}

//Открываем сессию
session_start();

//Генерируем капчу
$captcha generationStr();

//Записываем капчу в сессию
unset($_SESSION['captcha']);
$_SESSION['captcha'] = $captcha;

//Говорим, что этот файл картинка
header('Content-type: image/jpg');

//Открываем изображение
$img imagecreatefromjpeg('images\noise1.jpg');

//Включаем сглаживание
imageantialias($imgtrue);

//Генерируем путь до шрифта
$font 'fonts\verdana.ttf';

//Добавляем текст
$x 10;
$y 30;
for(
$i 0$i CHARS$i++)
{
    
//Генерируем цвет
    
$color imagecolorallocate($imgrand(50200), rand(50200), rand(50200));

    
$angle rand(020);
    
$size rand(1220);
    
imagettftext($img20$angle$x$y$color$font$_SESSION['captcha'][$i]);
    
$x += 20;
}

//Отдаём изображение
imagejpeg($img""90);
    
?>


Gambit_J 20.01.2012 20:28

Re: imagecreatetruecolor()
 
Цитата:

Сообщение от lKingHell (Сообщение 160505)
В своё время реализовал так, только надо добавить картинки и рандомно по номеру их выбирать. Получалось так:http://s011.radikal.ru/i317/1201/40/d6a1c5e54ec2.jpg
PHP код:

<?php
//Количество символов
define('CHARS'5);

//Функция генерации произвольной строки
function generationStr()
{
    
$num CHARS;
    
$range '35';//$range - диапазон алфавита начиная с нуля
    
$chars '1234567890aeiouybcdfghjklmnpqrstvwxz';
    
    for(
$i 0$i $num$i++)
    {
        
$str .= $chars{rand(0$range)};
    }
    return 
$str;
}

//Открываем сессию
session_start();

//Генерируем капчу
$captcha generationStr();

//Записываем капчу в сессию
unset($_SESSION['captcha']);
$_SESSION['captcha'] = $captcha;

//Говорим, что этот файл картинка
header('Content-type: image/jpg');

//Открываем изображение
$img imagecreatefromjpeg('images\noise1.jpg');

//Включаем сглаживание
imageantialias($imgtrue);

//Генерируем путь до шрифта
$font 'fonts\verdana.ttf';

//Добавляем текст
$x 10;
$y 30;
for(
$i 0$i CHARS$i++)
{
    
//Генерируем цвет
    
$color imagecolorallocate($imgrand(50200), rand(50200), rand(50200));

    
$angle rand(020);
    
$size rand(1220);
    
imagettftext($img20$angle$x$y$color$font$_SESSION['captcha'][$i]);
    
$x += 20;
}

//Отдаём изображение
imagejpeg($img""90);
    
?>


так и я могу, но эту капчу можно взломать. Идеальная капча обаладет след. функциями:

1. Слепленные символы
2. Волновое искажение по x и y координатам.
3. Рандомные линии перекрывающие символы (не обязательно) - усложнит чтение символов для человека.

Gambit_J 28.01.2012 15:51

Re: imagecreatetruecolor()
 
Решил проблему намного проще. Считываем где находятся черные пиксели (уже на искаженном изображении), и красим их в нужный нам цвет.

PHP код:

//цвет фона
$background 0xff0000;

// длина
$xx 120;

// ширина
$yy 60;

// заполняем черный фон, нашим цветом фона
    
for ($a=0$a<$xx$a++) {
        for (
$b=0$b<$yy$b++) {
            if (
imagecolorat($img2$a$b) == 0x000000) { imagesetpixel($img2$a$b$background); }
        }
    } 

P.S. Да но это надо делать с учетом того, что у Вас не должен под рандом попадаться черный цвет фона или шрифта, а то все замажется :) Это не сложно обойти:

PHP код:

// все цвета на выбор, кроме черного
$background imagecolorallocate(rand(1255), rand(1255), rand(1255)); 

Отписал, мб кому пригодиться в будущем.


Текущее время: 19:50. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot