note 63816 added to function.imageconvolution

From: Date: Fri, 31 Mar 2006 19:26:31 +0000
Subject: note 63816 added to function.imageconvolution
Groups: php.notes 
Request: Send a blank email to php-notes+get-107097@lists.php.net to get a copy of this message
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.php.net/note/edit/63816 Del: integrated -- http://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://master.php.net/note/delete/63816/spam Del: non-english -- http://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://master.php.net/manage/user-notes.php

« previous php.notes (#107097) next »