From: cristy Date: Sun, 6 Apr 2014 00:03:56 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~2495 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee85c65a0dd0cb18b5640eea2840d955b86bbf68;p=imagemagick --- diff --git a/PerlMagick/quantum/quantum.xs.in b/PerlMagick/quantum/quantum.xs.in index 69168da9a..d3682507e 100644 --- a/PerlMagick/quantum/quantum.xs.in +++ b/PerlMagick/quantum/quantum.xs.in @@ -74,6 +74,7 @@ extern "C" { #endif #define DegreesToRadians(x) (MagickPI*(x)/180.0) #define EndOf(array) (&array[NumberOf(array)]) +#define MagickPI 3.14159265358979323846264338327950288419716939937510 #define MaxArguments 33 #ifndef na #define na PL_na @@ -419,8 +420,8 @@ static struct {"channel", MagickChannelOptions} } }, { "WhiteThreshold", { {"threshold", StringReference}, {"channel", MagickChannelOptions} } }, - { "RadialBlur", { {"geometry", StringReference}, {"angle", RealReference}, - {"channel", MagickChannelOptions} } }, + { "RotationalBlur", { {"geometry", StringReference}, + {"angle", RealReference}, {"channel", MagickChannelOptions} } }, { "Thumbnail", { {"geometry", StringReference}, {"width", IntegerReference}, {"height", IntegerReference} } }, { "Strip", }, @@ -543,6 +544,9 @@ static struct { "Poly", { {"terms", ArrayReference}, {"channel", MagickChannelOptions} } }, { "Grayscale", { {"method", MagickNoiseOptions} } }, + { "CannyEdge", { {"geometry", StringReference}, + {"radius", RealReference}, {"sigma", RealReference}, + {"lower-percent", RealReference}, {"upper-percent", RealReference} } }, }; static SplayTreeInfo @@ -2380,7 +2384,7 @@ constant(name,argument) # void Animate(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: AnimateImage = 1 animate = 2 @@ -2459,7 +2463,7 @@ Animate(ref,...) # void Append(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: AppendImage = 1 append = 2 @@ -2597,7 +2601,7 @@ Append(ref,...) # void Average(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: AverageImage = 1 average = 2 @@ -2695,7 +2699,7 @@ Average(ref) # void BlobToImage(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: BlobToImage = 1 blobtoimage = 2 @@ -2851,7 +2855,7 @@ BlobToImage(ref,...) # void ChannelFx(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: ChannelFxImage = 1 channelfx = 2 @@ -3014,7 +3018,7 @@ ChannelFx(ref,...) # void Clone(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: CopyImage = 1 copy = 2 @@ -3143,7 +3147,7 @@ CLONE(ref,...) # void Coalesce(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: CoalesceImage = 1 coalesce = 2 @@ -3233,7 +3237,7 @@ Coalesce(ref) # void Compare(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: CompareImages = 1 compare = 2 @@ -3419,6 +3423,163 @@ Compare(ref,...) # # # # # # +# C o m p l e x I m a g e s # +# # +# # +# # +############################################################################### +# +# +void +ComplexImages(ref) + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT + ALIAS: + ComplexImages = 1 + compleximages = 2 + PPCODE: + { + AV + *av; + + char + *attribute, + *p; + + ComplexOperator + op; + + ExceptionInfo + *exception; + + HV + *hv; + + Image + *image; + + register ssize_t + i; + + struct PackageInfo + *info; + + SV + *perl_exception, + *reference, + *rv, + *sv; + + PERL_UNUSED_VAR(ref); + PERL_UNUSED_VAR(ix); + exception=AcquireExceptionInfo(); + perl_exception=newSVpv("",0); + sv=NULL; + if (sv_isobject(ST(0)) == 0) + { + ThrowPerlException(exception,OptionError,"ReferenceIsNotMyType", + PackageName); + goto PerlException; + } + reference=SvRV(ST(0)); + hv=SvSTASH(reference); + image=SetupList(aTHX_ reference,&info,(SV ***) NULL,exception); + if (image == (Image *) NULL) + { + ThrowPerlException(exception,OptionError,"NoImagesDefined", + PackageName); + goto PerlException; + } + op=UndefinedComplexOperator; + if (items == 2) + { + ssize_t + in; + + in=ParseCommandOption(MagickComplexOptions,MagickFalse,(char *) + SvPV(ST(1),na)); + if (in < 0) + { + ThrowPerlException(exception,OptionError,"UnrecognizedType", + SvPV(ST(1),na)); + return; + } + op=(ComplexOperator) in; + } + else + for (i=2; i < items; i+=2) + { + attribute=(char *) SvPV(ST(i-1),na); + switch (*attribute) + { + case 'O': + case 'o': + { + if (LocaleCompare(attribute,"operator") == 0) + { + ssize_t + in; + + in=!SvPOK(ST(i)) ? SvIV(ST(i)) : ParseCommandOption( + MagickComplexOptions,MagickFalse,SvPV(ST(i),na)); + if (in < 0) + { + ThrowPerlException(exception,OptionError,"UnrecognizedType", + SvPV(ST(i),na)); + return; + } + op=(ComplexOperator) in; + break; + } + ThrowPerlException(exception,OptionError,"UnrecognizedAttribute", + attribute); + break; + } + default: + { + ThrowPerlException(exception,OptionError,"UnrecognizedAttribute", + attribute); + break; + } + } + } + image=ComplexImages(image,op,exception); + if (image == (Image *) NULL) + goto PerlException; + /* + Create blessed Perl array for the returned image. + */ + av=newAV(); + ST(0)=sv_2mortal(sv_bless(newRV((SV *) av),hv)); + SvREFCNT_dec(av); + AddImageToRegistry(sv,image); + rv=newRV(sv); + av_push(av,sv_bless(rv,hv)); + SvREFCNT_dec(sv); + info=GetPackageInfo(aTHX_ (void *) av,info,exception); + (void) FormatLocaleString(info->image_info->filename,MaxTextExtent, + "complex-%.*s",(int) (MaxTextExtent-9), + ((p=strrchr(image->filename,'/')) ? p+1 : image->filename)); + (void) CopyMagickString(image->filename,info->image_info->filename, + MaxTextExtent); + SetImageInfo(info->image_info,0,exception); + exception=DestroyExceptionInfo(exception); + SvREFCNT_dec(perl_exception); + XSRETURN(1); + + PerlException: + InheritPerlException(exception,perl_exception); + exception=DestroyExceptionInfo(exception); + sv_setiv(perl_exception,(IV) SvCUR(perl_exception) != 0); + SvPOK_on(perl_exception); + ST(0)=sv_2mortal(perl_exception); + XSRETURN(1); + } + +# +############################################################################### +# # +# # +# # # C o m p a r e L a y e r s # # # # # @@ -3428,7 +3589,7 @@ Compare(ref,...) # void CompareLayers(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: CompareImagesLayers = 1 comparelayers = 2 @@ -3564,7 +3725,7 @@ CompareLayers(ref) # void DESTROY(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT PPCODE: { SV @@ -3649,7 +3810,7 @@ DESTROY(ref) # void Display(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: DisplayImage = 1 display = 2 @@ -3728,7 +3889,7 @@ Display(ref,...) # void EvaluateImages(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: EvaluateImages = 1 evaluateimages = 2 @@ -3885,7 +4046,7 @@ EvaluateImages(ref) # void Features(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: FeaturesImage = 1 features = 2 @@ -4060,7 +4221,7 @@ Features(ref,...) # void Flatten(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: FlattenImage = 1 flatten = 2 @@ -4197,7 +4358,7 @@ Flatten(ref) # void Fx(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: FxImage = 1 fx = 2 @@ -4360,7 +4521,7 @@ Fx(ref,...) # void Get(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: GetAttributes = 1 GetAttribute = 2 @@ -6098,7 +6259,7 @@ GetVirtualMetacontent(ref,...) # void Histogram(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: HistogramImage = 1 histogram = 2 @@ -6213,7 +6374,7 @@ Histogram(ref,...) # void GetPixel(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: getpixel = 1 getPixel = 2 @@ -6410,7 +6571,7 @@ GetPixel(ref,...) # void GetPixels(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: getpixels = 1 getPixels = 2 @@ -6658,7 +6819,7 @@ GetPixels(ref,...) # void ImageToBlob(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: ImageToBlob = 1 imagetoblob = 2 @@ -6764,7 +6925,7 @@ ImageToBlob(ref,...) # void Layers(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: Layers = 1 layers = 2 @@ -7059,7 +7220,7 @@ Layers(ref,...) # SV * MagickToMime(ref,name) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT char *name ALIAS: magicktomime = 1 @@ -7091,7 +7252,7 @@ MagickToMime(ref,name) # void Mogrify(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: Comment = 1 CommentImage = 2 @@ -7253,8 +7414,8 @@ Mogrify(ref,...) BlackThresholdImage= 160 WhiteThreshold = 161 WhiteThresholdImage= 162 - RadialBlur = 163 - RadialBlurImage = 164 + RotationalBlur = 163 + RotationalBlurImage= 164 Thumbnail = 165 ThumbnailImage = 166 Strip = 167 @@ -7367,6 +7528,8 @@ Mogrify(ref,...) PolyImage = 274 Grayscale = 275 GrayscaleImage = 276 + CannyEdge = 278 + CannyEdgeImage = 279 MogrifyRegion = 666 PPCODE: { @@ -9065,25 +9228,23 @@ Mogrify(ref,...) quantize_info->dither_method=(DitherMethod) argument_list[3].integer_reference; if (attribute_flag[4] != 0) - quantize_info->measure_error=argument_list[4].integer_reference != - 0 ? MagickTrue : MagickFalse; - if (attribute_flag[5] != 0) - (void) QueryColorCompliance(argument_list[5].string_reference, - AllCompliance,&image->transparent_color,exception); - if (attribute_flag[5] && argument_list[5].integer_reference) - { - (void) QuantizeImages(quantize_info,image,exception); - goto PerlException; - } + quantize_info->measure_error= + argument_list[4].integer_reference != 0 ? MagickTrue : MagickFalse; if (attribute_flag[6] != 0) + (void) QueryColorCompliance(argument_list[6].string_reference, + AllCompliance,&image->transparent_color,exception); + if (attribute_flag[7] != 0) quantize_info->dither_method=(DitherMethod) - argument_list[6].integer_reference; - if ((image->storage_class == DirectClass) || - (image->colors > quantize_info->number_colors) || - (quantize_info->colorspace == GRAYColorspace)) - (void) QuantizeImage(quantize_info,image,exception); + argument_list[7].integer_reference; + if (attribute_flag[5] && argument_list[5].integer_reference) + (void) QuantizeImages(quantize_info,image,exception); else - CompressImageColormap(image,exception); + if ((image->storage_class == DirectClass) || + (image->colors > quantize_info->number_colors) || + (quantize_info->colorspace == GRAYColorspace)) + (void) QuantizeImage(quantize_info,image,exception); + else + CompressImageColormap(image,exception); quantize_info=DestroyQuantizeInfo(quantize_info); break; } @@ -9831,7 +9992,7 @@ Mogrify(ref,...) (void) SetImageChannelMask(image,channel_mask); break; } - case 82: /* RadialBlur */ + case 82: /* RotationalBlur */ { if (attribute_flag[0] != 0) { @@ -9843,7 +10004,7 @@ Mogrify(ref,...) if (attribute_flag[2] != 0) channel=(ChannelType) argument_list[2].integer_reference; channel_mask=SetImageChannelMask(image,channel); - image=RadialBlurImage(image,geometry_info.rho,exception); + image=RotationalBlurImage(image,geometry_info.rho,exception); if (image != (Image *) NULL) (void) SetImageChannelMask(image,channel_mask); break; @@ -10936,6 +11097,36 @@ Mogrify(ref,...) (void) GrayscaleImage(image,method,exception); break; } + case 138: /* Canny */ + { + if (attribute_flag[0] != 0) + { + flags=ParseGeometry(argument_list[0].string_reference, + &geometry_info); + if ((flags & SigmaValue) == 0) + geometry_info.sigma=1.0; + if ((flags & XiValue) == 0) + geometry_info.xi=0.35; + if ((flags & PsiValue) == 0) + geometry_info.psi=0.75; + } + if (attribute_flag[1] != 0) + geometry_info.rho=argument_list[1].real_reference; + if (attribute_flag[2] != 0) + geometry_info.sigma=argument_list[2].real_reference; + if (attribute_flag[3] != 0) + geometry_info.xi=argument_list[3].real_reference; + if (attribute_flag[4] != 0) + geometry_info.psi=argument_list[4].real_reference; + if (attribute_flag[5] != 0) + channel=(ChannelType) argument_list[5].integer_reference; + channel_mask=SetImageChannelMask(image,channel); + image=CannyEdgeImage(image,geometry_info.rho,geometry_info.sigma, + geometry_info.xi,geometry_info.psi,exception); + if (image != (Image *) NULL) + (void) SetImageChannelMask(image,channel_mask); + break; + } } if (next != (Image *) NULL) (void) CatchImageException(next); @@ -10993,7 +11184,7 @@ Mogrify(ref,...) # void Montage(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: MontageImage = 1 montage = 2 @@ -11405,7 +11596,7 @@ Montage(ref,...) # void Morph(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: MorphImage = 1 morph = 2 @@ -11536,7 +11727,7 @@ Morph(ref,...) # void Mosaic(ref) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: MosaicImage = 1 mosaic = 2 @@ -11626,7 +11817,7 @@ Mosaic(ref) # void Ping(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: PingImage = 1 ping = 2 @@ -11835,7 +12026,7 @@ Ping(ref,...) # void Preview(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: PreviewImage = 1 preview = 2 @@ -11935,7 +12126,7 @@ Preview(ref,...) # void QueryColor(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: querycolor = 1 PPCODE: @@ -12015,7 +12206,7 @@ QueryColor(ref,...) # void QueryColorname(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: querycolorname = 1 PPCODE: @@ -12090,7 +12281,7 @@ QueryColorname(ref,...) # void QueryFont(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: queryfont = 1 PPCODE: @@ -12210,7 +12401,7 @@ QueryFont(ref,...) # void QueryFontMetrics(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: queryfontmetrics = 1 PPCODE: @@ -12621,7 +12812,7 @@ QueryFontMetrics(ref,...) # void QueryMultilineFontMetrics(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: querymultilinefontmetrics = 1 PPCODE: @@ -12994,7 +13185,7 @@ QueryMultilineFontMetrics(ref,...) # void QueryFormat(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: queryformat = 1 PPCODE: @@ -13086,7 +13277,7 @@ QueryFormat(ref,...) # void QueryOption(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: queryoption = 1 PPCODE: @@ -13146,7 +13337,7 @@ QueryOption(ref,...) # void Read(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: ReadImage = 1 read = 2 @@ -13364,7 +13555,7 @@ Read(ref,...) # void Remote(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: RemoteCommand = 1 remote = 2 @@ -13417,7 +13608,7 @@ Remote(ref,...) # void Set(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: SetAttributes = 1 SetAttribute = 2 @@ -13483,7 +13674,7 @@ Set(ref,...) # void SetPixel(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: setpixel = 1 setPixel = 2 @@ -13734,7 +13925,7 @@ SetPixel(ref,...) # void Smush(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: SmushImage = 1 smush = 2 @@ -13887,7 +14078,7 @@ Smush(ref,...) # void Statistics(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: StatisticsImage = 1 statistics = 2 @@ -14076,7 +14267,7 @@ SyncAuthenticPixels(ref,...) # void Transform(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: TransformImage = 1 transform = 2 @@ -14224,7 +14415,7 @@ Transform(ref,...) # void Write(ref,...) - Image::Magick::@MAGICK_ABI_SUFFIX@ ref=NO_INIT + Image::Magick::@MAGICK_ABI_SUFFIX@ ref = NO_INIT ALIAS: WriteImage = 1 write = 2