|
|
@@ -0,0 +1,702 @@ |
|
|
|
/* |
|
|
|
* php-pipi Php binding for Libpipi |
|
|
|
* Copyright (c) 2008 Vion Nicolas <nico@picapo.net> |
|
|
|
* |
|
|
|
* |
|
|
|
* This library is free software. It comes without any warranty, to |
|
|
|
* the extent permitted by applicable law. You can redistribute it |
|
|
|
* and/or modify it under the terms of the Do What The Fuck You Want |
|
|
|
* To Public License, Version 2, as published by Sam Hocevar. See |
|
|
|
* http://sam.zoy.org/wtfpl/COPYING for more details. |
|
|
|
*/ |
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H |
|
|
|
#include "config.h" |
|
|
|
#endif |
|
|
|
|
|
|
|
#include "php.h" |
|
|
|
#include "php_pipi.h" |
|
|
|
|
|
|
|
static function_entry pipi_functions[] = { |
|
|
|
PHP_FE(pipi_get_color_from_string, NULL) |
|
|
|
PHP_FE(pipi_get_version, NULL) |
|
|
|
PHP_FE(pipi_create_context, NULL) |
|
|
|
PHP_FE(pipi_get_command_list, NULL) |
|
|
|
PHP_FE(pipi_command, NULL) |
|
|
|
PHP_FE(pipi_load, NULL) |
|
|
|
PHP_FE(pipi_load_stock, NULL) |
|
|
|
PHP_FE(pipi_new, NULL) |
|
|
|
PHP_FE(pipi_copy, NULL) |
|
|
|
PHP_FE(pipi_save, NULL) |
|
|
|
PHP_FE(pipi_set_gamma, NULL) |
|
|
|
PHP_FE(pipi_getpixels, NULL) |
|
|
|
PHP_FE(pipi_get_image_width, NULL) |
|
|
|
PHP_FE(pipi_get_image_height, NULL) |
|
|
|
PHP_FE(pipi_get_image_pitch, NULL) |
|
|
|
PHP_FE(pipi_get_image_last_modified, NULL) |
|
|
|
PHP_FE(pipi_get_format_name, NULL) |
|
|
|
PHP_FE(pipi_measure_msd, NULL) |
|
|
|
PHP_FE(pipi_measure_rmsd, NULL) |
|
|
|
PHP_FE(pipi_resize, NULL) |
|
|
|
PHP_FE(pipi_render_random, NULL) |
|
|
|
PHP_FE(pipi_render_bayer, NULL) |
|
|
|
PHP_FE(pipi_render_halftone, NULL) |
|
|
|
PHP_FE(pipi_rgb, NULL) |
|
|
|
PHP_FE(pipi_red, NULL) |
|
|
|
PHP_FE(pipi_green, NULL) |
|
|
|
PHP_FE(pipi_blue, NULL) |
|
|
|
PHP_FE(pipi_mean, NULL) |
|
|
|
PHP_FE(pipi_min, NULL) |
|
|
|
PHP_FE(pipi_max, NULL) |
|
|
|
PHP_FE(pipi_add, NULL) |
|
|
|
PHP_FE(pipi_sub, NULL) |
|
|
|
PHP_FE(pipi_difference, NULL) |
|
|
|
PHP_FE(pipi_multiply, NULL) |
|
|
|
PHP_FE(pipi_divide, NULL) |
|
|
|
PHP_FE(pipi_screen, NULL) |
|
|
|
PHP_FE(pipi_overlay, NULL) |
|
|
|
PHP_FE(pipi_convolution, NULL) |
|
|
|
PHP_FE(pipi_gaussian_blur, NULL) |
|
|
|
PHP_FE(pipi_gaussian_blur_ext, NULL) |
|
|
|
PHP_FE(pipi_box_blur, NULL) |
|
|
|
PHP_FE(pipi_box_blur_ext, NULL) |
|
|
|
PHP_FE(pipi_brightness, NULL) |
|
|
|
PHP_FE(pipi_contrast, NULL) |
|
|
|
PHP_FE(pipi_autocontrast, NULL) |
|
|
|
PHP_FE(pipi_invert, NULL) |
|
|
|
PHP_FE(pipi_threshold, NULL) |
|
|
|
PHP_FE(pipi_hflip, NULL) |
|
|
|
PHP_FE(pipi_vflip, NULL) |
|
|
|
PHP_FE(pipi_rotate90, NULL) |
|
|
|
PHP_FE(pipi_rotate180, NULL) |
|
|
|
PHP_FE(pipi_rotate270, NULL) |
|
|
|
PHP_FE(pipi_median, NULL) |
|
|
|
PHP_FE(pipi_median_ext, NULL) |
|
|
|
PHP_FE(pipi_dilate, NULL) |
|
|
|
PHP_FE(pipi_erode, NULL) |
|
|
|
PHP_FE(pipi_order, NULL) |
|
|
|
PHP_FE(pipi_tile, NULL) |
|
|
|
PHP_FE(pipi_flood_fill, NULL) |
|
|
|
PHP_FE(pipi_draw_line, NULL) |
|
|
|
PHP_FE(pipi_draw_polyline, NULL) |
|
|
|
PHP_FE(pipi_draw_bezier4, NULL) |
|
|
|
PHP_FE(pipi_reduce, NULL) |
|
|
|
PHP_FE(pipi_dither_ediff, NULL) |
|
|
|
PHP_FE(pipi_dither_ordered, NULL) |
|
|
|
PHP_FE(pipi_dither_ordered_ext, NULL) |
|
|
|
PHP_FE(pipi_dither_halftone, NULL) |
|
|
|
PHP_FE(pipi_dither_random, NULL) |
|
|
|
PHP_FE(pipi_dither_ostromoukhov, NULL) |
|
|
|
PHP_FE(pipi_dither_dbs, NULL) |
|
|
|
PHP_FE(pipi_dither_24to16, NULL) |
|
|
|
PHP_FE(pipi_new_histogram, NULL) |
|
|
|
PHP_FE(pipi_get_image_histogram, NULL) |
|
|
|
PHP_FE(pipi_render_histogram, NULL) |
|
|
|
|
|
|
|
{NULL, NULL, NULL} |
|
|
|
}; |
|
|
|
|
|
|
|
zend_module_entry pipi_module_entry = { |
|
|
|
#if ZEND_MODULE_API_NO >= 20010901 |
|
|
|
STANDARD_MODULE_HEADER, |
|
|
|
#endif |
|
|
|
PHP_PIPI_EXTNAME, |
|
|
|
pipi_functions, |
|
|
|
PHP_MINIT(pipi), |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
|
PHP_MINFO(pipi), |
|
|
|
#if ZEND_MODULE_API_NO >= 20010901 |
|
|
|
PHP_PIPI_VERSION, |
|
|
|
#endif |
|
|
|
STANDARD_MODULE_PROPERTIES |
|
|
|
}; |
|
|
|
|
|
|
|
#ifdef COMPILE_DL_PIPI |
|
|
|
ZEND_GET_MODULE(pipi) |
|
|
|
#endif |
|
|
|
|
|
|
|
PHP_MINFO_FUNCTION(pipi) { |
|
|
|
php_info_print_table_start(); |
|
|
|
php_info_print_table_row(2, "Pipi library version", pipi_get_version()); |
|
|
|
php_info_print_table_end(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//--------PIPI'S RESSOURCES---------// |
|
|
|
|
|
|
|
static void php_pipi_image_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { |
|
|
|
pipi_free(rsrc->ptr); |
|
|
|
} |
|
|
|
|
|
|
|
static void php_pipi_context_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { |
|
|
|
pipi_destroy_context(rsrc->ptr); |
|
|
|
} |
|
|
|
|
|
|
|
static void php_pipi_histogram_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { |
|
|
|
pipi_free_histogram(rsrc->ptr); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_MINIT_FUNCTION(pipi) { |
|
|
|
le_pipi_image = zend_register_list_destructors_ex(php_pipi_image_dtor, NULL, PHP_PIPI_IMAGE_RES_NAME, module_number); |
|
|
|
le_pipi_context = zend_register_list_destructors_ex(php_pipi_context_dtor, NULL, PHP_PIPI_CONTEXT_RES_NAME, module_number); |
|
|
|
le_pipi_histogram = zend_register_list_destructors_ex(php_pipi_histogram_dtor, NULL, PHP_PIPI_HISTOGRAM_RES_NAME, module_number); |
|
|
|
return SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
//----------SOMEMACROS---------------// |
|
|
|
|
|
|
|
#define FETCH_STR(str) \ |
|
|
|
int __len; \ |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &__len) == FAILURE) { \ |
|
|
|
RETURN_FALSE; \ |
|
|
|
} |
|
|
|
|
|
|
|
#define FETCH_LONG(l) \ |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &l) == FAILURE) { \ |
|
|
|
RETURN_FALSE; \ |
|
|
|
} |
|
|
|
|
|
|
|
#define FETCH_IMG(img) \ |
|
|
|
zval *_zval; \ |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \ |
|
|
|
RETURN_FALSE; \ |
|
|
|
} \ |
|
|
|
ZEND_FETCH_RESOURCE(img, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
#define FETCH_IMG_IMG(img1, img2) \ |
|
|
|
zval *_zval1; \ |
|
|
|
zval *_zval2; \ |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &_zval1, &_zval2) == FAILURE) { \ |
|
|
|
RETURN_FALSE; \ |
|
|
|
} \ |
|
|
|
ZEND_FETCH_RESOURCE(img1, pipi_image_t*, &_zval1, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); \ |
|
|
|
ZEND_FETCH_RESOURCE(img2, pipi_image_t*, &_zval2, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--------PIPI'S FUNCTIONS---------// |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_color_from_string) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_version) { |
|
|
|
RETURN_STRING(estrdup(pipi_get_version()), 0); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_create_context) { |
|
|
|
pipi_context_t *context; |
|
|
|
context = pipi_create_context(); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, context, le_pipi_context); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_command_list) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_command) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_load) { |
|
|
|
char *str; |
|
|
|
FETCH_STR(str); |
|
|
|
pipi_image_t *img; |
|
|
|
img = pipi_load(str); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_load_stock) { |
|
|
|
char *str; |
|
|
|
FETCH_STR(str); |
|
|
|
pipi_image_t *img; |
|
|
|
img = pipi_load_stock(str); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_new) { |
|
|
|
long width = 0; |
|
|
|
long height = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *img; |
|
|
|
img = pipi_new(width, height); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_copy) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_copy(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_save) { |
|
|
|
zval *res; |
|
|
|
char *str; |
|
|
|
int str_len; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &res, &str, &str_len) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
|
|
|
|
pipi_image_t *img; |
|
|
|
ZEND_FETCH_RESOURCE(img, pipi_image_t*, &res, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
RETURN_LONG(pipi_save(img, str)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_set_gamma) { |
|
|
|
long value; |
|
|
|
FETCH_LONG(value); |
|
|
|
pipi_set_gamma(value); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_getpixels) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_image_width) { |
|
|
|
pipi_image_t *img; |
|
|
|
FETCH_IMG(img); |
|
|
|
RETURN_LONG(pipi_get_image_width(img)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_image_height) { |
|
|
|
pipi_image_t *img; |
|
|
|
FETCH_IMG(img); |
|
|
|
RETURN_LONG(pipi_get_image_height(img)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_image_pitch) { |
|
|
|
pipi_image_t *img; |
|
|
|
FETCH_IMG(img); |
|
|
|
RETURN_LONG(pipi_get_image_pitch(img)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_image_last_modified) { |
|
|
|
pipi_image_t *img; |
|
|
|
FETCH_IMG(img); |
|
|
|
RETURN_LONG(pipi_get_image_last_midified(img)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_format_name) { |
|
|
|
long id; |
|
|
|
FETCH_LONG(id); |
|
|
|
RETURN_STRING(estrdup(pipi_get_format_name(id)), 0); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_measure_msd) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
RETURN_LONG(pipi_measure_msd(img1, img2)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_measure_rmsd) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
RETURN_LONG(pipi_measure_rmsd(img1, img2)); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_resize) { |
|
|
|
zval *_zval; |
|
|
|
long width = 0; |
|
|
|
long height = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &width, &height) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *src; |
|
|
|
ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_resize(src, width, height); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_render_random) { |
|
|
|
long width = 0; |
|
|
|
long height = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *img; |
|
|
|
img = pipi_render_random(width, height); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_render_bayer) { |
|
|
|
long width = 0; |
|
|
|
long height = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *img; |
|
|
|
img = pipi_render_bayer(width, height); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_render_halftone) { |
|
|
|
long width = 0; |
|
|
|
long height = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *img; |
|
|
|
img = pipi_render_halftone(width, height); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_rgb) { |
|
|
|
zval *_zval1; |
|
|
|
zval *_zval2; |
|
|
|
zval *_zval3; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrr", &_zval1, &_zval2, &_zval3) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
|
|
|
|
pipi_image_t *img_r; |
|
|
|
pipi_image_t *img_g; |
|
|
|
pipi_image_t *img_b; |
|
|
|
|
|
|
|
ZEND_FETCH_RESOURCE(img_r, pipi_image_t*, &_zval1, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
ZEND_FETCH_RESOURCE(img_g, pipi_image_t*, &_zval2, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
ZEND_FETCH_RESOURCE(img_b, pipi_image_t*, &_zval3, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_rgb(img_r, img_g, img_b); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_red) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_red(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_green) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_green(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_blue) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_blue(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_mean) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_mean(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_min) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_min(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_max) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_max(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_add) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_add(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_sub) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_sub(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_difference) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_difference(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_multiply) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_multiply(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_divide) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_divide(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_screen) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_screen(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_overlay) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_overlay(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_convolution) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_gaussian_blur) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_gaussian_blur_ext) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_box_blur) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_box_blur_ext) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_brightness) { |
|
|
|
zval *_zval; |
|
|
|
long value = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *src; |
|
|
|
ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_brightness(src, value); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_contrast) { |
|
|
|
zval *_zval; |
|
|
|
long value = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *src; |
|
|
|
ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_contrast(src, value); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_autocontrast) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_autocontrast(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_invert) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_invert(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_threshold) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_hflip) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_hflip(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_vflip) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_vflip(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_rotate90) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_rotate90(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_rotate180) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_rotate180(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_rotate270) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_rotate270(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_median) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_median_ext) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dilate) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_dilate(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_erode) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_erode(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_order) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_order(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_tile) { |
|
|
|
zval *_zval; |
|
|
|
long width = 0; |
|
|
|
long height = 0; |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &width, &height) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
pipi_image_t *src; |
|
|
|
ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); |
|
|
|
|
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_tile(src, width, height); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_flood_fill) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_draw_line) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_draw_polyline) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_draw_bezier4) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_reduce) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_ediff) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_ordered) { |
|
|
|
pipi_image_t *img1; |
|
|
|
pipi_image_t *img2; |
|
|
|
FETCH_IMG_IMG(img1, img2); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_dither_ordered(img1, img2); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_ordered_ext) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_halftone) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_random) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_dither_random(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_ostromoukhov) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_dbs) { |
|
|
|
pipi_image_t *src; |
|
|
|
FETCH_IMG(src); |
|
|
|
pipi_image_t *result; |
|
|
|
result = pipi_dither_dbs(src); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_dither_24to16) { |
|
|
|
pipi_image_t *img; |
|
|
|
FETCH_IMG(img); |
|
|
|
pipi_dither_24to16(img); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_new_histogram) { |
|
|
|
pipi_histogram_t *histogram; |
|
|
|
histogram = pipi_new_histogram(); |
|
|
|
ZEND_REGISTER_RESOURCE(return_value, histogram, le_pipi_histogram); |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_get_image_histogram) { |
|
|
|
} |
|
|
|
|
|
|
|
PHP_FUNCTION(pipi_render_histogram) { |
|
|
|
} |
|
|
|
|
|
|
|
|