Re: image_filter_jpeg_quality не работает без указания image_filter rotate|resize|crop
Валентин Бартенев
ne at vbart.ru
Thu Sep 20 22:40:39 UTC 2012
On Wednesday 19 September 2012 12:39:31 mxs kolo wrote:
[...]
> В аттаче есть патч которым я решил эту проблему для себя.
> Мне пришось добавить новый тип фильтра - quality_only.
> Мой конфиг теперь выглядит так:
> location ~* \.(jpg|jpeg)$ {
> image_filter quality_only;
> image_filter_buffer 10M;
> image_filter_jpeg_quality 75;
> image_filter_sharpen 25;
> root /var/www/vhosts/some-domain-here.ru/httpdocs/;
> }
quality_only не очень подходящее название для опции image_filter.
1. crop | resize | test - глаголы, означающие действие, производимое над
изображением, а quality_only - нет.
2. Судя по тому, что делает патч, текущее название просто не соответствует
действительности: к изображению применяется резкость и убирается
прозрачность, если заданы соответствующие директивы. Директива же
image_filter_jpeg_quality работает только для изображений в формате
jpeg, при этом патч не накладывает никаких ограничений на обработку
png и gif.
Я предлагаю поменять название на более общее, например, "convert" будет неплохо.
> Я был -бы очень признателен, если-бы кто-то посмотрел патч на предмет
> ошибок.
На будущее, просьба делать diff с опцией -p, так он будет лучше читаться.
> --- nginx-1.3.6/src/http/modules/ngx_http_image_filter_module.c 2012-04-21
> 23:02:21.000000000 +0400 +++
> nginx-1.3.6.PATCHED/src/http/modules/ngx_http_image_filter_module.c
> 2012-09-19 12:32:16.000000000 +0400 @@ -18,6 +18,7 @@
>
> #define NGX_HTTP_IMAGE_RESIZE 3
> #define NGX_HTTP_IMAGE_CROP 4
> #define NGX_HTTP_IMAGE_ROTATE 5
>
> +#define NGX_HTTP_IMAGE_QUALITY 6
>
> #define NGX_HTTP_IMAGE_START 0
>
> @@ -507,6 +508,10 @@
>
> return ngx_http_image_json(r, rc == NGX_OK ? ctx : NULL);
>
> }
>
> + if (conf->filter == NGX_HTTP_IMAGE_QUALITY) {
> + return ngx_http_image_resize(r, ctx);
> + }
> +
Style. Множество лишних пробелов в конце строк.
> ctx->angle = ngx_http_image_filter_get_value(r, conf->acv, conf->angle);
>
> if (conf->filter == NGX_HTTP_IMAGE_ROTATE) {
>
> @@ -813,6 +818,10 @@
>
> resize = 0;
>
> + } else if (conf->filter == NGX_HTTP_IMAGE_QUALITY) {
> +
> + resize = 0;
> +
> } else { /* NGX_HTTP_IMAGE_CROP */
>
> resize = 0;
Та же проблема с пробелами в пустых строках и на конце.
Лучше вынести resize = 0; выше, за пределы всей конструкции из if - else.
Должно получиться как-то так:
resize = 0;
if (conf->filter == NGX_HTTP_IMAGE_RESIZE) {
...
} else if (conf->filter == NGX_HTTP_IMAGE_CROP) {
...
}
--
Валентин Бартенев
Подробная информация о списке рассылки nginx-ru