Added most of remaining functions.

This commit is contained in:
Danack
2021-11-13 21:50:58 +00:00
parent 4d93cb1120
commit e9f76880d4
22 changed files with 1522 additions and 22 deletions
+116
View File
@@ -1499,4 +1499,120 @@ proto bool Imagick::setImageBluePrimary(float x, float y, float z) */
#if IM_HAVE_IMAGICK_WHITEBALANCEIMAGE
public function whiteBalanceImage(): bool {}
#endif
#if IM_HAVE_IMAGICK_DELETE_OPTION
public function deleteOption(string $option): bool {}
#endif
#if IM_HAVE_IMAGICK_GET_BACKGROUND_COLOR
public function getBackgroundColor(): ImagickPixel {}
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_ARTIFACTS
/**
* @return string[]
*/
public function getImageArtifacts(string $pattern = "*"): array {}
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_DISTORTIONS
/**
* metric - MetricType_
* @return float[]
*/
// public function getImageDistortions(int $metric): array{}
// for (j=0; j <= MaxPixelChannels; j++)
// distortion[j]+=channel_distortion[j];
// Use MagickRelinquishMemory() to free the metrics when you are done with them.
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_KURTOSIS
/**
* return [kurtosis:float,skewness: float]
*/
public function getImageKurtosis(): array {}
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_MEAN
/**
* return [$mean, $standard_deviation]
*/
public function getImageMean(): array {}
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_RANGE
/**
* return [minima, float $maxima]
*/
public function getImageRange(): array {}
#endif
#if IM_HAVE_IMAGICK_GET_INTERPOLATE_METHOD
/**
* return int - PixelInterpolateMethod
*/
public function getInterpolateMethod(): int {}
#endif
#if IM_HAVE_IMAGICK_GET_OPTIONS
/**
* return string[]
*/
public function getOptions(string $pattern = "*"): array {}
#endif
#if IM_HAVE_IMAGICK_GET_ORIENTATION
/**
* return int OrientationType
*/
public function getOrientation(): int {}
#endif
#if IM_HAVE_IMAGICK_GET_RESOLUTION
/**
* return [x: float, y: float]
*/
public function getResolution(): array {}
#endif
#if IM_HAVE_IMAGICK_GET_TYPE
/**
* return ImageType
*/
public function getType(): int {}
#endif
#if IM_HAVE_IMAGICK_POLYNOMIAL_IMAGE
//% o number_terms: the number of terms in the list. The actual list length
//% is 2 x number_terms + 1 (the constant).
public function polynomialImage(array $terms): bool {}
#endif
#if IM_HAVE_IMAGICK_SET_DEPTH
public function setDepth(int $depth): bool {}
#endif
#if IM_HAVE_IMAGICK_SET_EXTRACT
//% MagickSetExtract() sets the extract geometry before you read or write an
//% image file. Use it for inline cropping (e.g. 200x200+0+0) or resizing
//% (e.g.200x200).
public function setExtract(string $geometry): bool {}
#endif
#if IM_HAVE_IMAGICK_SET_INTERPOLATE_METHOD
/**
* int $method - PixelInterpolateMethod
*/
public function setInterpolateMethod(int $method): bool{}
#endif
#if IM_HAVE_IMAGICK_SET_ORIENTATION
/**
* $orientation - OrientationType
*/
public function setOrientation(int $orientation): bool {}
#endif
}
+310
View File
@@ -5771,6 +5771,220 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_whiteBalanceImage, 0, 0, 0)
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_DELETE_OPTION
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_deleteOption, 0, 1, _IS_BOOL, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_deleteOption, 0, 0, 1)
#endif
#if PHP_VERSION_ID >= 80000
ZEND_ARG_TYPE_INFO(0, option, IS_STRING, 0)
#else
ZEND_ARG_INFO(0, option)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_BACKGROUND_COLOR
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Imagick_getBackgroundColor, 0, 0, ImagickPixel, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getBackgroundColor, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_ARTIFACTS
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getImageArtifacts, 0, 0, IS_ARRAY, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getImageArtifacts, 0, 0, 0)
#endif
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"*\"")
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_KURTOSIS
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getImageKurtosis, 0, 0, IS_ARRAY, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getImageKurtosis, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_MEAN
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getImageMean, 0, 0, IS_ARRAY, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getImageMean, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_RANGE
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getImageRange, 0, 0, IS_ARRAY, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getImageRange, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_INTERPOLATE_METHOD
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getInterpolateMethod, 0, 0, IS_LONG, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getInterpolateMethod, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_OPTIONS
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getOptions, 0, 0, IS_ARRAY, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getOptions, 0, 0, 0)
#endif
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"*\"")
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_ORIENTATION
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getOrientation, 0, 0, IS_LONG, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getOrientation, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_RESOLUTION
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getResolution, 0, 0, IS_ARRAY, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getResolution, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_TYPE
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_getType, 0, 0, IS_LONG, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_getType, 0, 0, 0)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_POLYNOMIAL_IMAGE
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_polynomialImage, 0, 1, _IS_BOOL, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_polynomialImage, 0, 0, 1)
#endif
#if PHP_VERSION_ID >= 80000
ZEND_ARG_TYPE_INFO(0, terms, IS_ARRAY, 0)
#else
ZEND_ARG_INFO(0, terms)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_DEPTH
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_setDepth, 0, 1, _IS_BOOL, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_setDepth, 0, 0, 1)
#endif
#if PHP_VERSION_ID >= 80000
ZEND_ARG_TYPE_INFO(0, depth, IS_LONG, 0)
#else
ZEND_ARG_INFO(0, depth)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_EXTRACT
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_setExtract, 0, 1, _IS_BOOL, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_setExtract, 0, 0, 1)
#endif
#if PHP_VERSION_ID >= 80000
ZEND_ARG_TYPE_INFO(0, geometry, IS_STRING, 0)
#else
ZEND_ARG_INFO(0, geometry)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_INTERPOLATE_METHOD
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_setInterpolateMethod, 0, 1, _IS_BOOL, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_setInterpolateMethod, 0, 0, 1)
#endif
#if PHP_VERSION_ID >= 80000
ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0)
#else
ZEND_ARG_INFO(0, method)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_ORIENTATION
#if PHP_VERSION_ID >= 80000
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Imagick_setOrientation, 0, 1, _IS_BOOL, 0)
#else
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Imagick_setOrientation, 0, 0, 1)
#endif
#if PHP_VERSION_ID >= 80000
ZEND_ARG_TYPE_INFO(0, orientation, IS_LONG, 0)
#else
ZEND_ARG_INFO(0, orientation)
#endif
ZEND_END_ARG_INFO()
#endif
#if MagickLibVersion > 0x628
ZEND_METHOD(Imagick, optimizeImageLayers);
@@ -6499,6 +6713,54 @@ ZEND_METHOD(Imagick, orderedDitherImage);
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_WHITEBALANCEIMAGE
ZEND_METHOD(Imagick, whiteBalanceImage);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_DELETE_OPTION
ZEND_METHOD(Imagick, deleteOption);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_BACKGROUND_COLOR
ZEND_METHOD(Imagick, getBackgroundColor);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_ARTIFACTS
ZEND_METHOD(Imagick, getImageArtifacts);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_KURTOSIS
ZEND_METHOD(Imagick, getImageKurtosis);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_MEAN
ZEND_METHOD(Imagick, getImageMean);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_RANGE
ZEND_METHOD(Imagick, getImageRange);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_INTERPOLATE_METHOD
ZEND_METHOD(Imagick, getInterpolateMethod);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_OPTIONS
ZEND_METHOD(Imagick, getOptions);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_ORIENTATION
ZEND_METHOD(Imagick, getOrientation);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_RESOLUTION
ZEND_METHOD(Imagick, getResolution);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_TYPE
ZEND_METHOD(Imagick, getType);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_POLYNOMIAL_IMAGE
ZEND_METHOD(Imagick, polynomialImage);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_DEPTH
ZEND_METHOD(Imagick, setDepth);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_EXTRACT
ZEND_METHOD(Imagick, setExtract);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_INTERPOLATE_METHOD
ZEND_METHOD(Imagick, setInterpolateMethod);
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_ORIENTATION
ZEND_METHOD(Imagick, setOrientation);
#endif
static const zend_function_entry class_Imagick_methods[] = {
@@ -7242,6 +7504,54 @@ static const zend_function_entry class_Imagick_methods[] = {
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_WHITEBALANCEIMAGE
ZEND_ME(Imagick, whiteBalanceImage, arginfo_class_Imagick_whiteBalanceImage, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_DELETE_OPTION
ZEND_ME(Imagick, deleteOption, arginfo_class_Imagick_deleteOption, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_BACKGROUND_COLOR
ZEND_ME(Imagick, getBackgroundColor, arginfo_class_Imagick_getBackgroundColor, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_ARTIFACTS
ZEND_ME(Imagick, getImageArtifacts, arginfo_class_Imagick_getImageArtifacts, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_KURTOSIS
ZEND_ME(Imagick, getImageKurtosis, arginfo_class_Imagick_getImageKurtosis, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_MEAN
ZEND_ME(Imagick, getImageMean, arginfo_class_Imagick_getImageMean, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_IMAGE_RANGE
ZEND_ME(Imagick, getImageRange, arginfo_class_Imagick_getImageRange, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_INTERPOLATE_METHOD
ZEND_ME(Imagick, getInterpolateMethod, arginfo_class_Imagick_getInterpolateMethod, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_OPTIONS
ZEND_ME(Imagick, getOptions, arginfo_class_Imagick_getOptions, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_ORIENTATION
ZEND_ME(Imagick, getOrientation, arginfo_class_Imagick_getOrientation, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_RESOLUTION
ZEND_ME(Imagick, getResolution, arginfo_class_Imagick_getResolution, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_GET_TYPE
ZEND_ME(Imagick, getType, arginfo_class_Imagick_getType, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_POLYNOMIAL_IMAGE
ZEND_ME(Imagick, polynomialImage, arginfo_class_Imagick_polynomialImage, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_DEPTH
ZEND_ME(Imagick, setDepth, arginfo_class_Imagick_setDepth, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_EXTRACT
ZEND_ME(Imagick, setExtract, arginfo_class_Imagick_setExtract, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_INTERPOLATE_METHOD
ZEND_ME(Imagick, setInterpolateMethod, arginfo_class_Imagick_setInterpolateMethod, ZEND_ACC_PUBLIC)
#endif
#if MagickLibVersion > 0x628 && IM_HAVE_IMAGICK_SET_ORIENTATION
ZEND_ME(Imagick, setOrientation, arginfo_class_Imagick_setOrientation, ZEND_ACC_PUBLIC)
#endif
ZEND_FE_END
};
+512
View File
@@ -13974,4 +13974,516 @@ PHP_METHOD(Imagick, whiteBalanceImage)
/* }}} */
#endif //IM_HAVE_IMAGICK_WHITEBALANCEIMAGE
#if IM_HAVE_IMAGICK_DELETE_OPTION
/* {{{ proto boolean Imagick::deleteOption(string $option)
*/
PHP_METHOD(Imagick, deleteOption)
{
php_imagick_object *intern;
MagickBooleanType status;
char *option;
IM_LEN_TYPE option_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &option, &option_len) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
if (php_imagick_ensure_not_empty (intern->magick_wand) == 0)
return;
status = MagickDeleteOption(intern->magick_wand, option);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to deleteOption" TSRMLS_CC);
return;
}
RETURN_TRUE;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_BACKGROUND_COLOR
/* {{{ proto int Imagick::getBackgroundColor()
*/
PHP_METHOD(Imagick, getBackgroundColor)
{
php_imagick_object *intern;
ssize_t offset;
php_imagickpixel_object *imagickpixel_object;
PixelWand *pixel_wand;
MagickBooleanType status;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
pixel_wand = MagickGetBackgroundColor(intern->magick_wand);
if (pixel_wand == NULL) {
php_imagick_convert_imagick_exception(intern->magick_wand, "getBackgroundColor" TSRMLS_CC);
return;
}
object_init_ex(return_value, php_imagickpixel_sc_entry);
imagickpixel_object = Z_IMAGICKPIXEL_P(return_value);
php_imagick_replace_pixelwand(imagickpixel_object, pixel_wand);
return;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_ARTIFACTS
/* {{{ proto array Imagick::getImageArtifacts(string $pattern = "*")
*/
PHP_METHOD(Imagick, getImageArtifacts)
{
php_imagick_object *intern;
size_t number_artifacts;
char *pattern = "*";
IM_LEN_TYPE pattern_len;
char **artifacts;
char *artifact_value;
unsigned int i;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &pattern, &pattern_len) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
artifacts = MagickGetImageArtifacts(
intern->magick_wand,
pattern,
&number_artifacts
);
array_init(return_value);
for (i=0; i<number_artifacts; i++) {
artifact_value = MagickGetImageArtifact(intern->magick_wand, artifacts[i]);
if (artifact_value == NULL) {
add_assoc_null(return_value, artifacts[i]);
}
else {
IM_add_assoc_string(return_value, artifacts[i], artifact_value);
MagickRelinquishMemory(artifact_value);
}
}
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_DISTORTIONS
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_KURTOSIS
/* {{{ proto int Imagick::getImageKurtosis()
[kurtosis: float, skewness: float]
*/
PHP_METHOD(Imagick, getImageKurtosis)
{
php_imagick_object *intern;
MagickBooleanType status;
double kurtosis;
double skewness;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
status = MagickGetImageKurtosis(intern->magick_wand, &kurtosis, &skewness);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to getImageKurtosis" TSRMLS_CC);
return;
}
array_init(return_value);
add_assoc_double(return_value, "kurtosis", kurtosis);
add_assoc_double(return_value, "skewness", skewness);
return;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_MEAN
/* {{{ proto int Imagick::getImageMean()
[mean: float, standard_deviation: float]
*/
PHP_METHOD(Imagick, getImageMean)
{
php_imagick_object *intern;
MagickBooleanType status;
double mean;
double standard_deviation;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
status = MagickGetImageMean(intern->magick_wand, &mean, &standard_deviation);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to getImageMean" TSRMLS_CC);
return;
}
array_init(return_value);
add_assoc_double(return_value, "mean", mean);
add_assoc_double(return_value, "standard_deviation", standard_deviation);
return;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_IMAGE_RANGE
/* {{{ proto int Imagick::getImageRange()
[minima: float, maxima: float]
*/
PHP_METHOD(Imagick, getImageRange)
{
php_imagick_object *intern;
MagickBooleanType status;
double minima;
double maxima;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
status = MagickGetImageRange(intern->magick_wand, &minima, &maxima);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to getImageRange" TSRMLS_CC);
return;
}
array_init(return_value);
add_assoc_double(return_value, "minima", minima);
add_assoc_double(return_value, "maxima", maxima);
return;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_INTERPOLATE_METHOD
/* {{{ proto int Imagick::getInterpolateMethod()
*/
PHP_METHOD(Imagick, getInterpolateMethod)
{
php_imagick_object *intern;
PixelInterpolateMethod pixelInterpolateMethod;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
pixelInterpolateMethod = MagickGetInterpolateMethod(intern->magick_wand);
RETVAL_LONG(pixelInterpolateMethod);
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_OPTIONS
/* {{{ proto array Imagick::getOptions(string $pattern = "*")
*/
PHP_METHOD(Imagick, getOptions)
{
php_imagick_object *intern;
size_t number_options;
char *pattern = "*";
IM_LEN_TYPE pattern_len;
char **options;
char *option_value;
unsigned int i;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &pattern, &pattern_len) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
options = MagickGetOptions(
intern->magick_wand,
pattern,
&number_options
);
array_init(return_value);
for (i=0; i<number_options; i++) {
option_value = MagickGetOption(intern->magick_wand, options[i]);
IM_add_assoc_string(return_value, options[i], option_value);
MagickRelinquishMemory(option_value);
}
return;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_ORIENTATION
/* {{{ proto int Imagick::getOrientation()
*/
PHP_METHOD(Imagick, getOrientation)
{
php_imagick_object *intern;
OrientationType orientation;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
orientation = MagickGetOrientation(intern->magick_wand);
RETVAL_LONG(orientation);
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_RESOLUTION
/* {{{ proto int Imagick::getSizeOffset()
[x: float, y: float]
*/
PHP_METHOD(Imagick, getResolution)
{
php_imagick_object *intern;
MagickBooleanType status;
double x;
double y;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
status = MagickGetResolution(intern->magick_wand, &x, &y);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to getResolution" TSRMLS_CC);
return;
}
array_init(return_value);
add_assoc_double(return_value, "x", x);
add_assoc_double(return_value, "y", y);
return;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_GET_TYPE
/* {{{ proto int Imagick::getType()
*/
PHP_METHOD(Imagick, getType)
{
php_imagick_object *intern;
ImageType type;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
type = MagickGetType(intern->magick_wand);
RETVAL_LONG(type);
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_POLYNOMIAL_IMAGE
/* {{{ proto Imagick Imagick::polynomialImage(array $terms)
number_terms: the number of terms in the list. The actual list length
//% is 2 x number_terms + 1 (the constant).
*/
PHP_METHOD(Imagick, polynomialImage)
{
MagickWand *tmp_wand;
php_imagick_object *intern;
zval *terms;
double *terms_double_array;
MagickBooleanType status;
im_long terms_count = 0;
/* Parse parameters given to function */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &terms) == FAILURE) {
return;
}
terms_double_array = php_imagick_zval_to_double_array(terms, &terms_count TSRMLS_CC);
intern = Z_IMAGICK_P(getThis());
if (php_imagick_ensure_not_empty (intern->magick_wand) == 0)
return;
status = MagickSetIteratorIndex(intern->magick_wand, 0);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to polynomialImage, failed to set iterator to zero" TSRMLS_CC);
return;
}
// TODO - sanity check terms_count
status = MagickPolynomialImage(
intern->magick_wand,
terms_count,
terms_double_array
);
efree(terms_double_array);
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to polynomialImage" TSRMLS_CC);
return;
}
RETURN_TRUE;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_SET_DEPTH
/* {{{ proto bool Imagick::setDepth(int depth)
Sets the depth
*/
PHP_METHOD(Imagick, setDepth)
{
php_imagick_object *intern;
im_long depth;
MagickBooleanType status;
/* Parse parameters given to function */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &depth) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
status = MagickSetDepth(intern->magick_wand, depth);
/* No magick is going to happen */
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to setDepth" TSRMLS_CC);
return;
}
RETURN_TRUE;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_SET_EXTRACT
/* {{{ proto bool Imagick::setExtract(string $geometry)
Use it for inline cropping (e.g. 200x200+0+0)
*/
PHP_METHOD(Imagick, setExtract)
{
char *geometry_string;
IM_LEN_TYPE geometry_string_len;
MagickBooleanType status;
php_imagick_object *intern;
/* Parse parameters given to function */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &geometry_string, &geometry_string_len) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
// if (php_imagick_ensure_not_empty (intern->magick_wand) == 0)
// return;
status = MagickSetExtract(intern->magick_wand, geometry_string);
/* No magick is going to happen */
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to setExtract" TSRMLS_CC);
return;
}
RETURN_TRUE;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_SET_INTERPOLATE_METHOD
/* {{{ proto bool Imagick::setInterpolateMethod(int method)
Sets the interpolate pixel method.
*/
PHP_METHOD(Imagick, setInterpolateMethod)
{
php_imagick_object *intern;
im_long interpolate;
MagickBooleanType status;
/* Parse parameters given to function */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &interpolate) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
// if (php_imagick_ensure_not_empty (intern->magick_wand) == 0)
// return;
status = MagickSetInterpolateMethod(intern->magick_wand, interpolate);
/* No magick is going to happen */
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to setInterpolateMethod" TSRMLS_CC);
return;
}
RETURN_TRUE;
}
/* }}} */
#endif
#if IM_HAVE_IMAGICK_SET_ORIENTATION
/* {{{ proto bool Imagick::setOrientation(int orientation)
*/
PHP_METHOD(Imagick, setOrientation)
{
php_imagick_object *intern;
MagickBooleanType status;
im_long orientation_type;
/* Parse parameters given to function */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &orientation_type) == FAILURE) {
return;
}
intern = Z_IMAGICK_P(getThis());
if (php_imagick_ensure_not_empty (intern->magick_wand) == 0)
return;
status = MagickSetOrientation(intern->magick_wand, orientation_type);
/* No magick is going to happen */
if (status == MagickFalse) {
php_imagick_convert_imagick_exception(intern->magick_wand, "Unable to setOrientation" TSRMLS_CC);
return;
}
RETURN_TRUE;
}
/* }}} */
#endif
/* end of Imagick */
+17
View File
@@ -1989,6 +1989,23 @@ IMAGICK_REGISTER_CONST_LONG("COMPLEX_OPERATOR_REALIMAGINARY", RealImaginaryCompl
IMAGICK_REGISTER_CONST_LONG("COMPLEX_OPERATOR_SUBTRACT", SubtractComplexOperator);
#endif
#if MagickLibVersion >= 0x702
// ImageType
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_BILEVEL", BilevelType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_GRAYSCALE", GrayscaleType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_GRAYSCALE_ALPHA", GrayscaleAlphaType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_PALETTE", PaletteType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_PALETTE_ALPHA", PaletteAlphaType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_TRUE_COLOR", TrueColorType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_TRUE_COLOR_ALPHA", TrueColorAlphaType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_COLOR_SEPARATION", ColorSeparationType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_COLOR_SEPARATION_ALPHA", ColorSeparationAlphaType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_OPTIMIZE", OptimizeType);
IMAGICK_REGISTER_CONST_LONG("IMAGE_TYPE_PALETTE_BILEVEL_ALPHA", PaletteBilevelAlphaType);
#endif
#undef IMAGICK_REGISTER_CONST_LONG
#undef IMAGICK_REGISTER_CONST_STRING
+68
View File
@@ -102,6 +102,74 @@
#define IM_HAVE_IMAGICK_ADD_NOISE_WITH_ATTENUATE 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_DELETE_OPTION 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_BACKGROUND_COLOR 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_IMAGE_ARTIFACTS 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_IMAGE_DISTORTIONS 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_IMAGE_KURTOSIS 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_IMAGE_MEAN 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_IMAGE_RANGE 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_INTERPOLATE_METHOD 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_OPTIONS 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_ORIENTATION 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_RESOLUTION 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_GET_TYPE 1
#endif
#if MagickLibVersion >= 0x709
#define IM_HAVE_IMAGICK_POLYNOMIAL_IMAGE 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_SET_DEPTH 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_SET_EXTRACT 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_SET_INTERPOLATE_METHOD 1
#endif
#if MagickLibVersion >= 0x701
#define IM_HAVE_IMAGICK_SET_ORIENTATION 1
#endif
#if MagickLibVersion >= 0x70A
// Technically, this may be available earlier, but the behaviour around
// default mask changed.
@@ -35,6 +35,8 @@ function setImageArtifact() {
if (strlen($bytes) <= 0) { echo "Failed to generate image.";}
}
echo "Fail - need to check setImageArtifact with null \n";
setImageArtifact() ;
echo "Ok";
?>
+32
View File
@@ -0,0 +1,32 @@
--TEST--
Test Imagick, getBackgroundColor
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getBackgroundColor'));
?>
--FILE--
<?php
function getBackgroundColor() {
$imagick = new \Imagick();
$background_color = $imagick->getBackgroundColor();
/** @var $background_color \ImagickPixel */
echo "Color is: " . $background_color->getColorAsString() . "\n";
$imagick->setBackgroundColor('red');
$background_color = $imagick->getBackgroundColor();
/** @var $background_color \ImagickPixel */
echo "Color is now: " . $background_color->getColorAsString() . "\n";
}
getBackgroundColor() ;
echo "Ok";
?>
--EXPECTF--
Color is: srgb(255,255,255)
Color is now: srgb(255,0,0)
Ok
+78
View File
@@ -0,0 +1,78 @@
--TEST--
Test Imagick, getImageArtifacts
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getImageArtifacts'));
?>
--FILE--
<?php
function getImageArtifacts() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$artifacts = $imagick->getImageArtifacts();
foreach ($artifacts as $key => $value) {
if ($value === null) {
echo "$key is null\n";
}
else {
echo "$key = $value\n";
}
}
$imagick->getImageBlob();
}
getImageArtifacts();
echo "Ok";
?>
--EXPECTF--
aux:Firmware is null
aux:FlashCompensation is null
aux:ImageNumber is null
aux:Lens is null
aux:LensID is null
aux:SerialNumber is null
date:create is null
date:modify is null
exif:ApertureValue is null
exif:BodySerialNumber is null
exif:ColorSpace is null
exif:CustomRendered is null
exif:DateTime is null
exif:DateTimeDigitized is null
exif:DateTimeOriginal is null
exif:ExifOffset is null
exif:ExifVersion is null
exif:ExposureBiasValue is null
exif:ExposureMode is null
exif:ExposureProgram is null
exif:ExposureTime is null
exif:Flash is null
exif:FNumber is null
exif:FocalLength is null
exif:FocalPlaneResolutionUnit is null
exif:FocalPlaneXResolution is null
exif:FocalPlaneYResolution is null
exif:LensModel is null
exif:LensSpecification is null
exif:Make is null
exif:MaxApertureValue is null
exif:MeteringMode is null
exif:Model is null
exif:Orientation is null
exif:PhotographicSensitivity is null
exif:PixelXDimension is null
exif:PixelYDimension is null
exif:ResolutionUnit is null
exif:SceneCaptureType is null
exif:ShutterSpeedValue is null
exif:Software is null
exif:WhiteBalance is null
exif:XResolution is null
exif:YResolution is null
jpeg:colorspace is null
jpeg:sampling-factor is null
photoshop:DateCreated is null
Ok
+27
View File
@@ -0,0 +1,27 @@
--TEST--
Test Imagick, getImageKurtosis
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getImageKurtosis'));
?>
--FILE--
<?php
require_once(__DIR__ . '/functions.inc');
function getImageKurtosis() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$values = $imagick->getImageKurtosis();
check_value($values, "kurtosis", -0.9379261035010518);
check_value($values, "skewness", 0.4562517200972045);
}
getImageKurtosis() ;
echo "Ok";
?>
--EXPECTF--
Value for 'kurtosis' is %f which is close enough to expected %f
Value for 'skewness' is %f which is close enough to expected %f
Ok
+27
View File
@@ -0,0 +1,27 @@
--TEST--
Test Imagick, getImageMean
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getImageMean'));
?>
--FILE--
<?php
require_once(__DIR__ . '/functions.inc');
function getImageMean() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$values = $imagick->getImageMean();
check_value($values, "mean", 29267.518515000003);
check_value($values, "standard_deviation", 18075.35838235082);
}
getImageMean();
echo "Ok";
?>
--EXPECTF--
Value for 'mean' is %f which is close enough to expected %f
Value for 'standard_deviation' is %f which is close enough to expected %f
Ok
+28
View File
@@ -0,0 +1,28 @@
--TEST--
Test Imagick, getImageRange
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getImageRange'));
?>
--FILE--
<?php
require_once(__DIR__ . '/functions.inc');
function getImageRange() {
$imagick = new \Imagick();
$imagick->newPseudoImage(320, 240, "gradient:red-blue");
$values = $imagick->getImageRange();
check_value($values, "minima", 0);
check_value($values, "maxima", 65535.0);
}
getImageRange() ;
echo "Ok";
?>
--EXPECTF--
Value for 'minima' is %f which is close enough to expected %f
Value for 'maxima' is %f which is close enough to expected %f
Ok
@@ -0,0 +1,31 @@
--TEST--
Test Imagick, getInterpolateMethod/setInterpolateMethod
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getInterpolateMethod'));
?>
--FILE--
<?php
function getInterpolateMethod() {
$imagick = new \Imagick();
$value = $imagick->getInterpolateMethod();
echo "Interpolate method is " . $value . "\n";
$imagick->newPseudoImage(640, 480, "gradient:red-blue");
$imagick->setInterpolateMethod(Imagick::INTERPOLATE_BILINEAR);
$value = $imagick->getInterpolateMethod();
echo "Interpolate method is now " . $value . "\n";
}
getInterpolateMethod() ;
echo "Ok";
?>
--EXPECTF--
Interpolate method is 0
Interpolate method is now 5
Ok
+43
View File
@@ -0,0 +1,43 @@
--TEST--
Test Imagick, getOptions
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getOptions'));
?>
--FILE--
<?php
function getOptions() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$result = $imagick->getOptions();
if ($result !== []) {
echo "unexpected contents of options:\n";
var_dump($result);
}
$imagick->setOption("jpeg:preserve", "yes");
$result = $imagick->getOptions();
$expected = ["jpeg:preserve" => "yes"];
if ($result !== $expected) {
echo "unexpected contents of options:\n";
var_dump($result);
}
$imagick->deleteOption("jpeg:preserve");
$result = $imagick->getOptions();
if ($result !== []) {
echo "unexpected contents of options, failed to delete the set one:\n";
var_dump($result);
}
}
getOptions() ;
echo "Ok";
?>
--EXPECTF--
Ok
+28
View File
@@ -0,0 +1,28 @@
--TEST--
Test Imagick, getOrientation/setOrientation
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getOrientation'));
?>
--FILE--
<?php
function getOrientation() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$orientation = $imagick->getOrientation();
echo "Orientation is $orientation\n";
$imagick->setOrientation(Imagick::ORIENTATION_LEFTBOTTOM);
$orientation = $imagick->getOrientation();
echo "Orientation is now $orientation\n";
}
getOrientation() ;
echo "Ok";
?>
--EXPECTF--
Orientation is 0
Orientation is now 8
Ok
+35
View File
@@ -0,0 +1,35 @@
--TEST--
Test Imagick, getResolution
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getResolution'));
?>
--FILE--
<?php
function getResolution() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$result = $imagick->getResolution();
echo "x is " . $result['x'] . "\n";
echo "y is " . $result['y'] . "\n";
$imagick->setResolution(120, 60);
$result = $imagick->getResolution();
echo "x is now " . $result['x'] . "\n";
echo "y is now " . $result['y'] . "\n";
$imagick->getImageBlob();
}
getResolution() ;
echo "Ok";
?>
--EXPECTF--
x is 72
y is 72
x is now 120
y is now 60
Ok
+23
View File
@@ -0,0 +1,23 @@
--TEST--
Test Imagick, getType
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('getType'));
?>
--FILE--
<?php
function test_getType() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$type = $imagick->getType();
echo "Type is " . $type . "\n";
}
test_getType() ;
echo "Ok";
?>
--EXPECTF--
Type is 0
Ok
+34
View File
@@ -0,0 +1,34 @@
--TEST--
Test Imagick, polynomialImage
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('polynomialImage'));
?>
--FILE--
<?php
function polynomialImage() {
$imagick = new \Imagick(__DIR__ . '/Biter_500.jpg');
$imagick_gradient = new \Imagick();
$imagick_gradient->newPseudoImage(
$imagick->getImageWidth(),
$imagick->getImageHeight(),
"gradient:black-white"
);
$imagick->addImage($imagick_gradient);
$terms = [1, 1, 0.1, 0.1];
// is 2 x (number_terms + 1 (the constant).
$imagick->polynomialImage($terms);
$imagick->writeImage(__DIR__ . '/polynomialImage_output_image.png');
$imagick->getImageBlob();
}
polynomialImage() ;
echo "Ok";
?>
--EXPECTF--
Ok
+27
View File
@@ -0,0 +1,27 @@
--TEST--
Test Imagick, setDepth
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('setDepth'));
?>
--FILE--
<?php
function setDepth() {
$imagick = new \Imagick();
$imagick->setDepth(16);
$imagick->newPseudoImage(640, 480, "gradient:red-blue");
echo "Depth is " .$imagick->getImageDepth() . "\n";
$imagick->getImageBlob();
}
setDepth() ;
echo "Ok";
?>
--EXPECTF--
Depth is 16
Ok
+33
View File
@@ -0,0 +1,33 @@
--TEST--
Test Imagick, setExtract
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
checkClassMethods('Imagick', array('setExtract'));
?>
--FILE--
<?php
function setExtract() {
$imagick = new \Imagick();
$imagick->setExtract("300x200+0+0");
$imagick->readImage(__DIR__ . '/Biter_500.jpg');
// $data = $imagick->getImageBlob();
//
// $new_imagick = new Imagick();
// $new_imagick->readImageBlob($data);
echo "Width is " . $imagick->getImageWidth() . "\n";
echo "Height is " . $imagick->getImageHeight() . "\n";
}
setExtract() ;
echo "Ok";
?>
--EXPECTF--
Width is 300
Height is 200
Ok
+24
View File
@@ -110,3 +110,27 @@ function setFontForImagickDraw(\ImagickDraw $imagickDraw)
$imagickDraw->setFont($font);
}
function check_value(array $values, $name, $expected_value)
{
if (array_key_exists($name, $values) !== true) {
$message = "Expected key '$name' not set. Array contains:\n";
$message .= var_export($values, true);
throw new \Exception($message);
}
$value = $values[$name];
$epsilon = 0.01;
if (($value < $expected_value - $epsilon) || ($value > $expected_value + $epsilon)) {
$message = "Value for $name doesn't match expected. Expected: $expected_value, actual: $value";
throw new \Exception($message);
}
echo "Value for '$name' is $value which is close enough to expected $expected_value\n";
}
+25 -21
View File
@@ -118,6 +118,10 @@ $unsupportedMethods = [
"IsMagickWandInstantiated",
"IsPixelIterator",
"IsWandView",
// Yeah, no: https://www.zdnet.com/article/london-protesters-slam-us-copyright-laws/
"MagickSetPassphrase",
];
// "MagickConnectedComponentsImage", // MagickBooleanType MagickConnectedComponentsImage(MagickWand *wand, const size_t connectivity,CCObjectInfo **objects)
@@ -125,28 +129,28 @@ $unsupportedMethods = [
$todoList = [
"DrawGetTypeMetrics",
"MagickConnectedComponentsImage",
"MagickDeleteImageProperty",
"MagickDeleteOption",
"MagickGetBackgroundColor",
// "MagickDeleteImageProperty" // er, we seem to call DeleteImageProperty directly.
// "MagickDeleteOption",
// "MagickGetBackgroundColor",
"MagickGetExceptionType",
"MagickGetImageArtifacts",
"MagickGetImageDistortions",
"MagickGetImageFeatures",
"MagickGetImageKurtosis",
"MagickGetImageMean",
"MagickGetImageRange",
"MagickGetInterpolateMethod",
"MagickGetOptions",
"MagickGetOrientation",
"MagickGetResolution",
"MagickGetType",
"MagickPolynomialImage",
"MagickSetDepth",
"MagickSetExtract",
"MagickSetInterpolateMethod",
"MagickSetOrientation",
"MagickSetPassphrase",
"MagickSetProgressMonitor",
// "MagickGetImageArtifacts",
// "MagickGetImageDistortions",
// "MagickGetImageFeatures",
// "MagickGetImageKurtosis",
// "MagickGetImageMean",
// "MagickGetImageRange",
// "MagickGetInterpolateMethod",
// "MagickGetOptions",
// "MagickGetOrientation",
// "MagickGetResolution",
// "MagickGetType",
// "MagickPolynomialImage",
// "MagickSetDepth",
// "MagickSetExtract",
// "MagickSetInterpolateMethod",
// "MagickSetOrientation",
//
// "MagickSetProgressMonitor",
"MagickSetSecurityPolicy",
"PixelGetIteratorExceptionType",
];
+2 -1
View File
@@ -187,7 +187,7 @@ else if (file_exists($directory.'/'.'MagickCore') == true) {
'PreviewType',
],
'MagickCore/fourier.h' => [
'ComplexOperator', // used by ComplexImages - not exposed in wand api
'ComplexOperator',
],
'MagickCore/geometry.h' => [
// 'GeometryFlags', this is a nightmare of an 'enum'
@@ -199,6 +199,7 @@ else if (file_exists($directory.'/'.'MagickCore') == true) {
'InterlaceType',
'OrientationType',
'ResolutionType',
'ImageType',
//'TransmitType',
],
'MagickCore/layer.h' => [