Skip to content

Commit 7698bc5

Browse files
committed
- disable threshold for now, will enable it again using CIEDE2000
1 parent 22aeb97 commit 7698bc5

File tree

3 files changed

+88
-4
lines changed

3 files changed

+88
-4
lines changed

UPGRADING

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ PHP 5.5 UPGRADE NOTES
176176

177177
- GD
178178
- imageflip
179+
- imagecrop
179180

180181
- Hash:
181182
- hash_pbkdf2()
@@ -308,6 +309,19 @@ PHP 5.5 UPGRADE NOTES
308309
- cURL:
309310
- Added CURLOPT_SAFE_UPLOAD to be used with curl_setopt().
310311

312+
- GD
313+
- Added constants for imageflip:
314+
. IMG_FLIP_HORIZONTAL
315+
. IMG_FLIP_VERTICAL
316+
. IMG_FLIP_BOTH
317+
- Added constants for imagecrop
318+
. IMG_CROP_DEFAULT
319+
. IMG_CROP_TRANSPARENT
320+
. IMG_CROP_BLACK
321+
. IMG_CROP_WHITE
322+
. IMG_CROP_SIDES
323+
. IMG_CROP_THRESHOLD
324+
311325
========================================
312326
10. Changes to INI File Handling
313327
========================================

ext/gd/gd.c

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_imageflip, 0)
891891
ZEND_ARG_INFO(0, mode)
892892
ZEND_END_ARG_INFO()
893893

894+
ZEND_BEGIN_ARG_INFO(arginfo_imagecrop, 0)
895+
ZEND_ARG_INFO(0, im)
896+
ZEND_ARG_INFO(0, rect)
897+
ZEND_END_ARG_INFO()
898+
894899
ZEND_BEGIN_ARG_INFO(arginfo_imagecropauto, 0)
895900
ZEND_ARG_INFO(0, im)
896901
ZEND_ARG_INFO(0, mode)
@@ -957,6 +962,7 @@ const zend_function_entry gd_functions[] = {
957962
#ifdef HAVE_GD_BUNDLED
958963
PHP_FE(imageantialias, arginfo_imageantialias)
959964
PHP_FE(imageflip, arginfo_imageflip)
965+
PHP_FE(imagecrop, arginfo_imagecrop)
960966
PHP_FE(imagecropauto, arginfo_imagecropauto)
961967
#endif
962968

@@ -1218,7 +1224,10 @@ PHP_MINIT_FUNCTION(gd)
12181224
REGISTER_LONG_CONSTANT("IMG_CROP_BLACK", GD_CROP_BLACK, CONST_CS | CONST_PERSISTENT);
12191225
REGISTER_LONG_CONSTANT("IMG_CROP_WHITE", GD_CROP_WHITE, CONST_CS | CONST_PERSISTENT);
12201226
REGISTER_LONG_CONSTANT("IMG_CROP_SIDES", GD_CROP_SIDES, CONST_CS | CONST_PERSISTENT);
1227+
#ifdef GD_ENABLE_CROP_THRESHOLD
12211228
REGISTER_LONG_CONSTANT("IMG_CROP_THRESHOLD", GD_CROP_THRESHOLD, CONST_CS | CONST_PERSISTENT);
1229+
#endif
1230+
12221231
#else
12231232
REGISTER_LONG_CONSTANT("GD_BUNDLED", 0, CONST_CS | CONST_PERSISTENT);
12241233
#endif
@@ -5141,9 +5150,69 @@ PHP_FUNCTION(imageflip)
51415150
}
51425151
/* }}} */
51435152

5153+
/* {{{ proto void imagecrop(resource im, array rect)
5154+
Crop an image using the given coordinates and size, x, y, width and height. */
5155+
PHP_FUNCTION(imagecrop)
5156+
{
5157+
zval *IM;
5158+
long mode = -1;
5159+
long color = -1;
5160+
double threshold = 0.5f;
5161+
gdImagePtr im;
5162+
gdImagePtr im_crop;
5163+
HashTable rect_hash;
5164+
gdRect rect;
5165+
zval **tmp;
51445166

5145-
/* {{{ proto void imageflip(resource im, int mode)
5146-
Flip an image (in place) horizontally, vertically or both directions. */
5167+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|h", &IM, &rect_hash) == FAILURE) {
5168+
return;
5169+
}
5170+
5171+
ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
5172+
5173+
if (zend_hash_find(&rect_hash, "x", strlen("x"), (void **)&tmp) != FAILURE) {
5174+
rect.x = Z_LVAL_PP(tmp);
5175+
} else {
5176+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing x position");
5177+
RETURN_FALSE;
5178+
}
5179+
5180+
if (zend_hash_find(&rect_hash, "y", strlen("x"), (void **)&tmp) != FAILURE) {
5181+
rect.y = Z_LVAL_PP(tmp);
5182+
} else {
5183+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing y position");
5184+
RETURN_FALSE;
5185+
}
5186+
5187+
if (zend_hash_find(&rect_hash, "width", strlen("x"), (void **)&tmp) != FAILURE) {
5188+
rect.width = Z_LVAL_PP(tmp);
5189+
} else {
5190+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing width");
5191+
RETURN_FALSE;
5192+
}
5193+
5194+
if (zend_hash_find(&rect_hash, "height", strlen("x"), (void **)&tmp) != FAILURE) {
5195+
rect.width = Z_LVAL_PP(tmp);
5196+
} else {
5197+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing height");
5198+
RETURN_FALSE;
5199+
}
5200+
5201+
im_crop = gdImageCrop(im, &rect);
5202+
5203+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown flip mode");
5204+
RETURN_FALSE;
5205+
5206+
if (im_crop == NULL) {
5207+
RETURN_FALSE;
5208+
} else {
5209+
ZEND_REGISTER_RESOURCE(return_value, im_crop, le_gd);
5210+
}
5211+
}
5212+
/* }}} */
5213+
5214+
/* {{{ proto void imagecropauto(resource im [, int mode [, threshold [, color]]])
5215+
Crop an image automatically using one of the available modes. */
51475216
PHP_FUNCTION(imagecropauto)
51485217
{
51495218
zval *IM;
@@ -5169,15 +5238,15 @@ PHP_FUNCTION(imagecropauto)
51695238
case GD_CROP_SIDES:
51705239
im_crop = gdImageCropAuto(im, mode);
51715240
break;
5172-
5241+
#ifdef GD_ENABLE_CROP_THRESHOLD
51735242
case GD_CROP_THRESHOLD:
51745243
if (color < 0) {
51755244
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Color argument missing with threshold mode");
51765245
RETURN_FALSE;
51775246
}
51785247
im_crop = gdImageCropThreshold(im, color, (float) threshold);
51795248
break;
5180-
5249+
#endif
51815250
default:
51825251
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown flip mode");
51835252
RETURN_FALSE;

ext/gd/php_gd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ PHP_FUNCTION(imagerotate);
125125
#ifdef HAVE_GD_BUNDLED
126126
PHP_FUNCTION(imageantialias);
127127
PHP_FUNCTION(imageflip);
128+
PHP_FUNCTION(imagecrop);
128129
PHP_FUNCTION(imagecropauto);
129130
#endif
130131

0 commit comments

Comments
 (0)