Графический фильтр twirl?

avenger_msoft

Новичок
Графический фильтр twirl?

Привет Всем!

Есть какие нибудь идеи по поводу как можно осуществить фильтр twirl(закручивание изображения). Т.е. берется на картинке круглое изображение и "закручивается"?

С уважением, Иван.
 

Ping

Новичок
Можно.
http://perso.wanadoo.fr/pierre.g/xnview/en_nconvert.html
Скачаешь под свою ОС.
Запустишь с ключом -help.

Там много фильтров. То что тебе нужно это swirl
 

avenger_msoft

Новичок
Фанат

Я бы написал, если бы знал как. Хотябы примерный алгоритм. Есть идеи?
 

facelift

Новичок
Все правильно. Нормальный алгоритм. Ща прогу попробую написать :)

-~{}~ 26.05.06 15:38:

Не, не правильно. Этот алгоритм рисует черно-белую фигню, которая там на картинке нарисована:

<font face="Terminal">
<?
$weight = 100;
$height = 100;
$cx = $weight >> 1;
$cy = $height >> 1;
$xx = $x - $cx;
$yy = $y - $cy;
$n = 2;
$l = array(" "," ","\xB0","\xB0","\xB1","\xB1","\xB2","\xB2","\xDB","\xDB");

for($i = 0; $i < $weight; $i++)
{
for($j = 0; $j < $height; $j++)
{
$r = sqrt(($i - $cx) * ($i - $cx) + ($j - $cy) * ($j - $cy));
$coss = $i / $r;
$out_str .= $l[floor(abs(sin(cos($r) - $n * $coss)) * 10)];

}
$out_str .= "<br>";
}
print_r($out_str);
?>
</font>

В IExplorer'e смотрите.
 

avenger_msoft

Новичок
facelift

Спасибо. То что надо. По исходной функции делаю черно-белую маску. Затем наложение маски на исходное изображение.

PHP:
	for ($x = 0; $x < $x_i; $x++) {
	    for ($y = 0; $y < $y_i; $y++) {

	        $rgb2 = imagecolorat($im_mask, $x, $y);
	        $a2   = ($rgb2 >> 24) & 0xFF;
	        $r2   = ($rgb2 >> 16) & 0xFF;
	        $g2   = ($rgb2 >> 8) & 0xFF;
	        $b2   = $rgb2 & 0xFF;

	        $g2   = ($r2 + $g2 + $b2) / 3;
	        $val  = ($g2 - 127) / 127;
	        $xd   = $x - ($val * $h);
	        $yd   = $y + ($val * $v);

	        $xd   = max(0, $xd);
	        $yd   = max(0, $yd);
	        if ($xd > $x_i - 1) $xd = $x_i - 1;
	        if ($yd > $y_i - 1) $yd = $y_i - 1;

	        $rgb = imagecolorat($im_source, $xd, $yd);
	        $a   = ($rgb >> 24) & 0xFF;
	        $r   = ($rgb >> 16) & 0xFF;
	        $g   = ($rgb >> 8) & 0xFF;
	        $b   = $rgb & 0xFF;

	        $color = imagecolorallocatealpha($im_filter, $r, $g, $b, $a);
	        imagesetpixel($im_filter, $x, $y, $color);
	    }
	}

Всем спасибо.
 
Сверху