Mercurial > hg > nginx-vendor-current
diff src/http/modules/ngx_http_image_filter_module.c @ 624:d4da38525468 NGINX_1_0_2
nginx 1.0.2
*) Feature: now shared zones and caches use POSIX semaphores.
*) Bugfix: in the "rotate" parameter of the "image_filter" directive.
Thanks to Adam Bocim.
*) Bugfix: nginx could not be built on Solaris; the bug had appeared in
1.0.1.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 10 May 2011 00:00:00 +0400 |
parents | b4dcae568a2a |
children | f200748c0ac8 |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_image_filter_module.c +++ b/src/http/modules/ngx_http_image_filter_module.c @@ -723,7 +723,7 @@ ngx_http_image_size(ngx_http_request_t * static ngx_buf_t * ngx_http_image_resize(ngx_http_request_t *r, ngx_http_image_filter_ctx_t *ctx) { - int sx, sy, dx, dy, ox, oy, size, + int sx, sy, dx, dy, ox, oy, ax, ay, size, colors, palette, transparent, red, green, blue, t; u_char *out; @@ -852,6 +852,9 @@ transparent: if (ctx->angle) { src = dst; + ax = (dx % 2 == 0) ? 1 : 0; + ay = (dy % 2 == 0) ? 1 : 0; + switch (ctx->angle) { case 90: @@ -861,7 +864,17 @@ transparent: gdImageDestroy(src); return NULL; } - gdImageCopyRotated(dst, src, dy/2, dx/2, 0, 0, dx, dy, ctx->angle); + if (ctx->angle == 90) { + ox = dy / 2 + ay; + oy = dx / 2 - ax; + + } else { + ox = dy / 2 - ay; + oy = dx / 2 + ax; + } + + gdImageCopyRotated(dst, src, ox, oy, 0, 0, + dx + ax, dy + ay, ctx->angle); gdImageDestroy(src); t = dx; @@ -875,7 +888,8 @@ transparent: gdImageDestroy(src); return NULL; } - gdImageCopyRotated(dst, src, dx/2, dy/2, 0, 0, dx, dy, ctx->angle); + gdImageCopyRotated(dst, src, dx / 2 - ax, dy / 2 - ay, 0, 0, + dx + ax, dy + ay, ctx->angle); gdImageDestroy(src); break; }