note 73551 added to function.imageconvolution

From: Date: Thu, 01 Mar 2007 03:55:25 +0000
Subject: note 73551 added to function.imageconvolution
Groups: php.notes 
Request: Send a blank email to php-notes+get-123970@lists.php.net to get a copy of this message
imageconvolution() does not appear in PHP with non-bundled GD libraries. It is a rare situation, but it still happens. That's why I wrote a replication of imageconvolution() in PHP. Compare to the post below, this one makes the use of offset and 30% faster. Because it's written in PHP, it is 50 times slower than the bundled version. Actually, this is a replication of gdimageconvolutaion() of GD library, it does not support data validating feature imageconvolution() have. But I guess people who uses this function knows their stuff. THE SCRIPT: <?php //include this file whenever you have to use imageconvolution... //you can use in your project, but keep the comment below :) //great for any image manipulation library //Made by Chao Xu(Mgccl) 2/28/07 //www.webdevlogs.com //V 1.0 if(!function_exists('imageconvolution')){ function imageconvolution($src, $filter, $filter_div, $offset){ if ($src==NULL) { return 0; } $sx = imagesx($src); $sy = imagesy($src); $srcback = ImageCreateTrueColor ($sx, $sy); ImageCopy($srcback, $src,0,0,0,0,$sx,$sy); if($srcback==NULL){ return 0; } for ($y=0; $y<$sy; ++$y){ for($x=0; $x<$sx; ++$x){ $new_r = $new_g = $new_b = 0; $alpha = imagecolorat($srcback, $pxl[0], $pxl[1]); $new_a = $alpha >> 24; for ($j=0; $j<3; ++$j) { $yv = min(max($y - 1 + $j, 0), $sy - 1); for ($i=0; $i<3; ++$i) { $pxl = array(min(max($x - 1 + $i, 0), $sx - 1), $yv); $rgb = imagecolorat($srcback, $pxl[0], $pxl[1]); $new_r += (($rgb >> 16) & 0xFF) * $filter[$j][$i]; $new_g += (($rgb >> 8) & 0xFF) * $filter[$j][$i]; $new_b += ($rgb & 0xFF) * $filter[$j][$i]; } } $new_r = ($new_r/$filter_div)+$offset; $new_g = ($new_g/$filter_div)+$offset; $new_b = ($new_b/$filter_div)+$offset; $new_r = ($new_r > 255)? 255 : (($new_r < 0)? 0:$new_r); $new_g = ($new_g > 255)? 255 : (($new_g < 0)? 0:$new_g); $new_b = ($new_b > 255)? 255 : (($new_b < 0)? 0:$new_b); $new_pxl = ImageColorAllocateAlpha($src, (int)$new_r, (int)$new_g, (int)$new_b, $new_a); if ($new_pxl == -1) { $new_pxl = ImageColorClosestAlpha($src, (int)$new_r, (int)$new_g, (int)$new_b, $new_a); } if (($y >= 0) && ($y < $sy)) { imagesetpixel($src, $x, $y, $new_pxl); } } } imagedestroy($srcback); return 1; } } ?> ---- Server IP: 216.194.113.175 Probable Submitter: 141.155.28.37 ---- Manual Page -- http://www.php.net/manual/en/function.imageconvolution.php Edit -- https://master.php.net/note/edit/73551 Del: integrated -- https://master.php.net/note/delete/73551/integrated Del: useless -- https://master.php.net/note/delete/73551/useless Del: bad code -- https://master.php.net/note/delete/73551/bad+code Del: spam -- https://master.php.net/note/delete/73551/spam Del: non-english -- https://master.php.net/note/delete/73551/non-english Del: in docs -- https://master.php.net/note/delete/73551/in+docs Del: other reasons-- https://master.php.net/note/delete/73551 Reject -- https://master.php.net/note/reject/73551 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#123970) next »