pajoye Sat Apr 16 08:12:27 2005 EDT
Modified files:
/php-src/ext/gd gd.c php_gd.h
Log:
- export imageconvolution to userland, making people happy to do not
use the predefined ones :)
http://cvs.php.net/diff.php/php-src/ext/gd/gd.c?r1=1.308&r2=1.309&ty=u
Index: php-src/ext/gd/gd.c
diff -u php-src/ext/gd/gd.c:1.308 php-src/ext/gd/gd.c:1.309
--- php-src/ext/gd/gd.c:1.308 Sun Apr 10 17:37:16 2005
+++ php-src/ext/gd/gd.c Sat Apr 16 08:12:24 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: gd.c,v 1.308 2005/04/10 21:37:16 andrey Exp $ */
+/* $Id: gd.c,v 1.309 2005/04/16 12:12:24 pajoye Exp $ */
/* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
Cold Spring Harbor Labs. */
@@ -324,6 +324,7 @@
/* gd filters */
#ifdef HAVE_GD_BUNDLED
PHP_FE(imagefilter,
NULL)
+ PHP_FE(imageconvolution,
NULL)
#endif
{NULL, NULL, NULL}
@@ -4188,6 +4189,60 @@
}
}
/* }}} */
+
+/* {{{ proto resource imageconvolution(resource src_im, array matrix3x3,
double div, double offset)
+ Apply a 3x3 convolution matrix, using coefficient div and offset */
+PHP_FUNCTION(imageconvolution)
+{
+ zval *SIM, *hash_matrix;
+ pval **var = NULL, **var2 = NULL;
+ gdImagePtr im_src = NULL;
+ float div, offset;
+ int nelem, i, j, res;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "radd", &SIM,
&hash_matrix, &div, &offset) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
+
+ nelem = zend_hash_num_elements(Z_ARRVAL_P(hash_matrix));
+ if (nelem != 3) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must have 3x3
array");
+ RETURN_FALSE;
+ }
+
+ float matrix[3][3] = {{0,0,0}, {0,0,0}, {0,0,0}};
+
+ for (i=0; i<3; i++) {
+ if (zend_hash_index_find(Z_ARRVAL_P(hash_matrix), (i), (void
**) &var) == SUCCESS) {
+ if (Z_TYPE_PP(var) != IS_ARRAY ||
zend_hash_num_elements(Z_ARRVAL_PP(var)) != 3 ) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"You must have 3x3 array");
+ RETURN_FALSE;
+ }
+
+ for (j=0; j<3; j++) {
+ if (zend_hash_index_find(Z_ARRVAL_PP(var), (j),
(void **) &var2) == SUCCESS) {
+ SEPARATE_ZVAL(var2);
+ convert_to_double(*var2);
+ matrix[i][j] = Z_DVAL_PP(var2);
+ } else {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING, "You must have a 3x3 matrix");
+ RETURN_FALSE;
+ }
+ }
+ }
+ }
+ res = gdImageConvolution(im_src, matrix, div, offset);
+
+ if (res) {
+ RETURN_TRUE;
+ } else {
+ RETURN_FALSE;
+ }
+}
+/* }}} */
+
/* End section: Filters */
/* {{{ proto bool imageantialias(resource im, bool on)
http://cvs.php.net/diff.php/php-src/ext/gd/php_gd.h?r1=1.57&r2=1.58&ty=u
Index: php-src/ext/gd/php_gd.h
diff -u php-src/ext/gd/php_gd.h:1.57 php-src/ext/gd/php_gd.h:1.58
--- php-src/ext/gd/php_gd.h:1.57 Thu Jan 8 12:32:08 2004
+++ php-src/ext/gd/php_gd.h Sat Apr 16 08:12:24 2005
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_gd.h,v 1.57 2004/01/08 17:32:08 sniper Exp $ */
+/* $Id: php_gd.h,v 1.58 2005/04/16 12:12:24 pajoye Exp $ */
#ifndef PHP_GD_H
#define PHP_GD_H
@@ -175,6 +175,7 @@
PHP_FUNCTION(imagelayereffect);
PHP_FUNCTION(imagecolormatch);
PHP_FUNCTION(imagefilter);
+PHP_FUNCTION(imageconvolution);
PHP_FUNCTION(imagexbm);
#endif
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php