List Info

Thread: note 63816 added to function.imageconvolution




note 63816 added to function.imageconvolution
user name
2006-03-31 19:26:31
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

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )