From 4b1c78f492a8d0267cb64c8408ca360e42afcf6a Mon Sep 17 00:00:00 2001 From: cristy Date: Fri, 11 Nov 2011 15:09:30 +0000 Subject: [PATCH] --- coders/ps.c | 71 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/coders/ps.c b/coders/ps.c index 52d8f3c57..eb0f9f60f 100644 --- a/coders/ps.c +++ b/coders/ps.c @@ -395,7 +395,8 @@ static Image *ReadPSImage(const ImageInfo *image_info,ExceptionInfo *exception) hex_digits[256]; size_t - length; + length, + priority; ssize_t count; @@ -483,9 +484,7 @@ static Image *ReadPSImage(const ImageInfo *image_info,ExceptionInfo *exception) (void) ResetMagickMemory(&hires_bounds,0,sizeof(hires_bounds)); (void) ResetMagickMemory(&page,0,sizeof(page)); (void) ResetMagickMemory(command,0,sizeof(command)); - hires_bounds.x2=0.0; - hires_bounds.y2=0.0; - columns=0; + priority=0; rows=0; extent=0; spotcolor=0; @@ -641,38 +640,54 @@ static Image *ReadPSImage(const ImageInfo *image_info,ExceptionInfo *exception) Note region defined by bounding box. */ count=0; + i=0; if (LocaleNCompare(BoundingBox,command,strlen(BoundingBox)) == 0) - count=(ssize_t) sscanf(command,BoundingBox " %lf %lf %lf %lf",&bounds.x1, - &bounds.y1,&bounds.x2,&bounds.y2); + { + count=(ssize_t) sscanf(command,BoundingBox " %lf %lf %lf %lf", + &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + i=2; + } if (LocaleNCompare(DocumentMedia,command,strlen(DocumentMedia)) == 0) - count=(ssize_t) sscanf(command,DocumentMedia " %*s %lf %lf",&bounds.x2, - &bounds.y2)+2; + { + count=(ssize_t) sscanf(command,DocumentMedia " %lf %lf %lf %lf", + &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + i=1; + } if (LocaleNCompare(HiResBoundingBox,command,strlen(HiResBoundingBox)) == 0) - count=(ssize_t) sscanf(command,HiResBoundingBox " %lf %lf %lf %lf", - &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + { + count=(ssize_t) sscanf(command,HiResBoundingBox " %lf %lf %lf %lf", + &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + i=3; + } if (LocaleNCompare(PageBoundingBox,command,strlen(PageBoundingBox)) == 0) - count=(ssize_t) sscanf(command,PageBoundingBox " %lf %lf %lf %lf", - &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + { + count=(ssize_t) sscanf(command,PageBoundingBox " %lf %lf %lf %lf", + &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + i=1; + } if (LocaleNCompare(PageMedia,command,strlen(PageMedia)) == 0) - count=(ssize_t) sscanf(command,PageMedia " %*s %lf %lf",&bounds.x2, - &bounds.y2)+2; - if (count != 4) - continue; - if (((bounds.x2 > hires_bounds.x2) && (bounds.y2 > hires_bounds.y2)) || - ((hires_bounds.x2 == 0.0) && (hires_bounds.y2 == 0.0))) { - /* - Set Postscript render geometry. - */ - (void) FormatLocaleString(geometry,MaxTextExtent, - "%gx%g%+.15g%+.15g",bounds.x2-bounds.x1,bounds.y2-bounds.y1, - bounds.x1,bounds.y1); - (void) SetImageProperty(image,"ps:HiResBoundingBox",geometry,exception); - page.width=(size_t) floor(bounds.x2-bounds.x1+0.5); - page.height=(size_t) floor(bounds.y2-bounds.y1+0.5); - hires_bounds=bounds; + count=(ssize_t) sscanf(command,PageMedia " %lf %lf %lf %lf", + &bounds.x1,&bounds.y1,&bounds.x2,&bounds.y2); + i=1; } + if ((count != 4) || (i < priority)) + continue; + hires_bounds=bounds; + priority=i; } + if (priority != 0) + { + /* + Set Postscript render geometry. + */ + (void) FormatLocaleString(geometry,MaxTextExtent,"%gx%g%+.15g%+.15g", + hires_bounds.x2-hires_bounds.x1,hires_bounds.y2-hires_bounds.y1, + hires_bounds.x1,hires_bounds.y1); + (void) SetImageProperty(image,"ps:HiResBoundingBox",geometry,exception); + page.width=(size_t) floor(hires_bounds.x2-hires_bounds.x1+0.5); + page.height=(size_t) floor(hires_bounds.y2-hires_bounds.y1+0.5); + } (void) CloseBlob(image); if (IsRGBColorspace(image_info->colorspace) != MagickFalse) cmyk=MagickFalse; -- 2.40.0