Skip to content

Commit 6ab9f90

Browse files
committed
- fix conflict on merge
2 parents c4ef791 + fa940a6 commit 6ab9f90

File tree

5 files changed

+130
-4
lines changed

5 files changed

+130
-4
lines changed

ext/gd/config.w32

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ if (PHP_GD != "no") {
4646
gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c \
4747
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 \
4848
gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
49-
gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c xbm.c gd_security.c \
50-
gd_filter.c gd_pixelate.c gd_arc.c gd_rotate.c gd_color.c webpimg.c gd_webp.c ", "gd");
49+
gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c xbm.c gd_security.c gd_transform.c \
50+
gd_filter.c gd_pixelate.c gd_arc.c gd_rotate.c gd_color.c webpimg.c gd_webp.c gd_transform.c", "gd");
5151
AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
5252
ADD_FLAG("CFLAGS_GD", " \
5353
/D HAVE_GD_DYNAMIC_CTX_EX=1 \

ext/gd/gd.c

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_imageantialias, 0)
885885
ZEND_ARG_INFO(0, im)
886886
ZEND_ARG_INFO(0, on)
887887
ZEND_END_ARG_INFO()
888+
889+
ZEND_BEGIN_ARG_INFO(arginfo_imageflip, 0)
890+
ZEND_ARG_INFO(0, im)
891+
ZEND_ARG_INFO(0, mode)
892+
ZEND_END_ARG_INFO()
888893
#endif
889894

890895
/* }}} */
@@ -944,6 +949,7 @@ const zend_function_entry gd_functions[] = {
944949

945950
#ifdef HAVE_GD_BUNDLED
946951
PHP_FE(imageantialias, arginfo_imageantialias)
952+
PHP_FE(imageflip, arginfo_imageflip)
947953
#endif
948954

949955
#if HAVE_GD_IMAGESETTILE
@@ -5041,15 +5047,15 @@ PHP_FUNCTION(imageconvolution)
50415047
if (zend_hash_index_find(Z_ARRVAL_PP(var), (j), (void **) &var2) == SUCCESS) {
50425048
SEPARATE_ZVAL(var2);
50435049
convert_to_double(*var2);
5044-
matrix[i][j] = Z_DVAL_PP(var2);
5050+
matrix[i][j] = (float)Z_DVAL_PP(var2);
50455051
} else {
50465052
php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must have a 3x3 matrix");
50475053
RETURN_FALSE;
50485054
}
50495055
}
50505056
}
50515057
}
5052-
res = gdImageConvolution(im_src, matrix, div, offset);
5058+
res = gdImageConvolution(im_src, matrix, (float)div, (float)offset);
50535059

50545060
if (res) {
50555061
RETURN_TRUE;
@@ -5078,8 +5084,46 @@ PHP_FUNCTION(imageantialias)
50785084
RETURN_TRUE;
50795085
}
50805086
/* }}} */
5087+
5088+
5089+
/* {{{ proto void imageflip(resource im, int mode)
5090+
Flip an image (in place) horizontally, vertically or both directions. */
5091+
PHP_FUNCTION(imageflip)
5092+
{
5093+
zval *IM;
5094+
long mode;
5095+
gdImagePtr im;
5096+
5097+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &IM, &mode) == FAILURE) {
5098+
return;
5099+
}
5100+
5101+
ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
5102+
5103+
switch (mode) {
5104+
case GD_FLIP_VERTICAL:
5105+
gdImageFlipHorizontal(im);
5106+
break;
5107+
5108+
case GD_FLIP_HORINZONTAL:
5109+
gdImageFlipVertical(im);
5110+
break;
5111+
5112+
case GD_FLIP_BOTH:
5113+
gdImageFlipBoth(im);
5114+
break;
5115+
5116+
default:
5117+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown flip mode");
5118+
RETURN_FALSE;
5119+
}
5120+
5121+
RETURN_TRUE;
5122+
}
5123+
/* }}} */
50815124
#endif
50825125

5126+
50835127
/*
50845128
* Local variables:
50855129
* tab-width: 4

ext/gd/libgd/gd.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,14 @@ int gdImageSmooth(gdImagePtr im, float weight);
682682
/* Image comparison definitions */
683683
int gdImageCompare(gdImagePtr im1, gdImagePtr im2);
684684

685+
void gdImageFlipHorizontal(gdImagePtr im);
686+
void gdImageFlipVertical(gdImagePtr im);
687+
void gdImageFlipBoth(gdImagePtr im);
688+
689+
#define GD_FLIP_HORINZONTAL 1
690+
#define GD_FLIP_VERTICAL 2
691+
#define GD_FLIP_BOTH 3
692+
685693
#define GD_CMP_IMAGE 1 /* Actual image IS different */
686694
#define GD_CMP_NUM_COLORS 2 /* Number of Colours in pallette differ */
687695
#define GD_CMP_COLOR 4 /* Image colours differ */

ext/gd/libgd/gd_transform.c

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include "gd.h"
2+
3+
void gdImageFlipVertical(gdImagePtr im)
4+
{
5+
register int x, y;
6+
7+
if (im->trueColor) {
8+
for (y = 0; y < im->sy / 2; y++) {
9+
int *row_dst = im->tpixels[y];
10+
int *row_src = im->tpixels[im->sy - 1 - y];
11+
for (x = 0; x < im->sx; x++) {
12+
register int p;
13+
p = row_dst[x];
14+
row_dst[x] = im->tpixels[im->sy - 1 - y][x];
15+
row_src[x] = p;
16+
}
17+
}
18+
} else {
19+
unsigned char p;
20+
for (y = 0; y < im->sy / 2; y++) {
21+
for (x = 0; x < im->sx; x++) {
22+
p = im->pixels[y][x];
23+
im->pixels[y][x] = im->pixels[im->sy - 1 - y][x];
24+
im->pixels[im->sy - 1 - y][x] = p;
25+
}
26+
}
27+
}
28+
return;
29+
}
30+
31+
void gdImageFlipHorizontal(gdImagePtr im)
32+
{
33+
34+
int x, y;
35+
36+
if (im->trueColor) {
37+
int *px1, *px2, tmp;
38+
39+
for (y = 0; y < im->sy; y++) {
40+
px1 = im->tpixels[y];
41+
px2 = im->tpixels[y] + im->sx - 1;
42+
for (x = 0; x < (im->sx >> 1); x++) {
43+
tmp = *px1;
44+
*px1 = *px2;
45+
*px2 = tmp;
46+
px1++;
47+
px2--;
48+
}
49+
}
50+
} else {
51+
unsigned char *px1, *px2, tmp;
52+
53+
for (y = 0; y < im->sy; y++) {
54+
px1 = im->pixels[y];
55+
px2 = im->pixels[y] + im->sx - 1;
56+
for (x = 0; x < (im->sx >> 1); x++) {
57+
tmp = *px1;
58+
*px1 = *px2;
59+
*px2 = tmp;
60+
px1++;
61+
px2--;
62+
}
63+
}
64+
}
65+
}
66+
67+
void gdImageFlipBoth(gdImagePtr im)
68+
{
69+
gdImageFlipVertical(im);
70+
gdImageFlipHorizontal(im);
71+
}
72+
73+

ext/gd/php_gd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ PHP_FUNCTION(imagerotate);
124124

125125
#ifdef HAVE_GD_BUNDLED
126126
PHP_FUNCTION(imageantialias);
127+
PHP_FUNCTION(imageflip);
127128
#endif
128129

129130
PHP_FUNCTION(imagesetthickness);

0 commit comments

Comments
 (0)