Commit:    7698bc5735d188964cb98e6b6387c4cca26fcb0e
Author:    Pierre Joye <pierre....@gmail.com>         Fri, 1 Mar 2013 08:10:49 
+0100
Parents:   22aeb976e0a42c82cec594e8ca7b38846758c9b7
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=7698bc5735d188964cb98e6b6387c4cca26fcb0e

Log:
- disable threshold for now, will enable it again using CIEDE2000

Changed paths:
  M  UPGRADING
  M  ext/gd/gd.c
  M  ext/gd/php_gd.h


Diff:
diff --git a/UPGRADING b/UPGRADING
index bc642aa..5f7d3ee 100755
--- a/UPGRADING
+++ b/UPGRADING
@@ -176,6 +176,7 @@ PHP 5.5 UPGRADE NOTES
 
 - GD
   - imageflip
+  - imagecrop
 
 - Hash:
   - hash_pbkdf2()
@@ -308,6 +309,19 @@ PHP 5.5 UPGRADE NOTES
 - cURL:
   - Added CURLOPT_SAFE_UPLOAD to be used with curl_setopt().
 
+- GD
+  - Added constants for imageflip:
+    . IMG_FLIP_HORIZONTAL
+       . IMG_FLIP_VERTICAL
+    . IMG_FLIP_BOTH
+  - Added constants for imagecrop
+    . IMG_CROP_DEFAULT
+    . IMG_CROP_TRANSPARENT
+    . IMG_CROP_BLACK
+    . IMG_CROP_WHITE
+    . IMG_CROP_SIDES
+    . IMG_CROP_THRESHOLD
+
 ========================================
 10. Changes to INI File Handling
 ========================================
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index c004a72..7a2e214 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -891,6 +891,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_imageflip, 0)
        ZEND_ARG_INFO(0, mode)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO(arginfo_imagecrop, 0)
+       ZEND_ARG_INFO(0, im)
+       ZEND_ARG_INFO(0, rect)
+ZEND_END_ARG_INFO()
+
 ZEND_BEGIN_ARG_INFO(arginfo_imagecropauto, 0)
        ZEND_ARG_INFO(0, im)
        ZEND_ARG_INFO(0, mode)
@@ -957,6 +962,7 @@ const zend_function_entry gd_functions[] = {
 #ifdef HAVE_GD_BUNDLED
        PHP_FE(imageantialias,                                                  
arginfo_imageantialias)
        PHP_FE(imageflip,                                                       
        arginfo_imageflip)
+       PHP_FE(imagecrop,                                                       
        arginfo_imagecrop)
        PHP_FE(imagecropauto,                                                   
arginfo_imagecropauto)
 #endif
 
@@ -1218,7 +1224,10 @@ PHP_MINIT_FUNCTION(gd)
        REGISTER_LONG_CONSTANT("IMG_CROP_BLACK", GD_CROP_BLACK, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("IMG_CROP_WHITE", GD_CROP_WHITE, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("IMG_CROP_SIDES", GD_CROP_SIDES, CONST_CS | 
CONST_PERSISTENT);
+#ifdef GD_ENABLE_CROP_THRESHOLD
        REGISTER_LONG_CONSTANT("IMG_CROP_THRESHOLD", GD_CROP_THRESHOLD, 
CONST_CS | CONST_PERSISTENT);
+#endif
+
 #else
        REGISTER_LONG_CONSTANT("GD_BUNDLED", 0, CONST_CS | CONST_PERSISTENT);
 #endif
@@ -5141,9 +5150,69 @@ PHP_FUNCTION(imageflip)
 }
 /* }}} */
 
+/* {{{ proto void imagecrop(resource im, array rect)
+   Crop an image using the given coordinates and size, x, y, width and height. 
*/
+PHP_FUNCTION(imagecrop)
+{
+       zval *IM;
+       long mode = -1;
+       long color = -1;
+       double threshold = 0.5f;
+       gdImagePtr im;
+       gdImagePtr im_crop;
+       HashTable rect_hash;
+       gdRect rect;
+       zval **tmp;
 
-/* {{{ proto void imageflip(resource im, int mode)
-   Flip an image (in place) horizontally, vertically or both directions. */
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|h", &IM, 
&rect_hash) == FAILURE)  {
+               return;
+       }
+
+       ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+
+       if (zend_hash_find(&rect_hash, "x", strlen("x"), (void **)&tmp) != 
FAILURE) {
+               rect.x = Z_LVAL_PP(tmp);
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing x 
position");
+               RETURN_FALSE;
+       }
+
+       if (zend_hash_find(&rect_hash, "y", strlen("x"), (void **)&tmp) != 
FAILURE) {
+               rect.y = Z_LVAL_PP(tmp);
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing y 
position");
+               RETURN_FALSE;
+       }
+
+       if (zend_hash_find(&rect_hash, "width", strlen("x"), (void **)&tmp) != 
FAILURE) {
+               rect.width = Z_LVAL_PP(tmp);
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing width");
+               RETURN_FALSE;
+       }
+
+       if (zend_hash_find(&rect_hash, "height", strlen("x"), (void **)&tmp) != 
FAILURE) {
+               rect.width = Z_LVAL_PP(tmp);
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing height");
+               RETURN_FALSE;
+       }
+
+       im_crop = gdImageCrop(im, &rect);
+
+       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown flip mode");
+       RETURN_FALSE;
+
+       if (im_crop == NULL) {
+               RETURN_FALSE;
+       } else {
+               ZEND_REGISTER_RESOURCE(return_value, im_crop, le_gd);
+       }
+}
+/* }}} */
+
+/* {{{ proto void imagecropauto(resource im [, int mode [, threshold [, 
color]]])
+   Crop an image automatically using one of the available modes. */
 PHP_FUNCTION(imagecropauto)
 {
        zval *IM;
@@ -5169,7 +5238,7 @@ PHP_FUNCTION(imagecropauto)
                case GD_CROP_SIDES:
                        im_crop = gdImageCropAuto(im, mode);
                        break;
-
+#ifdef GD_ENABLE_CROP_THRESHOLD
                case GD_CROP_THRESHOLD:
                        if (color < 0) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"Color argument missing with threshold mode");
@@ -5177,7 +5246,7 @@ PHP_FUNCTION(imagecropauto)
                        }
                        im_crop = gdImageCropThreshold(im, color, (float) 
threshold);
                        break;
-
+#endif
                default:
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown 
flip mode");
                        RETURN_FALSE;
diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h
index 537efc4..90ebd65 100644
--- a/ext/gd/php_gd.h
+++ b/ext/gd/php_gd.h
@@ -125,6 +125,7 @@ PHP_FUNCTION(imagerotate);
 #ifdef HAVE_GD_BUNDLED
 PHP_FUNCTION(imageantialias);
 PHP_FUNCTION(imageflip);
+PHP_FUNCTION(imagecrop);
 PHP_FUNCTION(imagecropauto);
 #endif


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to