com php-src: Add PHP bindings for setting and getting the image resolution: ext/gd/gd.c ext/gd/php_gd.h ext/gd/tests/imageresolution _jpeg.phpt
ext/gd/tests/imageresolution_png.phpt

From: Date: Mon, 17 Oct 2016 23:53:39 +0000
Subject: com php-src: Add PHP bindings for setting and getting the image resolution: ext/gd/gd.c ext/gd/php_gd.h ext/gd/tests/imageresolution _jpeg.phpt
ext/gd/tests/imageresolution_png.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-95234@lists.php.net to get a copy of this message
Commit: 209d4220d53bce6f4ac4d69a2781e98f47e17710 Author: Christoph M. Becker <cmbecker69@gmx.de> Mon, 19 Sep 2016 22:48:22 +0200 Parents: 932c20fb8d7d1b94c1615c8f0cb958f67bc24c53 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=209d4220d53bce6f4ac4d69a2781e98f47e17710 Log: Add PHP bindings for setting and getting the image resolution We expose the image resolution related GD functionality to userland by introducing imageresolution() as getter/setter. Given only the image argument, it returns the current resolution as indexed array. Given only a second argument, it sets the horizontal and vertical resolution to this value. Given three arguments, it sets the horizontal and vertical resolution to the given arguments, respectively. Changed paths: M ext/gd/gd.c M ext/gd/php_gd.h A ext/gd/tests/imageresolution_jpeg.phpt A ext/gd/tests/imageresolution_png.phpt Diff: diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 6cfcce8...5ed7744 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -821,6 +821,12 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagesetinterpolation, 0) ZEND_ARG_INFO(0, method) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_imageresolution, 0, 0, 1) + ZEND_ARG_INFO(0, im) + ZEND_ARG_INFO(0, res_x) + ZEND_ARG_INFO(0, res_y) +ZEND_END_ARG_INFO() + /* }}} */ /* {{{ gd_functions[] @@ -965,6 +971,8 @@ const zend_function_entry gd_functions[] = { PHP_FE(imagefilter, arginfo_imagefilter) PHP_FE(imageconvolution, arginfo_imageconvolution) + PHP_FE(imageresolution, arginfo_imageresolution) + PHP_FE_END }; /* }}} */ @@ -4991,6 +4999,37 @@ PHP_FUNCTION(imagesetinterpolation) } /* }}} */ +/* {{{ proto array imageresolution(resource im [, res_x, [res_y]]) + Get or set the resolution of the image in DPI. */ +PHP_FUNCTION(imageresolution) +{ + zval *IM; + gdImagePtr im; + zend_long res_x = GD_RESOLUTION, res_y = GD_RESOLUTION; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|ll", &IM, &res_x, &res_y) == FAILURE) { + return; + } + + if ((im = (gdImagePtr)zend_fetch_resource(Z_RES_P(IM), "Image", le_gd)) == NULL) { + RETURN_FALSE; + } + + switch (ZEND_NUM_ARGS()) { + case 3: + gdImageSetResolution(im, res_x, res_y); + RETURN_TRUE; + case 2: + gdImageSetResolution(im, res_x, res_x); + RETURN_TRUE; + default: + array_init(return_value); + add_next_index_long(return_value, gdImageResolutionX(im)); + add_next_index_long(return_value, gdImageResolutionY(im)); + } +} +/* }}} */ + /* * Local variables: * tab-width: 4 diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h index 19e7063..3363283 100644 --- a/ext/gd/php_gd.h +++ b/ext/gd/php_gd.h @@ -198,6 +198,8 @@ PHP_FUNCTION(imagexbm); PHP_FUNCTION(imagefilter); PHP_FUNCTION(imageconvolution); +PHP_FUNCTION(imageresolution); + PHP_GD_API int phpi_get_le_gd(void); #else diff --git a/ext/gd/tests/imageresolution_jpeg.phpt b/ext/gd/tests/imageresolution_jpeg.phpt new file mode 100644 index 0000000..a659e268 --- /dev/null +++ b/ext/gd/tests/imageresolution_jpeg.phpt @@ -0,0 +1,43 @@ +--TEST-- +Set and get image resolution of JPEG images +--SKIPIF-- +<?php +if (!extension_loaded('gd')) die('skip gd extension not available'); +if (!(imagetypes() & IMG_JPEG)) die('skip JPEG support not available'); +?> +--FILE-- +<?php +$filename = __DIR__ . DIRECTORY_SEPARATOR . 'imageresolution_jpeg.jpeg'; + +$exp = imagecreate(100, 100); +imagecolorallocate($exp, 255, 0, 0); + +imageresolution($exp, 71); +imagejpeg($exp, $filename); +$act = imagecreatefromjpeg($filename); +var_dump(imageresolution($act)); + +imageresolution($exp, 71, 299); +imagejpeg($exp, $filename); +$act = imagecreatefromjpeg($filename); +var_dump(imageresolution($act)); +?> +===DONE=== +--EXPECT-- +array(2) { + [0]=> + int(71) + [1]=> + int(71) +} +array(2) { + [0]=> + int(71) + [1]=> + int(299) +} +===DONE=== +--CLEAN-- +<?php +@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'imageresolution_jpeg.jpeg'); +?> diff --git a/ext/gd/tests/imageresolution_png.phpt b/ext/gd/tests/imageresolution_png..phpt new file mode 100644 index 0000000..5bb835b --- /dev/null +++ b/ext/gd/tests/imageresolution_png.phpt @@ -0,0 +1,42 @@ +--TEST-- +Set and get image resolution of PNG images +--SKIPIF-- +<?php +if (!extension_loaded('gd')) die('skip gd extension not available'); +?> +--FILE-- +<?php +$filename = __DIR__ . DIRECTORY_SEPARATOR . 'imageresolution_png.png'; + +$exp = imagecreate(100, 100); +imagecolorallocate($exp, 255, 0, 0); + +imageresolution($exp, 71); +imagepng($exp, $filename); +$act = imagecreatefrompng($filename); +var_dump(imageresolution($act)); + +imageresolution($exp, 71, 299); +imagepng($exp, $filename); +$act = imagecreatefrompng($filename); +var_dump(imageresolution($act)); +?> +===DONE=== +--EXPECT-- +array(2) { + [0]=> + int(71) + [1]=> + int(71) +} +array(2) { + [0]=> + int(71) + [1]=> + int(299) +} +===DONE=== +--CLEAN-- +<?php +@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'imageresolution_png.png'); +?>

« previous php.cvs (#95234) next »