Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

703 linhas
17 KiB

  1. /*
  2. * php-pipi Php binding for Libpipi
  3. * Copyright (c) 2008 Vion Nicolas <nico@picapo.net>
  4. *
  5. *
  6. * This library is free software. It comes without any warranty, to
  7. * the extent permitted by applicable law. You can redistribute it
  8. * and/or modify it under the terms of the Do What The Fuck You Want
  9. * To Public License, Version 2, as published by Sam Hocevar. See
  10. * http://sam.zoy.org/wtfpl/COPYING for more details.
  11. */
  12. #ifdef HAVE_CONFIG_H
  13. #include "config.h"
  14. #endif
  15. #include "php.h"
  16. #include "php_pipi.h"
  17. static function_entry pipi_functions[] = {
  18. PHP_FE(pipi_get_color_from_string, NULL)
  19. PHP_FE(pipi_get_version, NULL)
  20. PHP_FE(pipi_create_context, NULL)
  21. PHP_FE(pipi_get_command_list, NULL)
  22. PHP_FE(pipi_command, NULL)
  23. PHP_FE(pipi_load, NULL)
  24. PHP_FE(pipi_load_stock, NULL)
  25. PHP_FE(pipi_new, NULL)
  26. PHP_FE(pipi_copy, NULL)
  27. PHP_FE(pipi_save, NULL)
  28. PHP_FE(pipi_set_gamma, NULL)
  29. PHP_FE(pipi_getpixels, NULL)
  30. PHP_FE(pipi_get_image_width, NULL)
  31. PHP_FE(pipi_get_image_height, NULL)
  32. PHP_FE(pipi_get_image_pitch, NULL)
  33. PHP_FE(pipi_get_image_last_modified, NULL)
  34. PHP_FE(pipi_get_format_name, NULL)
  35. PHP_FE(pipi_measure_msd, NULL)
  36. PHP_FE(pipi_measure_rmsd, NULL)
  37. PHP_FE(pipi_resize, NULL)
  38. PHP_FE(pipi_render_random, NULL)
  39. PHP_FE(pipi_render_bayer, NULL)
  40. PHP_FE(pipi_render_halftone, NULL)
  41. PHP_FE(pipi_rgb, NULL)
  42. PHP_FE(pipi_red, NULL)
  43. PHP_FE(pipi_green, NULL)
  44. PHP_FE(pipi_blue, NULL)
  45. PHP_FE(pipi_mean, NULL)
  46. PHP_FE(pipi_min, NULL)
  47. PHP_FE(pipi_max, NULL)
  48. PHP_FE(pipi_add, NULL)
  49. PHP_FE(pipi_sub, NULL)
  50. PHP_FE(pipi_difference, NULL)
  51. PHP_FE(pipi_multiply, NULL)
  52. PHP_FE(pipi_divide, NULL)
  53. PHP_FE(pipi_screen, NULL)
  54. PHP_FE(pipi_overlay, NULL)
  55. PHP_FE(pipi_convolution, NULL)
  56. PHP_FE(pipi_gaussian_blur, NULL)
  57. PHP_FE(pipi_gaussian_blur_ext, NULL)
  58. PHP_FE(pipi_box_blur, NULL)
  59. PHP_FE(pipi_box_blur_ext, NULL)
  60. PHP_FE(pipi_brightness, NULL)
  61. PHP_FE(pipi_contrast, NULL)
  62. PHP_FE(pipi_autocontrast, NULL)
  63. PHP_FE(pipi_invert, NULL)
  64. PHP_FE(pipi_threshold, NULL)
  65. PHP_FE(pipi_hflip, NULL)
  66. PHP_FE(pipi_vflip, NULL)
  67. PHP_FE(pipi_rotate90, NULL)
  68. PHP_FE(pipi_rotate180, NULL)
  69. PHP_FE(pipi_rotate270, NULL)
  70. PHP_FE(pipi_median, NULL)
  71. PHP_FE(pipi_median_ext, NULL)
  72. PHP_FE(pipi_dilate, NULL)
  73. PHP_FE(pipi_erode, NULL)
  74. PHP_FE(pipi_order, NULL)
  75. PHP_FE(pipi_tile, NULL)
  76. PHP_FE(pipi_flood_fill, NULL)
  77. PHP_FE(pipi_draw_line, NULL)
  78. PHP_FE(pipi_draw_polyline, NULL)
  79. PHP_FE(pipi_draw_bezier4, NULL)
  80. PHP_FE(pipi_reduce, NULL)
  81. PHP_FE(pipi_dither_ediff, NULL)
  82. PHP_FE(pipi_dither_ordered, NULL)
  83. PHP_FE(pipi_dither_ordered_ext, NULL)
  84. PHP_FE(pipi_dither_halftone, NULL)
  85. PHP_FE(pipi_dither_random, NULL)
  86. PHP_FE(pipi_dither_ostromoukhov, NULL)
  87. PHP_FE(pipi_dither_dbs, NULL)
  88. PHP_FE(pipi_dither_24to16, NULL)
  89. PHP_FE(pipi_new_histogram, NULL)
  90. PHP_FE(pipi_get_image_histogram, NULL)
  91. PHP_FE(pipi_render_histogram, NULL)
  92. {NULL, NULL, NULL}
  93. };
  94. zend_module_entry pipi_module_entry = {
  95. #if ZEND_MODULE_API_NO >= 20010901
  96. STANDARD_MODULE_HEADER,
  97. #endif
  98. PHP_PIPI_EXTNAME,
  99. pipi_functions,
  100. PHP_MINIT(pipi),
  101. NULL,
  102. NULL,
  103. NULL,
  104. PHP_MINFO(pipi),
  105. #if ZEND_MODULE_API_NO >= 20010901
  106. PHP_PIPI_VERSION,
  107. #endif
  108. STANDARD_MODULE_PROPERTIES
  109. };
  110. #ifdef COMPILE_DL_PIPI
  111. ZEND_GET_MODULE(pipi)
  112. #endif
  113. PHP_MINFO_FUNCTION(pipi) {
  114. php_info_print_table_start();
  115. php_info_print_table_row(2, "Pipi library version", pipi_get_version());
  116. php_info_print_table_end();
  117. }
  118. //--------PIPI'S RESSOURCES---------//
  119. static void php_pipi_image_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  120. pipi_free(rsrc->ptr);
  121. }
  122. static void php_pipi_context_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  123. pipi_destroy_context(rsrc->ptr);
  124. }
  125. static void php_pipi_histogram_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
  126. pipi_free_histogram(rsrc->ptr);
  127. }
  128. PHP_MINIT_FUNCTION(pipi) {
  129. le_pipi_image = zend_register_list_destructors_ex(php_pipi_image_dtor, NULL, PHP_PIPI_IMAGE_RES_NAME, module_number);
  130. le_pipi_context = zend_register_list_destructors_ex(php_pipi_context_dtor, NULL, PHP_PIPI_CONTEXT_RES_NAME, module_number);
  131. le_pipi_histogram = zend_register_list_destructors_ex(php_pipi_histogram_dtor, NULL, PHP_PIPI_HISTOGRAM_RES_NAME, module_number);
  132. return SUCCESS;
  133. }
  134. //----------SOMEMACROS---------------//
  135. #define FETCH_STR(str) \
  136. int __len; \
  137. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &__len) == FAILURE) { \
  138. RETURN_FALSE; \
  139. }
  140. #define FETCH_LONG(l) \
  141. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &l) == FAILURE) { \
  142. RETURN_FALSE; \
  143. }
  144. #define FETCH_IMG(img) \
  145. zval *_zval; \
  146. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &_zval) == FAILURE) { \
  147. RETURN_FALSE; \
  148. } \
  149. ZEND_FETCH_RESOURCE(img, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  150. #define FETCH_IMG_IMG(img1, img2) \
  151. zval *_zval1; \
  152. zval *_zval2; \
  153. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &_zval1, &_zval2) == FAILURE) { \
  154. RETURN_FALSE; \
  155. } \
  156. ZEND_FETCH_RESOURCE(img1, pipi_image_t*, &_zval1, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image); \
  157. ZEND_FETCH_RESOURCE(img2, pipi_image_t*, &_zval2, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  158. //--------PIPI'S FUNCTIONS---------//
  159. PHP_FUNCTION(pipi_get_color_from_string) {
  160. }
  161. PHP_FUNCTION(pipi_get_version) {
  162. RETURN_STRING(estrdup(pipi_get_version()), 0);
  163. }
  164. PHP_FUNCTION(pipi_create_context) {
  165. pipi_context_t *context;
  166. context = pipi_create_context();
  167. ZEND_REGISTER_RESOURCE(return_value, context, le_pipi_context);
  168. }
  169. PHP_FUNCTION(pipi_get_command_list) {
  170. }
  171. PHP_FUNCTION(pipi_command) {
  172. }
  173. PHP_FUNCTION(pipi_load) {
  174. char *str;
  175. FETCH_STR(str);
  176. pipi_image_t *img;
  177. img = pipi_load(str);
  178. ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image);
  179. }
  180. PHP_FUNCTION(pipi_load_stock) {
  181. char *str;
  182. FETCH_STR(str);
  183. pipi_image_t *img;
  184. img = pipi_load_stock(str);
  185. ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image);
  186. }
  187. PHP_FUNCTION(pipi_new) {
  188. long width = 0;
  189. long height = 0;
  190. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) {
  191. RETURN_FALSE;
  192. }
  193. pipi_image_t *img;
  194. img = pipi_new(width, height);
  195. ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image);
  196. }
  197. PHP_FUNCTION(pipi_copy) {
  198. pipi_image_t *src;
  199. FETCH_IMG(src);
  200. pipi_image_t *result;
  201. result = pipi_copy(src);
  202. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  203. }
  204. PHP_FUNCTION(pipi_save) {
  205. zval *res;
  206. char *str;
  207. int str_len;
  208. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &res, &str, &str_len) == FAILURE) {
  209. RETURN_FALSE;
  210. }
  211. pipi_image_t *img;
  212. ZEND_FETCH_RESOURCE(img, pipi_image_t*, &res, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  213. RETURN_LONG(pipi_save(img, str));
  214. }
  215. PHP_FUNCTION(pipi_set_gamma) {
  216. long value;
  217. FETCH_LONG(value);
  218. pipi_set_gamma(value);
  219. }
  220. PHP_FUNCTION(pipi_getpixels) {
  221. }
  222. PHP_FUNCTION(pipi_get_image_width) {
  223. pipi_image_t *img;
  224. FETCH_IMG(img);
  225. RETURN_LONG(pipi_get_image_width(img));
  226. }
  227. PHP_FUNCTION(pipi_get_image_height) {
  228. pipi_image_t *img;
  229. FETCH_IMG(img);
  230. RETURN_LONG(pipi_get_image_height(img));
  231. }
  232. PHP_FUNCTION(pipi_get_image_pitch) {
  233. pipi_image_t *img;
  234. FETCH_IMG(img);
  235. RETURN_LONG(pipi_get_image_pitch(img));
  236. }
  237. PHP_FUNCTION(pipi_get_image_last_modified) {
  238. pipi_image_t *img;
  239. FETCH_IMG(img);
  240. RETURN_LONG(pipi_get_image_last_midified(img));
  241. }
  242. PHP_FUNCTION(pipi_get_format_name) {
  243. long id;
  244. FETCH_LONG(id);
  245. RETURN_STRING(estrdup(pipi_get_format_name(id)), 0);
  246. }
  247. PHP_FUNCTION(pipi_measure_msd) {
  248. pipi_image_t *img1;
  249. pipi_image_t *img2;
  250. FETCH_IMG_IMG(img1, img2);
  251. RETURN_LONG(pipi_measure_msd(img1, img2));
  252. }
  253. PHP_FUNCTION(pipi_measure_rmsd) {
  254. pipi_image_t *img1;
  255. pipi_image_t *img2;
  256. FETCH_IMG_IMG(img1, img2);
  257. RETURN_LONG(pipi_measure_rmsd(img1, img2));
  258. }
  259. PHP_FUNCTION(pipi_resize) {
  260. zval *_zval;
  261. long width = 0;
  262. long height = 0;
  263. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &width, &height) == FAILURE) {
  264. RETURN_FALSE;
  265. }
  266. pipi_image_t *src;
  267. ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  268. pipi_image_t *result;
  269. result = pipi_resize(src, width, height);
  270. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  271. }
  272. PHP_FUNCTION(pipi_render_random) {
  273. long width = 0;
  274. long height = 0;
  275. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) {
  276. RETURN_FALSE;
  277. }
  278. pipi_image_t *img;
  279. img = pipi_render_random(width, height);
  280. ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image);
  281. }
  282. PHP_FUNCTION(pipi_render_bayer) {
  283. long width = 0;
  284. long height = 0;
  285. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) {
  286. RETURN_FALSE;
  287. }
  288. pipi_image_t *img;
  289. img = pipi_render_bayer(width, height);
  290. ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image);
  291. }
  292. PHP_FUNCTION(pipi_render_halftone) {
  293. long width = 0;
  294. long height = 0;
  295. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &width, &height) == FAILURE) {
  296. RETURN_FALSE;
  297. }
  298. pipi_image_t *img;
  299. img = pipi_render_halftone(width, height);
  300. ZEND_REGISTER_RESOURCE(return_value, img, le_pipi_image);
  301. }
  302. PHP_FUNCTION(pipi_rgb) {
  303. zval *_zval1;
  304. zval *_zval2;
  305. zval *_zval3;
  306. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrr", &_zval1, &_zval2, &_zval3) == FAILURE) {
  307. RETURN_FALSE;
  308. }
  309. pipi_image_t *img_r;
  310. pipi_image_t *img_g;
  311. pipi_image_t *img_b;
  312. ZEND_FETCH_RESOURCE(img_r, pipi_image_t*, &_zval1, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  313. ZEND_FETCH_RESOURCE(img_g, pipi_image_t*, &_zval2, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  314. ZEND_FETCH_RESOURCE(img_b, pipi_image_t*, &_zval3, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  315. pipi_image_t *result;
  316. result = pipi_rgb(img_r, img_g, img_b);
  317. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  318. }
  319. PHP_FUNCTION(pipi_red) {
  320. pipi_image_t *src;
  321. FETCH_IMG(src);
  322. pipi_image_t *result;
  323. result = pipi_red(src);
  324. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  325. }
  326. PHP_FUNCTION(pipi_green) {
  327. pipi_image_t *src;
  328. FETCH_IMG(src);
  329. pipi_image_t *result;
  330. result = pipi_green(src);
  331. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  332. }
  333. PHP_FUNCTION(pipi_blue) {
  334. pipi_image_t *src;
  335. FETCH_IMG(src);
  336. pipi_image_t *result;
  337. result = pipi_blue(src);
  338. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  339. }
  340. PHP_FUNCTION(pipi_mean) {
  341. pipi_image_t *img1;
  342. pipi_image_t *img2;
  343. FETCH_IMG_IMG(img1, img2);
  344. pipi_image_t *result;
  345. result = pipi_mean(img1, img2);
  346. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  347. }
  348. PHP_FUNCTION(pipi_min) {
  349. pipi_image_t *img1;
  350. pipi_image_t *img2;
  351. FETCH_IMG_IMG(img1, img2);
  352. pipi_image_t *result;
  353. result = pipi_min(img1, img2);
  354. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  355. }
  356. PHP_FUNCTION(pipi_max) {
  357. pipi_image_t *img1;
  358. pipi_image_t *img2;
  359. FETCH_IMG_IMG(img1, img2);
  360. pipi_image_t *result;
  361. result = pipi_max(img1, img2);
  362. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  363. }
  364. PHP_FUNCTION(pipi_add) {
  365. pipi_image_t *img1;
  366. pipi_image_t *img2;
  367. FETCH_IMG_IMG(img1, img2);
  368. pipi_image_t *result;
  369. result = pipi_add(img1, img2);
  370. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  371. }
  372. PHP_FUNCTION(pipi_sub) {
  373. pipi_image_t *img1;
  374. pipi_image_t *img2;
  375. FETCH_IMG_IMG(img1, img2);
  376. pipi_image_t *result;
  377. result = pipi_sub(img1, img2);
  378. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  379. }
  380. PHP_FUNCTION(pipi_difference) {
  381. pipi_image_t *img1;
  382. pipi_image_t *img2;
  383. FETCH_IMG_IMG(img1, img2);
  384. pipi_image_t *result;
  385. result = pipi_difference(img1, img2);
  386. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  387. }
  388. PHP_FUNCTION(pipi_multiply) {
  389. pipi_image_t *img1;
  390. pipi_image_t *img2;
  391. FETCH_IMG_IMG(img1, img2);
  392. pipi_image_t *result;
  393. result = pipi_multiply(img1, img2);
  394. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  395. }
  396. PHP_FUNCTION(pipi_divide) {
  397. pipi_image_t *img1;
  398. pipi_image_t *img2;
  399. FETCH_IMG_IMG(img1, img2);
  400. pipi_image_t *result;
  401. result = pipi_divide(img1, img2);
  402. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  403. }
  404. PHP_FUNCTION(pipi_screen) {
  405. pipi_image_t *img1;
  406. pipi_image_t *img2;
  407. FETCH_IMG_IMG(img1, img2);
  408. pipi_image_t *result;
  409. result = pipi_screen(img1, img2);
  410. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  411. }
  412. PHP_FUNCTION(pipi_overlay) {
  413. pipi_image_t *img1;
  414. pipi_image_t *img2;
  415. FETCH_IMG_IMG(img1, img2);
  416. pipi_image_t *result;
  417. result = pipi_overlay(img1, img2);
  418. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  419. }
  420. PHP_FUNCTION(pipi_convolution) {
  421. }
  422. PHP_FUNCTION(pipi_gaussian_blur) {
  423. }
  424. PHP_FUNCTION(pipi_gaussian_blur_ext) {
  425. }
  426. PHP_FUNCTION(pipi_box_blur) {
  427. }
  428. PHP_FUNCTION(pipi_box_blur_ext) {
  429. }
  430. PHP_FUNCTION(pipi_brightness) {
  431. zval *_zval;
  432. long value = 0;
  433. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  434. RETURN_FALSE;
  435. }
  436. pipi_image_t *src;
  437. ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  438. pipi_image_t *result;
  439. result = pipi_brightness(src, value);
  440. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  441. }
  442. PHP_FUNCTION(pipi_contrast) {
  443. zval *_zval;
  444. long value = 0;
  445. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &_zval, &value) == FAILURE) {
  446. RETURN_FALSE;
  447. }
  448. pipi_image_t *src;
  449. ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  450. pipi_image_t *result;
  451. result = pipi_contrast(src, value);
  452. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  453. }
  454. PHP_FUNCTION(pipi_autocontrast) {
  455. pipi_image_t *src;
  456. FETCH_IMG(src);
  457. pipi_image_t *result;
  458. result = pipi_autocontrast(src);
  459. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  460. }
  461. PHP_FUNCTION(pipi_invert) {
  462. pipi_image_t *src;
  463. FETCH_IMG(src);
  464. pipi_image_t *result;
  465. result = pipi_invert(src);
  466. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  467. }
  468. PHP_FUNCTION(pipi_threshold) {
  469. }
  470. PHP_FUNCTION(pipi_hflip) {
  471. pipi_image_t *src;
  472. FETCH_IMG(src);
  473. pipi_image_t *result;
  474. result = pipi_hflip(src);
  475. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  476. }
  477. PHP_FUNCTION(pipi_vflip) {
  478. pipi_image_t *src;
  479. FETCH_IMG(src);
  480. pipi_image_t *result;
  481. result = pipi_vflip(src);
  482. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  483. }
  484. PHP_FUNCTION(pipi_rotate90) {
  485. pipi_image_t *src;
  486. FETCH_IMG(src);
  487. pipi_image_t *result;
  488. result = pipi_rotate90(src);
  489. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  490. }
  491. PHP_FUNCTION(pipi_rotate180) {
  492. pipi_image_t *src;
  493. FETCH_IMG(src);
  494. pipi_image_t *result;
  495. result = pipi_rotate180(src);
  496. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  497. }
  498. PHP_FUNCTION(pipi_rotate270) {
  499. pipi_image_t *src;
  500. FETCH_IMG(src);
  501. pipi_image_t *result;
  502. result = pipi_rotate270(src);
  503. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  504. }
  505. PHP_FUNCTION(pipi_median) {
  506. }
  507. PHP_FUNCTION(pipi_median_ext) {
  508. }
  509. PHP_FUNCTION(pipi_dilate) {
  510. pipi_image_t *src;
  511. FETCH_IMG(src);
  512. pipi_image_t *result;
  513. result = pipi_dilate(src);
  514. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  515. }
  516. PHP_FUNCTION(pipi_erode) {
  517. pipi_image_t *src;
  518. FETCH_IMG(src);
  519. pipi_image_t *result;
  520. result = pipi_erode(src);
  521. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  522. }
  523. PHP_FUNCTION(pipi_order) {
  524. pipi_image_t *src;
  525. FETCH_IMG(src);
  526. pipi_image_t *result;
  527. result = pipi_order(src);
  528. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  529. }
  530. PHP_FUNCTION(pipi_tile) {
  531. zval *_zval;
  532. long width = 0;
  533. long height = 0;
  534. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll", &_zval, &width, &height) == FAILURE) {
  535. RETURN_FALSE;
  536. }
  537. pipi_image_t *src;
  538. ZEND_FETCH_RESOURCE(src, pipi_image_t*, &_zval, -1, PHP_PIPI_IMAGE_RES_NAME, le_pipi_image);
  539. pipi_image_t *result;
  540. result = pipi_tile(src, width, height);
  541. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  542. }
  543. PHP_FUNCTION(pipi_flood_fill) {
  544. }
  545. PHP_FUNCTION(pipi_draw_line) {
  546. }
  547. PHP_FUNCTION(pipi_draw_polyline) {
  548. }
  549. PHP_FUNCTION(pipi_draw_bezier4) {
  550. }
  551. PHP_FUNCTION(pipi_reduce) {
  552. }
  553. PHP_FUNCTION(pipi_dither_ediff) {
  554. }
  555. PHP_FUNCTION(pipi_dither_ordered) {
  556. pipi_image_t *img1;
  557. pipi_image_t *img2;
  558. FETCH_IMG_IMG(img1, img2);
  559. pipi_image_t *result;
  560. result = pipi_dither_ordered(img1, img2);
  561. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  562. }
  563. PHP_FUNCTION(pipi_dither_ordered_ext) {
  564. }
  565. PHP_FUNCTION(pipi_dither_halftone) {
  566. }
  567. PHP_FUNCTION(pipi_dither_random) {
  568. pipi_image_t *src;
  569. FETCH_IMG(src);
  570. pipi_image_t *result;
  571. result = pipi_dither_random(src);
  572. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  573. }
  574. PHP_FUNCTION(pipi_dither_ostromoukhov) {
  575. }
  576. PHP_FUNCTION(pipi_dither_dbs) {
  577. pipi_image_t *src;
  578. FETCH_IMG(src);
  579. pipi_image_t *result;
  580. result = pipi_dither_dbs(src);
  581. ZEND_REGISTER_RESOURCE(return_value, result, le_pipi_image);
  582. }
  583. PHP_FUNCTION(pipi_dither_24to16) {
  584. pipi_image_t *img;
  585. FETCH_IMG(img);
  586. pipi_dither_24to16(img);
  587. }
  588. PHP_FUNCTION(pipi_new_histogram) {
  589. pipi_histogram_t *histogram;
  590. histogram = pipi_new_histogram();
  591. ZEND_REGISTER_RESOURCE(return_value, histogram, le_pipi_histogram);
  592. }
  593. PHP_FUNCTION(pipi_get_image_histogram) {
  594. }
  595. PHP_FUNCTION(pipi_render_histogram) {
  596. }