From 8082974f881796cffae7da3cd233aac9e289a5c1 Mon Sep 17 00:00:00 2001 From: konn Date: Tue, 22 Jul 2008 04:19:36 +0000 Subject: [PATCH] * Changed features. - After it had converted it by a former image, the priority of the image type was selected. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/RELEASE_0_12_0@3029 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/chxj_img_conv_format.c | 377 ++++++++++++++++++++++++--------------------- 1 file changed, 202 insertions(+), 175 deletions(-) diff --git a/src/chxj_img_conv_format.c b/src/chxj_img_conv_format.c index d8e2a1d1..13f7365a 100644 --- a/src/chxj_img_conv_format.c +++ b/src/chxj_img_conv_format.c @@ -226,6 +226,10 @@ static int s_img_conv_format_from_file(request_rec *r, const char *user_agent, query_string_param_t *qsp, device_table *spec); +static int s_convert_to_jpeg(MagickWand *magick_wand, request_rec *r, device_table *spec); +static int s_convert_to_png(MagickWand *maigck_wand, request_rec *r, device_table *spec); +static int s_convert_to_gif(MagickWand *magick_wand, request_rec *r, device_table *spec); +static int s_convert_to_bmp(MagickWand *magick_wand, request_rec *r, device_table *spec); @@ -564,103 +568,62 @@ s_create_cache_file(request_rec *r, return HTTP_NOT_FOUND; } - DBG(r,"start convert and compression"); - - if (spec->available_jpeg) { - if (MagickSetImageCompression(magick_wand,JPEGCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; - } - - if (MagickSetImageFormat(magick_wand, "jpg") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; - } - - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; - } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return HTTP_NOT_FOUND; - - r->content_type = apr_psprintf(r->pool, "image/jpeg"); - DBG(r,"convert to jpg"); - } - else - if (spec->available_png) { - - if (MagickSetImageCompression(magick_wand,ZipCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; + char *nowFormat = MagickGetImageFormat(magick_wand); + int fixFormatFlag = 0; + if (nowFormat) { + if (STRCASEEQ('g','G',"gif",nowFormat)) { + if (spec->available_gif) { + if (s_convert_to_gif(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } + fixFormatFlag = 1; + } } - - if (MagickSetImageFormat(magick_wand, "png") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; + else if (STRCASEEQ('j','J',"jpg",nowFormat)||STRCASEEQ('j','J',"jpeg",nowFormat)) { + if (spec->available_jpeg) { + if (s_convert_to_jpeg(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } + fixFormatFlag = 1; + } } - - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; + else if (STRCASEEQ('p','P',"png",nowFormat)) { + if (spec->available_png) { + if (s_convert_to_png(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } + fixFormatFlag = 1; + } } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return HTTP_NOT_FOUND; - - r->content_type = apr_psprintf(r->pool, "image/png"); - DBG(r, "convert to png"); } - else - if (spec->available_gif) { - - if (MagickSetImageCompression(magick_wand,LZWCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; - } + + DBG(r,"start convert and compression"); - if (MagickSetImageFormat(magick_wand, "gif") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; + if (! fixFormatFlag) { + if (spec->available_jpeg) { + if (s_convert_to_jpeg(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } } + else + if (spec->available_png) { + if (s_convert_to_png(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return HTTP_NOT_FOUND; - - r->content_type = apr_psprintf(r->pool, "image/gif"); - - DBG(r,"convert to gif"); - } - else - if (spec->available_bmp2 || spec->available_bmp4) { - - if (MagickSetImageCompression(magick_wand,NoCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; - } - - if (MagickSetImageFormat(magick_wand, "bmp") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; + else + if (spec->available_gif) { + if (s_convert_to_gif(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } } - - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return HTTP_NOT_FOUND; + else + if (spec->available_bmp2 || spec->available_bmp4) { + if (s_convert_to_bmp(magick_wand, r, spec)) { + return HTTP_NOT_FOUND; + } } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return HTTP_NOT_FOUND; - - r->content_type = apr_psprintf(r->pool, "image/bmp"); - - DBG(r, "convert to bmp(unsupported)"); } /* @@ -841,6 +804,116 @@ s_create_cache_file(request_rec *r, } +static int +s_convert_to_jpeg(MagickWand *magick_wand, request_rec *r, device_table *spec) +{ + if (MagickSetImageCompression(magick_wand,JPEGCompression) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickSetImageFormat(magick_wand, "jpg") == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickStripImage(magick_wand) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) + return -1; + + r->content_type = apr_psprintf(r->pool, "image/jpeg"); + DBG(r,"convert to jpg"); + return 0; +} + + +static int +s_convert_to_png(MagickWand *magick_wand, request_rec *r, device_table *spec) +{ + if (MagickSetImageCompression(magick_wand,ZipCompression) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickSetImageFormat(magick_wand, "png") == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickStripImage(magick_wand) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) + return -1; + + r->content_type = apr_psprintf(r->pool, "image/png"); + DBG(r, "convert to png"); + return 0; +} + + +static int +s_convert_to_gif(MagickWand *magick_wand, request_rec *r, device_table *spec) +{ + if (MagickSetImageCompression(magick_wand,LZWCompression) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickSetImageFormat(magick_wand, "gif") == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickStripImage(magick_wand) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) + return -1; + + r->content_type = apr_psprintf(r->pool, "image/gif"); + + DBG(r,"convert to gif"); + return 0; +} + + +static int +s_convert_to_bmp(MagickWand *magick_wand, request_rec *r, device_table *spec) +{ + if (MagickSetImageCompression(magick_wand,NoCompression) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickSetImageFormat(magick_wand, "bmp") == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if (MagickStripImage(magick_wand) == MagickFalse) { + EXIT_MAGICK_ERROR(); + return -1; + } + + if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) + return -1; + + r->content_type = apr_psprintf(r->pool, "image/bmp"); + + DBG(r, "convert to bmp(unsupported)"); + return 0; +} + + static char * s_create_blob_data(request_rec *r, device_table *spec, @@ -920,104 +993,58 @@ s_create_blob_data(request_rec *r, } } - - DBG(r,"start convert and compression"); - - if (spec->available_jpeg) { - if (MagickSetImageCompression(magick_wand,JPEGCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; - } - - if (MagickSetImageFormat(magick_wand, "jpg") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; - } - - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; - } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return NULL; - - r->content_type = apr_psprintf(r->pool, "image/jpeg"); - - DBG(r, "convert to jpg"); - } - else - if (spec->available_png) { - if (MagickSetImageCompression(magick_wand,ZipCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + char *nowFormat = MagickGetImageFormat(magick_wand); + int fixFormatFlag = 0; + if (nowFormat) { + if (STRCASEEQ('g','G',"gif",nowFormat)) { + if (spec->available_gif) { + if (s_convert_to_gif(magick_wand, r, spec)) { + return NULL; + } + fixFormatFlag = 1; + } } - - if (MagickSetImageFormat(magick_wand, "png") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + else if (STRCASEEQ('j','J',"jpg",nowFormat)||STRCASEEQ('j','J',"jpeg",nowFormat)) { + if (spec->available_jpeg) { + if (s_convert_to_jpeg(magick_wand, r, spec)) { + return NULL; + } + fixFormatFlag = 1; + } } - - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + else if (STRCASEEQ('p','P',"png",nowFormat)) { + if (spec->available_png) { + if (s_convert_to_png(magick_wand, r, spec)) { + return NULL; + } + fixFormatFlag = 1; + } } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return NULL; - - r->content_type = apr_psprintf(r->pool, "image/png"); - - DBG(r,"convert to png"); } - else - if (spec->available_gif) { - if (MagickSetImageCompression(magick_wand,LZWCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; - } - - if (MagickSetImageFormat(magick_wand, "gif") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; - } + DBG(r,"start convert and compression"); - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + if (!fixFormatFlag) { + if (spec->available_jpeg) { + if (s_convert_to_jpeg(magick_wand, r, spec)) { + return NULL; + } } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return NULL; - - r->content_type = apr_psprintf(r->pool, "image/gif"); - - DBG(r,"convert to gif"); - } - else - if (spec->available_bmp2 || spec->available_bmp4) { - if (MagickSetImageCompression(magick_wand,NoCompression) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + else if (spec->available_png) { + if (s_convert_to_png(magick_wand, r, spec)) { + return NULL; + } } - - if (MagickSetImageFormat(magick_wand, "bmp") == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + else if (spec->available_gif) { + if (s_convert_to_gif(magick_wand, r, spec)) { + return NULL; + } } - - if (MagickStripImage(magick_wand) == MagickFalse) { - EXIT_MAGICK_ERROR(); - return NULL; + else if (spec->available_bmp2 || spec->available_bmp4) { + if (s_convert_to_bmp(magick_wand, r, spec)) { + return NULL; + } } - - if ((magick_wand = s_img_down_sizing(magick_wand, r, spec)) == NULL) - return NULL; - - r->content_type = apr_psprintf(r->pool, "image/bmp"); - - DBG(r,"convert to bmp(unsupported)"); } /*--------------------------------------------------------------------------*/ /* Add Comment (Copyright and so on.) */ -- 2.11.0