Mercurial > hg > nginx
comparison src/http/modules/ngx_http_image_filter_module.c @ 4981:5889bc5f7a65
Image filter: fixed image_filter rotate inheritance.
Configurations like
location /i/ {
image_filter resize 200 200;
image_filter rotate 180;
location /i/foo/ {
image_filter resize 200 200;
}
}
resulted in rotation incorrectly applied in the location /i/foo, without
any way to clear it. Fix is to handle conf->angle/conf->acv consistently
with other filter variables and do not try to inherit them if there are
transformations defined for current location.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 21 Dec 2012 15:07:45 +0000 |
parents | 55ccb9f75668 |
children | af155fc41deb |
comparison
equal
deleted
inserted
replaced
4980:f091722acab4 | 4981:5889bc5f7a65 |
---|---|
1167 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_image_filter_conf_t)); | 1167 conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_image_filter_conf_t)); |
1168 if (conf == NULL) { | 1168 if (conf == NULL) { |
1169 return NULL; | 1169 return NULL; |
1170 } | 1170 } |
1171 | 1171 |
1172 /* | |
1173 * set by ngx_pcalloc(): | |
1174 * | |
1175 * conf->width = 0; | |
1176 * conf->height = 0; | |
1177 * conf->angle = 0; | |
1178 * conf->wcv = NULL; | |
1179 * conf->hcv = NULL; | |
1180 * conf->acv = NULL; | |
1181 * conf->jqcv = NULL; | |
1182 * conf->shcv = NULL; | |
1183 */ | |
1184 | |
1172 conf->filter = NGX_CONF_UNSET_UINT; | 1185 conf->filter = NGX_CONF_UNSET_UINT; |
1173 conf->jpeg_quality = NGX_CONF_UNSET_UINT; | 1186 conf->jpeg_quality = NGX_CONF_UNSET_UINT; |
1174 conf->sharpen = NGX_CONF_UNSET_UINT; | 1187 conf->sharpen = NGX_CONF_UNSET_UINT; |
1175 conf->angle = NGX_CONF_UNSET_UINT; | |
1176 conf->transparency = NGX_CONF_UNSET; | 1188 conf->transparency = NGX_CONF_UNSET; |
1177 conf->buffer_size = NGX_CONF_UNSET_SIZE; | 1189 conf->buffer_size = NGX_CONF_UNSET_SIZE; |
1178 | 1190 |
1179 return conf; | 1191 return conf; |
1180 } | 1192 } |
1193 | 1205 |
1194 } else { | 1206 } else { |
1195 conf->filter = prev->filter; | 1207 conf->filter = prev->filter; |
1196 conf->width = prev->width; | 1208 conf->width = prev->width; |
1197 conf->height = prev->height; | 1209 conf->height = prev->height; |
1210 conf->angle = prev->angle; | |
1198 conf->wcv = prev->wcv; | 1211 conf->wcv = prev->wcv; |
1199 conf->hcv = prev->hcv; | 1212 conf->hcv = prev->hcv; |
1213 conf->acv = prev->acv; | |
1200 } | 1214 } |
1201 } | 1215 } |
1202 | 1216 |
1203 if (conf->jpeg_quality == NGX_CONF_UNSET_UINT) { | 1217 if (conf->jpeg_quality == NGX_CONF_UNSET_UINT) { |
1204 | 1218 |
1213 if (conf->sharpen == NGX_CONF_UNSET_UINT) { | 1227 if (conf->sharpen == NGX_CONF_UNSET_UINT) { |
1214 ngx_conf_merge_uint_value(conf->sharpen, prev->sharpen, 0); | 1228 ngx_conf_merge_uint_value(conf->sharpen, prev->sharpen, 0); |
1215 | 1229 |
1216 if (conf->shcv == NULL) { | 1230 if (conf->shcv == NULL) { |
1217 conf->shcv = prev->shcv; | 1231 conf->shcv = prev->shcv; |
1218 } | |
1219 } | |
1220 | |
1221 if (conf->angle == NGX_CONF_UNSET_UINT) { | |
1222 ngx_conf_merge_uint_value(conf->angle, prev->angle, 0); | |
1223 | |
1224 if (conf->acv == NULL) { | |
1225 conf->acv = prev->acv; | |
1226 } | 1232 } |
1227 } | 1233 } |
1228 | 1234 |
1229 ngx_conf_merge_value(conf->transparency, prev->transparency, 1); | 1235 ngx_conf_merge_value(conf->transparency, prev->transparency, 1); |
1230 | 1236 |