an implementation of this function for PHP versions <5.1
<?php
if(!function_exists("imageconvolution"))
{
function imageconvolution(&$img,$mat,$div,$off)
{
if(!imageistruecolor($img) || !is_array($mat) ||
count($mat)!=3 || count($mat[0])!=3 || count($mat[1])!=3 ||
count($mat[2])!=3) return FALSE;
unset($bojainfo);
for($nx=0;$nx<imagesx($img)-1;$nx++)
{
for($ny=0;$ny<imagesy($img)-1;$ny++)
{
$rgb=imagecolorat($img,$nx,$ny);
$bojainfo[$nx][$ny][r]=($rgb>>16)&0xFF;
$bojainfo[$nx][$ny][g]=($rgb>>8)&0xFF;
$bojainfo[$nx][$ny][b]=$rgb&0xFF;
}
}
for($nx=1;$nx<imagesx($img)-1;$nx++)
{
for($ny=1;$ny<imagesy($img)-1;$ny++)
{
$nr=$mat[0][0]*$bojainfo[$nx-1][$ny-1][r] +
$mat[0][1]*$bojainfo[$nx][$ny-1][r] +
$mat[0][2]*$bojainfo[$nx+1][$ny-1][r] +
$mat[1][0]*$bojainfo[$nx-1][$ny][r] +
$mat[1][1]*$bojainfo[$nx][$ny][r] +
$mat[1][2]*$bojainfo[$nx+1][$ny][r] +
$mat[2][0]*$bojainfo[$nx-1][$ny+1][r] +
$mat[2][1]*$bojainfo[$nx][$ny+1][r] +
$mat[2][2]*$bojainfo[$nx+1][$ny+1][r];
$nr=intval(round($nr/$div));
if($nr<0) $nr=0;
elseif($nr>255) $nr=255;
$ng=$mat[0][0]*$bojainfo[$nx-1][$ny-1][g] +
$mat[0][1]*$bojainfo[$nx][$ny-1][g] +
$mat[0][2]*$bojainfo[$nx+1][$ny-1][g] +
$mat[1][0]*$bojainfo[$nx-1][$ny][g] +
$mat[1][1]*$bojainfo[$nx][$ny][g] +
$mat[1][2]*$bojainfo[$nx+1][$ny][g] +
$mat[2][0]*$bojainfo[$nx-1][$ny+1][g] +
$mat[2][1]*$bojainfo[$nx][$ny+1][g] +
$mat[2][2]*$bojainfo[$nx+1][$ny+1][g];
$ng=intval(round($ng/$div));
if($ng<0) $ng=0;
elseif($ng>255) $ng=255;
$nb=$mat[0][0]*$bojainfo[$nx-1][$ny-1][b] +
$mat[0][1]*$bojainfo[$nx][$ny-1][b] +
$mat[0][2]*$bojainfo[$nx+1][$ny-1][b] +
$mat[1][0]*$bojainfo[$nx-1][$ny][b] +
$mat[1][1]*$bojainfo[$nx][$ny][b] +
$mat[1][2]*$bojainfo[$nx+1][$ny][b] +
$mat[2][0]*$bojainfo[$nx-1][$ny+1][b] +
$mat[2][1]*$bojainfo[$nx][$ny+1][b] +
$mat[2][2]*$bojainfo[$nx+1][$ny+1][b];
$nb=intval(round($nb/$div));
if($nb<0) $nb=0;
elseif($nb>255) $nb=255;
$nrgb=($nr<<16)+($ng<<8)+$nb;
if(!imagesetpixel($img,$nx,$ny,$nrgb)) return FALSE;
}
}
return TRUE;
}
}
?>
it's a bit slowish so I wouldn't recommend big images,
also offset is not implemented (don't know what it's
suppose to do)
----
Server IP: 161.53.30.180
Probable Submitter: 83.131.59.152
----
X-Spam-Status: No, hits=3.1 required=5.0
tests=DATE_MISSING,FROM_NO_LOWER
autolearn=no version=2.64
----
Manual Page -- http://www.php.net/manual/en/function.imageconvolution
.php
Edit -- http://master.p
hp.net/note/edit/63816
Del: integrated -- ht
tp://master.php.net/note/delete/63816/integrated
Del: useless -- http:
//master.php.net/note/delete/63816/useless
Del: bad code -- http
://master.php.net/note/delete/63816/bad+code
Del: spam -- http://m
aster.php.net/note/delete/63816/spam
Del: non-english -- h
ttp://master.php.net/note/delete/63816/non-english
Del: in docs -- http:
//master.php.net/note/delete/63816/in+docs
Del: other reasons-- http://master
.php.net/note/delete/63816
Reject -- http://master
.php.net/note/reject/63816
Search -- http://ma
ster.php.net/manage/user-notes.php
--
PHP Notes Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub
.php
|