Guest User

Untitled

a guest
Jun 22nd, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.21 KB | None | 0 0
  1. Index: config.m4
  2. ===================================================================
  3. RCS file: /repository/php-src/ext/gd/config.m4,v
  4. retrieving revision 1.154.2.1.2.6.2.8
  5. diff -u -r1.154.2.1.2.6.2.8 config.m4
  6. --- config.m4 27 May 2009 08:18:23 -0000 1.154.2.1.2.6.2.8
  7. +++ config.m4 27 Jun 2009 01:02:02 -0000
  8. @@ -270,7 +270,7 @@
  9. libgd/gdfontg.c libgd/gdtables.c libgd/gdft.c libgd/gdcache.c libgd/gdkanji.c \
  10. libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c libgd/gd_topal.c libgd/gd_gif_in.c \
  11. libgd/xbm.c libgd/gd_gif_out.c libgd/gd_security.c libgd/gd_filter.c \
  12. - libgd/gd_pixelate.c libgd/gd_arc.c libgd/gd_rotate.c libgd/gd_color.c"
  13. + libgd/gd_pixelate.c libgd/gd_scatter.c libgd/gd_arc.c libgd/gd_rotate.c libgd/gd_color.c"
  14.  
  15. dnl check for fabsf and floorf which are available since C99
  16. AC_CHECK_FUNCS(fabsf floorf)
  17. @@ -343,8 +343,8 @@
  18.  
  19. if test "$PHP_GD" != "no"; then
  20. GD_MODULE_TYPE=external
  21. - extra_sources="gdcache.c libgd/gd_compat.c libgd/gd_filter.c libgd/gd_pixelate.c libgd/gd_arc.c \
  22. - libgd/gd_rotate.c libgd/gd_color.c"
  23. + extra_sources="gdcache.c libgd/gd_compat.c libgd/gd_filter.c libgd/gd_pixelate.c libgd/gd_scatter.c \
  24. + libgd/gd_arc.c libgd/gd_rotate.c libgd/gd_color.c"
  25.  
  26. dnl Various checks for GD features
  27. PHP_GD_ZLIB
  28. Index: config.w32
  29. ===================================================================
  30. RCS file: /repository/php-src/ext/gd/config.w32,v
  31. retrieving revision 1.10.4.4.2.15
  32. diff -u -r1.10.4.4.2.15 config.w32
  33. --- config.w32 27 May 2009 08:18:23 -0000 1.10.4.4.2.15
  34. +++ config.w32 27 Jun 2009 01:02:16 -0000
  35. @@ -34,7 +34,7 @@
  36. gdft.c gd_gd2.c gd_gd.c gd_gif_in.c gd_gif_out.c gdhelpers.c gd_io.c gd_io_dp.c \
  37. gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
  38. gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c xbm.c gd_security.c \
  39. - gd_filter.c gd_pixelate.c gd_arc.c gd_rotate.c gd_color.c", "gd");
  40. + gd_filter.c gd_pixelate.c gd_scatter.c gd_arc.c gd_rotate.c gd_color.c", "gd");
  41. AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
  42. ADD_FLAG("CFLAGS_GD", " \
  43. /D HAVE_GD_DYNAMIC_CTX_EX=1 \
  44. Index: gd.c
  45. ===================================================================
  46. RCS file: /repository/php-src/ext/gd/gd.c,v
  47. retrieving revision 1.312.2.20.2.32.2.43
  48. diff -u -r1.312.2.20.2.32.2.43 gd.c
  49. --- gd.c 19 Jun 2009 22:15:28 -0000 1.312.2.20.2.32.2.43
  50. +++ gd.c 27 Jun 2009 01:42:49 -0000
  51. @@ -144,7 +144,8 @@
  52. #define IMAGE_FILTER_MEAN_REMOVAL 9
  53. #define IMAGE_FILTER_SMOOTH 10
  54. #define IMAGE_FILTER_PIXELATE 11
  55. -#define IMAGE_FILTER_MAX 11
  56. +#define IMAGE_FILTER_SCATTER 12
  57. +#define IMAGE_FILTER_MAX 12
  58. #define IMAGE_FILTER_MAX_ARGS 6
  59. static void php_image_filter_negate(INTERNAL_FUNCTION_PARAMETERS);
  60. static void php_image_filter_grayscale(INTERNAL_FUNCTION_PARAMETERS);
  61. @@ -158,6 +159,7 @@
  62. static void php_image_filter_mean_removal(INTERNAL_FUNCTION_PARAMETERS);
  63. static void php_image_filter_smooth(INTERNAL_FUNCTION_PARAMETERS);
  64. static void php_image_filter_pixelate(INTERNAL_FUNCTION_PARAMETERS);
  65. +static void php_image_filter_scatter(INTERNAL_FUNCTION_PARAMETERS);
  66.  
  67. /* End Section filters declarations */
  68. static gdImagePtr _php_image_create_from_string (zval **Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC);
  69. @@ -1191,6 +1193,7 @@
  70. REGISTER_LONG_CONSTANT("IMG_FILTER_MEAN_REMOVAL", IMAGE_FILTER_MEAN_REMOVAL, CONST_CS | CONST_PERSISTENT);
  71. REGISTER_LONG_CONSTANT("IMG_FILTER_SMOOTH", IMAGE_FILTER_SMOOTH, CONST_CS | CONST_PERSISTENT);
  72. REGISTER_LONG_CONSTANT("IMG_FILTER_PIXELATE", IMAGE_FILTER_PIXELATE, CONST_CS | CONST_PERSISTENT);
  73. + REGISTER_LONG_CONSTANT("IMG_FILTER_SCATTER", IMAGE_FILTER_SCATTER, CONST_CS | CONST_PERSISTENT);
  74. /* End Section Filters */
  75.  
  76. #ifdef GD_VERSION_STRING
  77. @@ -4917,6 +4920,35 @@
  78. RETURN_FALSE;
  79. }
  80.  
  81. +static void php_image_filter_scatter(INTERNAL_FUNCTION_PARAMETERS)
  82. +{
  83. + zval *IM;
  84. + gdImagePtr im;
  85. + long tmp, scatter, modifier = 0;
  86. +
  87. + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rll|l", &IM, &tmp, &scatter, &modifier) == FAILURE) {
  88. + RETURN_FALSE;
  89. + }
  90. +
  91. + ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
  92. +
  93. + if (im == NULL) {
  94. + RETURN_FALSE;
  95. + }
  96. +
  97. + if (modifier == 0) {
  98. + if (gdImageScatter(im, scatter)) {
  99. + RETURN_TRUE;
  100. + }
  101. + } else {
  102. + if (gdImageScatterEx(im, scatter, modifier)) {
  103. + RETURN_TRUE;
  104. + }
  105. + }
  106. +
  107. + RETURN_FALSE;
  108. +}
  109. +
  110. /* {{{ proto bool imagefilter(resource src_im, int filtertype, [args] )
  111. Applies Filter an image using a custom angle */
  112. PHP_FUNCTION(imagefilter)
  113. @@ -4938,7 +4970,8 @@
  114. php_image_filter_selective_blur,
  115. php_image_filter_mean_removal,
  116. php_image_filter_smooth,
  117. - php_image_filter_pixelate
  118. + php_image_filter_pixelate,
  119. + php_image_filter_scatter
  120. };
  121.  
  122. if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > IMAGE_FILTER_MAX_ARGS) {
  123. Index: libgd/gd.h
  124. ===================================================================
  125. RCS file: /repository/php-src/ext/gd/libgd/gd.h,v
  126. retrieving revision 1.26.2.3.2.6.2.4
  127. diff -u -r1.26.2.3.2.6.2.4 gd.h
  128. --- libgd/gd.h 26 May 2009 13:08:59 -0000 1.26.2.3.2.6.2.4
  129. +++ libgd/gd.h 27 Jun 2009 01:35:23 -0000
  130. @@ -591,6 +591,9 @@
  131. };
  132.  
  133. int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode);
  134. +int gdImageScatter(gdImagePtr im, int scatter);
  135. +int gdImageScatterEx(gdImagePtr im, int sub, int plus);
  136. +
  137.  
  138. /* Macros to access information about images. */
  139.  
  140. Index: libgd/gd_compat.h
  141. ===================================================================
  142. RCS file: /repository/php-src/ext/gd/libgd/gd_compat.h,v
  143. retrieving revision 1.1.2.5
  144. diff -u -r1.1.2.5 gd_compat.h
  145. --- libgd/gd_compat.h 27 May 2009 08:18:24 -0000 1.1.2.5
  146. +++ libgd/gd_compat.h 27 Jun 2009 01:35:29 -0000
  147. @@ -46,6 +46,8 @@
  148. };
  149.  
  150. int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode);
  151. +int gdImageScatter(gdImagePtr im, int scatter);
  152. +int gdImageScatterEx(gdImagePtr im, int sub, int plus);
  153.  
  154. #if !HAVE_GD_IMAGEELLIPSE
  155. void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c);
  156. Index: tests/imagefilter.phpt
  157. ===================================================================
  158. RCS file: /repository/php-src/ext/gd/tests/imagefilter.phpt,v
  159. retrieving revision 1.4.4.1.2.2
  160. diff -u -r1.4.4.1.2.2 imagefilter.phpt
  161. --- tests/imagefilter.phpt 15 Jan 2009 07:57:11 -0000 1.4.4.1.2.2
  162. +++ tests/imagefilter.phpt 27 Jun 2009 02:06:04 -0000
  163. @@ -82,6 +82,16 @@
  164. } else {
  165. echo "IMG_FILTER_PIXELATE failed\n";
  166. }
  167. +
  168. + $im = imagecreatefrompng($SOURCE_IMG);
  169. +
  170. + if (imagefilter($im, IMG_FILTER_SCATTER, -5, 8)) {
  171. + imagepng($im, $SAVE_DIR . "/IMG_FILTER_SCATTER.png");
  172. + echo "IMG_FILTER_SCATTER success\n";
  173. + unlink($SAVE_DIR . "/IMG_FILTER_SCATTER.png");
  174. + } else {
  175. + echo "IMG_FILTER_SCATTER failed\n";
  176. + }
  177. ?>
  178. --EXPECT--
  179. IMG_FILTER_NEGATE success
  180. @@ -96,3 +106,4 @@
  181. IMG_FILTER_CONTRAST success
  182. IMG_FILTER_BRIGHTNESS success
  183. IMG_FILTER_PIXELATE success
  184. +IMG_FILTER_SCATTER success
  185. --- gd_scatter.c
  186. +++ gd_scatter.c
  187. @@ -0,0 +1,53 @@
  188. +#include "gd.h"
  189. +#include <stdlib.h>
  190. +
  191. +int gdImageScatter(gdImagePtr im, int scatter)
  192. +{
  193. + if (scatter > 0) {
  194. + return gdImageScatterEx(im, (int) (~scatter - 1), scatter);
  195. + } else {
  196. + return gdImageScatterEx(im, scatter, (int) (~scatter - 1));
  197. + }
  198. +}
  199. +
  200. +int gdImageScatterEx(gdImagePtr im, int plus, int sub)
  201. +{
  202. + int x, y;
  203. + int dest_x, dest_y;
  204. + int pxl, new_pxl;
  205. +
  206. + if (plus == 0 && sub == 0) {
  207. + return 1;
  208. + } else if (sub >= plus) {
  209. + return 0;
  210. + }
  211. +
  212. + /* srand needed here */
  213. +
  214. + for (x = 0; x < im->sx; x++) {
  215. + for (y = 0; y < im->sy; y++) {
  216. + /*
  217. + need something like this, as done in php
  218. + dest_x = rand(sub, plus);
  219. + dest_y = rand(sub, plus);
  220. + */
  221. +
  222. + if (!gdImageBoundsSafe(im, dest_x, dest_y)) {
  223. + continue;
  224. + }
  225. +
  226. + if (gdImageTrueColor(im)) {
  227. + pxl = gdImageTrueColorPixel(im, x, y);
  228. + new_pxl = gdImageTrueColorPixel(im, dest_x, dest_y);
  229. + } else {
  230. + pxl = gdImagePalettePixel(im, x, y);
  231. + new_pxl = gdImagePalettePixel(im, dest_x, dest_y);
  232. + }
  233. +
  234. + gdImageSetPixel(im, dest_x, dest_y, pxl);
  235. + gdImageSetPixel(im, x, y, new_pxl);
  236. + }
  237. + }
  238. +
  239. + return 1;
  240. +}
Add Comment
Please, Sign In to add comment