comparison src/http/modules/ngx_http_image_filter_module.c @ 492:98143f74eb3d NGINX_0_7_58

nginx 0.7.58 *) Feature: a "listen" directive of the mail proxy module supports IPv6. *) Feature: the "image_filter_jpeg_quality" directive. *) Feature: the "client_body_in_single_buffer" directive. *) Feature: the $request_body variable. *) Bugfix: in ngx_http_autoindex_module in file name links having a ":" symbol in the name. *) Bugfix: "make upgrade" procedure did not work; the bug had appeared in 0.7.53. Thanks to Denis F. Latypoff.
author Igor Sysoev <http://sysoev.ru>
date Mon, 18 May 2009 00:00:00 +0400
parents e66f886a8305
children 499474178a11
comparison
equal deleted inserted replaced
491:bb2281a3edb6 492:98143f74eb3d
36 36
37 typedef struct { 37 typedef struct {
38 ngx_uint_t filter; 38 ngx_uint_t filter;
39 ngx_uint_t width; 39 ngx_uint_t width;
40 ngx_uint_t height; 40 ngx_uint_t height;
41 ngx_int_t jpeg_quality;
41 42
42 size_t buffer_size; 43 size_t buffer_size;
43 } ngx_http_image_filter_conf_t; 44 } ngx_http_image_filter_conf_t;
44 45
45 46
94 { ngx_string("image_filter"), 95 { ngx_string("image_filter"),
95 NGX_HTTP_LOC_CONF|NGX_CONF_TAKE13, 96 NGX_HTTP_LOC_CONF|NGX_CONF_TAKE13,
96 ngx_http_image_filter, 97 ngx_http_image_filter,
97 NGX_HTTP_LOC_CONF_OFFSET, 98 NGX_HTTP_LOC_CONF_OFFSET,
98 0, 99 0,
100 NULL },
101
102 { ngx_string("image_filter_jpeg_quality"),
103 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
104 ngx_conf_set_num_slot,
105 NGX_HTTP_LOC_CONF_OFFSET,
106 offsetof(ngx_http_image_filter_conf_t, jpeg_quality),
99 NULL }, 107 NULL },
100 108
101 { ngx_string("image_filter_buffer"), 109 { ngx_string("image_filter_buffer"),
102 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, 110 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
103 ngx_conf_set_size_slot, 111 ngx_conf_set_size_slot,
884 892
885 static u_char * 893 static u_char *
886 ngx_http_image_out(ngx_http_request_t *r, ngx_uint_t type, gdImagePtr img, 894 ngx_http_image_out(ngx_http_request_t *r, ngx_uint_t type, gdImagePtr img,
887 int *size) 895 int *size)
888 { 896 {
889 char *failed; 897 char *failed;
890 u_char *out; 898 u_char *out;
899 ngx_http_image_filter_conf_t *conf;
891 900
892 out = NULL; 901 out = NULL;
893 902
894 switch (type) { 903 switch (type) {
895 904
896 case NGX_HTTP_IMAGE_JPEG: 905 case NGX_HTTP_IMAGE_JPEG:
897 out = gdImageJpegPtr(img, size, /* default quality */ -1); 906 conf = ngx_http_get_module_loc_conf(r, ngx_http_image_filter_module);
907 out = gdImageJpegPtr(img, size, conf->jpeg_quality);
898 failed = "gdImageJpegPtr() failed"; 908 failed = "gdImageJpegPtr() failed";
899 break; 909 break;
900 910
901 case NGX_HTTP_IMAGE_GIF: 911 case NGX_HTTP_IMAGE_GIF:
902 out = gdImageGifPtr(img, size); 912 out = gdImageGifPtr(img, size);
937 if (conf == NULL) { 947 if (conf == NULL) {
938 return NGX_CONF_ERROR; 948 return NGX_CONF_ERROR;
939 } 949 }
940 950
941 conf->filter = NGX_CONF_UNSET_UINT; 951 conf->filter = NGX_CONF_UNSET_UINT;
952 conf->jpeg_quality = NGX_CONF_UNSET;
942 conf->buffer_size = NGX_CONF_UNSET_SIZE; 953 conf->buffer_size = NGX_CONF_UNSET_SIZE;
943 954
944 return conf; 955 return conf;
945 } 956 }
946 957
961 conf->width = prev->width; 972 conf->width = prev->width;
962 conf->height = prev->height; 973 conf->height = prev->height;
963 } 974 }
964 } 975 }
965 976
977 /* 75 is libjpeg default quality */
978 ngx_conf_merge_value(conf->jpeg_quality, prev->jpeg_quality, 75);
979
966 ngx_conf_merge_size_value(conf->buffer_size, prev->buffer_size, 980 ngx_conf_merge_size_value(conf->buffer_size, prev->buffer_size,
967 1 * 1024 * 1024); 981 1 * 1024 * 1024);
968 982
969 return NGX_CONF_OK; 983 return NGX_CONF_OK;
970 } 984 }