package.xml0000644000175000017500000006110414011267775011733 0ustar vitovito gmagick pecl.php.net Provides a wrapper to the GraphicsMagick library. Gmagick is a php extension to create, modify and obtain meta information of images using the GraphicsMagick API. Version 2.0.0RC1 onwards requires GraphicsMagick version 1.3.17+ and PHP 7.0.1+ Version 2.0.5RC1 onwards requires GraphicsMagick version 1.3.20+ and PHP 7.0.1+ If you're using versions of PHP below 7.0.1 but above 5.1.3, please use version Gmagick 1.1.7RC3 Vito Chin vito vito@php.net yes Mikko Koppanen mkoppanen mkoppanen@php.net yes Dan Ackroyd danack danack@php.net yes 2021-02-11 2.0.6RC1 2.0.6RC1 beta beta PHP License Works with PHP 8 but some fixes still required. 7.0.1 1.4.0 gmagick gmagick-2.0.6RC1/tests/bug63677.phpt0000644000175000017500000000234414011267774015420 0ustar vitovito--TEST-- Test bug 63677 - getimagehistogram --SKIPIF-- --FILE-- gmagick = $gmagick; $this->layers = new Layers($this, $this->gmagick); } public function __destruct() { if (null !== $this->gmagick && $this->gmagick instanceof \Gmagick) { $this->gmagick->clear(); $this->gmagick->destroy(); } } public function histogram() { return array_map( function(\GmagickPixel $pixel) { return new \stdClass(); }, $this->gmagick->getimagehistogram() ); } } class Layers { private $image; private $resource; public function __construct(Image $image, \Gmagick $resource) { $this->image = $image; $this->resource = $resource; } } for ($i=0; $i<5; $i++) { $image = new Image(new \Gmagick("magick:logo")); // the same fixture must beloaded twice to reprodcue the seg fault $image = new Image(new \Gmagick("magick:logo")); $image->histogram(); } echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/bug71626.phpt0000644000175000017500000000147614011267774015416 0ustar vitovito--TEST-- Test bug 71626 - multiple calls to queryFontMetrics --SKIPIF-- --FILE-- queryFontMetrics($fontDraw, 'g'); if (is_array($fontMetrics) === false || isset($fontMetrics['textWidth']) === false) { echo "fontMetrics contains bad data".PHP_EOL; var_dump($fontMetrics); } } for ($i=0; $i<5; $i++) { $gmagick = new \Gmagick("magick:logo"); $fontDraw = new GmagickDraw(); $fontMetrics = $image->queryFontMetrics($fontDraw, 'g'); if (is_array($fontMetrics) === false || isset($fontMetrics['textWidth']) === false) { echo "fontMetrics contains bad data".PHP_EOL; var_dump($fontMetrics); } } echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/bug_71742.phpt0000644000175000017500000000175014011267774015547 0ustar vitovito--TEST-- Bug #71742 polyline touched by array_walk --SKIPIF-- 2 * $index, 'y' => pow($index, 2) ); } $callback = function (&$coordinate) { $coordinate['y'] = 200 - $coordinate['y'] / 50; }; array_walk($coordinates, $callback); $imagick = new GMagick(); $imagick->newImage(200, 200, "white"); $draw = new GmagickDraw(); $draw->setFillColor("none"); $draw->setStrokeColor("black"); //Fatal error in PHP 7, but not in PHP <= 5.6 $draw->polyline($coordinates); $draw->translate(0, -20); ////Works in PHP 7 $draw->polyline (array_values($coordinates)); $imagick->drawImage($draw); //$imagick->writeImage(getcwd(). "/test.png"); $imagick->setImageFormat('png'); $bytes = $imagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image."; } //$imagick->writeImage("./bugTest.png"); echo "Ok"; ?> --EXPECT-- Okgmagick-2.0.6RC1/tests/skipif.inc0000644000175000017500000000037214011267774015310 0ustar vitovito --FILE-- readImage("magick:rose")->writeImage($filename); unlink($filename); echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/gmagick-002-crop_variations.phpt0000644000175000017500000000067714011267774021336 0ustar vitovito--TEST-- Test crop with and without an image --SKIPIF-- --FILE-- read("magick:rose")->cropImage(10, 10, 10, 10); echo "ok\n--\n"; $gm = new Gmagick(); try { $gm->cropImage(10, 10, 10, 10); } catch (GmagickException $e) { echo "got exception"; } ?> --EXPECTF-- ok -- got exceptiongmagick-2.0.6RC1/tests/gmagick-003-resize_variations.phpt0000644000175000017500000000065514011267774021671 0ustar vitovito--TEST-- Test resize --SKIPIF-- --FILE-- resizeImage(10, 10, 0.5, Gmagick::FILTER_LANCZOS); $gm->resizeImage(10, 10, 0.5, Gmagick::FILTER_UNDEFINED, true); $gm->resizeImage(10, 10, 0.5, Gmagick::FILTER_GAUSSIAN, false); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-004-composite_variations.phpt0000644000175000017500000000101014011267774022355 0ustar vitovito--TEST-- Test composite variations --SKIPIF-- --FILE-- compositeImage($source, Gmagick::COMPOSITE_OVER, 0, 0); } catch (Exception $e) { echo "got exception\n"; } $source->read("magick:rose"); $gm->compositeImage($source, Gmagick::COMPOSITE_OVER, 0, 0); echo "ok"; ?> --EXPECTF-- got exception okgmagick-2.0.6RC1/tests/gmagick-005-draw.phpt0000644000175000017500000000105214011267774017060 0ustar vitovito--TEST-- Test read/write --SKIPIF-- --FILE-- setStrokeColor($pixel)->setStrokeWidth( 2 )->setFillColor($pixel)->ellipse( 200, 100, 50, 50, 0, 360 ); $filename = dirname(__FILE__) . '/test_constructor.jpg'; $gm = new GMagick("magick:rose"); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/gmagick-006-annotateimage.phpt0000644000175000017500000000063714011267774020750 0ustar vitovito--TEST-- Test annotate image --SKIPIF-- --FILE-- read("magick:rose"); $fonts = $gm->queryFonts(); if (!empty($fonts)) $gd->setFont($fonts[0]); $gm->annotateImage($gd, 5, 15, 0, 'Test Text'); echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/gmagick-007-blurimage.phpt0000644000175000017500000000057314011267774020103 0ustar vitovito--TEST-- Test blur image --SKIPIF-- --FILE-- read("magick:rose"); $gm->blurImage(5, 3); $gm->writeImage($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagick-008-addimage.phpt0000644000175000017500000000045514011267774017667 0ustar vitovito--TEST-- Test add image --SKIPIF-- --FILE-- read("magick:rose"); $gm->addImage($image); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagick-009-addimagenoise.phpt0000644000175000017500000000046414011267774020726 0ustar vitovito--TEST-- Test addnoiseimage image --SKIPIF-- --FILE-- read("magick:rose"); $gm->addNoiseImage(Gmagick::COLOR_BLACK); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagick-010-borderimage.phpt0000644000175000017500000000063414011267774020404 0ustar vitovito--TEST-- Test border image --SKIPIF-- --FILE-- read("magick:rose"); $color=new GmagickPixel("rgb(255,255,255)"); $gm->borderImage($color,3,3); $gm->write($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagick-011-charcoalimage.phpt0000644000175000017500000000055614011267774020707 0ustar vitovito--TEST-- Test charcoal image --SKIPIF-- --FILE-- read("magick:rose"); $gm->charcoalImage(3,3); $gm->write($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagick-012-chopimage.phpt0000644000175000017500000000055414011267774020063 0ustar vitovito--TEST-- Test chop image --SKIPIF-- --FILE-- read("magick:rose"); $gm->chopImage(10, 10, 0, 0); $gm->write($filename); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-013-commentimage.phpt0000644000175000017500000000044614011267774020575 0ustar vitovito--TEST-- Test commentImage --SKIPIF-- --FILE-- read("magick:rose"); $gm->commentImage("Test Comment"); echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/gmagick-014-current.phpt0000644000175000017500000000042014011267774017603 0ustar vitovito--TEST-- Test current --SKIPIF-- --FILE-- read("magick:rose"); $gm2 = $gm->current(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-015-cyclecolormapimage.phpt0000644000175000017500000000044014011267774021763 0ustar vitovito--TEST-- Test current --SKIPIF-- --FILE-- read("magick:rose"); $gm->cycleColorMapImage(2); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-016-despeckleimage.phpt0000644000175000017500000000043214011267774021070 0ustar vitovito--TEST-- Despeckle image --SKIPIF-- --FILE-- read("magick:rose"); $gm->despeckleImage(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-017-destroy.phpt0000644000175000017500000000040414011267774017617 0ustar vitovito--TEST-- Destroy --SKIPIF-- --FILE-- read("magick:rose"); $gm->destroy(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-018-edgeimage.phpt0000644000175000017500000000041014011267774020033 0ustar vitovito--TEST-- Edge --SKIPIF-- --FILE-- read("magick:rose"); $gm->edgeImage(0.8); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-019-embossimage.phpt0000644000175000017500000000042314011267774020424 0ustar vitovito--TEST-- Emboss --SKIPIF-- --FILE-- read("magick:rose"); $gm->embossImage(0.8, 0.5); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-020-enhanceimage.phpt0000644000175000017500000000041614011267774020527 0ustar vitovito--TEST-- Enhance --SKIPIF-- --FILE-- read("magick:rose"); $gm->enhanceImage(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-021-equalizeimage.phpt0000644000175000017500000000042114011267774020742 0ustar vitovito--TEST-- Equalize --SKIPIF-- --FILE-- read("magick:rose"); $gm->equalizeImage(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-022-flip_and_flop_image.phpt0000644000175000017500000000045114011267774022062 0ustar vitovito--TEST-- Flip and flop image --SKIPIF-- --FILE-- read("magick:rose"); $gm->flipImage()->flopImage(); echo "1"; ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-023-gammaimage.phpt0000644000175000017500000000041714011267774020214 0ustar vitovito--TEST-- Gamma image --SKIPIF-- --FILE-- read("magick:rose"); $gm->gammaImage(0.8); echo "1"; ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-024-getcopyright_getfilename.phpt0000755000175000017500000000050514011267774023201 0ustar vitovito--TEST-- Test getCopyright, getFileName --SKIPIF-- --FILE-- read("magick:rose"); $gm->getCopyright(); $gm->getFilename(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-025-set_and_getimageckgroundcolor.phpt0000755000175000017500000000106014011267774024202 0ustar vitovito--TEST-- Test setImageBackgroundColor and getImageBackgroundColor methods --SKIPIF-- --FILE-- read("magick:rose"); $color=new GmagickPixel("rgb(255,255,255)"); $pixel = $gm->setImageBackgroundColor($color)->getimagebackgroundcolor(); print_r($pixel->getColor()); ?> --EXPECTF-- rgb(255,255,255) gmagick-2.0.6RC1/tests/gmagick-025-set_and_getimageckgroundcolor_q16.phpt0000644000175000017500000000106714011267774024675 0ustar vitovito--TEST-- Test setImageBackgroundColor and getImageBackgroundColor methods --SKIPIF-- --FILE-- read("magick:rose"); $color=new GmagickPixel("rgb(255,255,255)"); $pixel = $gm->setImageBackgroundColor($color)->getimagebackgroundcolor(); print_r($pixel->getColor()); ?> --EXPECTF-- rgb(65535,65535,65535) gmagick-2.0.6RC1/tests/gmagick-026-set_getimageblueprimary.phpt0000644000175000017500000000057114011267774023044 0ustar vitovito--TEST-- Set, get imageblueprimary test --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->setImageBluePrimary(0.2, 0.2)->getImageBluePrimary()); ?> --EXPECTF-- Array ( [x] => 0.2 [y] => 0.2 )gmagick-2.0.6RC1/tests/gmagick-027-set_getimagebordercolor.phpt0000644000175000017500000000076614011267774023034 0ustar vitovito--TEST-- Imagebordercolor test --SKIPIF-- --FILE-- read("magick:rose"); $color=new GmagickPixel("rgb(255,255,255)"); $pixel = $gm->setImageBorderColor($color)->getImageBorderColor(); print_r($pixel->getColor()); ?> --EXPECTF-- rgb(255,255,255) gmagick-2.0.6RC1/tests/gmagick-027-set_getimagebordercolor_q16.phpt0000644000175000017500000000077514011267774023523 0ustar vitovito--TEST-- Imagebordercolor test --SKIPIF-- --FILE-- read("magick:rose"); $color=new GmagickPixel("rgb(255,255,255)"); $pixel = $gm->setImageBorderColor($color)->getImageBorderColor(); print_r($pixel->getColor()); ?> --EXPECTF-- rgb(65535,65535,65535) gmagick-2.0.6RC1/tests/gmagick-028-set_getimagechanneldepth.phpt0000644000175000017500000000051714011267774023150 0ustar vitovito--TEST-- Set, get imagechanneldepth test --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageChannelDepth(1,1)->getImageChannelDepth(1); ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-029-set_getimagecolorspace.phpt0000644000175000017500000000050414011267774022642 0ustar vitovito--TEST-- Set, get imagecolorspace test --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageColorspace(2)->getImageColorspace(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/gmagick-030-getimagecolors.phpt0000644000175000017500000000043614011267774021132 0ustar vitovito--TEST-- Getimagecolors test --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->getImageColors()); ?> --EXPECTF-- 3019gmagick-2.0.6RC1/tests/gmagick-031-set_getimagecompose.phpt0000644000175000017500000000046714011267774022156 0ustar vitovito--TEST-- Set and get image compose --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageCompose(1)->getImageCompose(); ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-032-set_getimagedelay.phpt0000644000175000017500000000046014011267774021601 0ustar vitovito--TEST-- Set, getimagedelay test --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageDelay(2)->getImageDelay(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/gmagick-033-set_getimagedepth.phpt0000644000175000017500000000045214011267774021611 0ustar vitovito--TEST-- Set, getimagedepth --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageDepth(2)->getImageDepth(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/gmagick-034-set_getimagedispose.phpt0000644000175000017500000000046014011267774022153 0ustar vitovito--TEST-- Set, getimagedepth --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageDispose(2)->getImageDispose(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/gmagick-035-set_getfilename.phpt0000644000175000017500000000050414011267774021262 0ustar vitovito--TEST-- Set, get filename --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setFilename("magickrose.png")->getFilename(); ?> --EXPECTF-- magickrose.pnggmagick-2.0.6RC1/tests/gmagick-036-set_getimagefilename.phpt0000644000175000017500000000052314011267774022267 0ustar vitovito--TEST-- Set, get imagefilename --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageFilename('magickrose.png')->getImageFilename(); ?> --EXPECTF-- magickrose.pnggmagick-2.0.6RC1/tests/gmagick-037-set_getimagegamma.phpt0000644000175000017500000000046014011267774021572 0ustar vitovito--TEST-- Set, get image gamma --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageGamma(0.2)->getImageGamma(); ?> --EXPECTF-- 0.2gmagick-2.0.6RC1/tests/gmagick-038-setimagegreenprimary.phpt0000644000175000017500000000056414011267774022363 0ustar vitovito--TEST-- Set, get imagegreenprimary --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->setImageGreenPrimary(0.2, 0.2)->getImageGreenPrimary()); ?> --EXPECTF-- Array ( [x] => 0.2 [y] => 0.2 )gmagick-2.0.6RC1/tests/gmagick-039-getimageheight.phpt0000644000175000017500000000043214011267774021106 0ustar vitovito--TEST-- Set, get image height --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->getImageHeight(); ?> --EXPECTF-- 46gmagick-2.0.6RC1/tests/gmagick-040-getimagehistogram.phpt0000644000175000017500000000045114011267774021624 0ustar vitovito--TEST-- Set, get image histogram --SKIPIF-- --FILE-- read("magick:rose"); $gm->getImageHistogram(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-041-set_getimageinterlacescheme.phpt0000644000175000017500000000052514011267774023640 0ustar vitovito--TEST-- Set, get image interlace scheme --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageInterlaceScheme(1)->getImageInterlaceScheme(); ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-042-set_getimageiterations.phpt0000755000175000017500000000050014011267774022663 0ustar vitovito--TEST-- Set, get image iterations --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageIterations(2)->getImageIterations(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/gmagick-043-set_getimageprofile.phpt0000755000175000017500000000053114011267774022147 0ustar vitovito--TEST-- Set, get imageprofile --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageProfile("test", "test_profile")->getImageProfile("test"); ?> --EXPECTF-- test_profilegmagick-2.0.6RC1/tests/gmagick-044-set_getimageredprimary.phpt0000755000175000017500000000056014011267774022670 0ustar vitovito--TEST-- Set, get imageredprimary --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->setImageRedPrimary(0.2, 0.2)->getImageRedPrimary()); ?> --EXPECTF-- Array ( [x] => 0.2 [y] => 0.2 )gmagick-2.0.6RC1/tests/gmagick-045-set_getimagerenderingintent.phpt0000755000175000017500000000052314011267774023711 0ustar vitovito--TEST-- Set, get imagerenderingintent --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageRenderingIntent(1)->getImageRenderingIntent(); ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-046-set_getimagerresolution.phpt0000755000175000017500000000056014011267774023101 0ustar vitovito--TEST-- Set, get imageresolution --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->setImageResolution(0.2,0.2)->getImageResolution()); ?> --EXPECTF-- Array ( [x] => 0.2 [y] => 0.2 )gmagick-2.0.6RC1/tests/gmagick-047-set_getimagescene.phpt0000755000175000017500000000045314011267774021613 0ustar vitovito--TEST-- Set, get imagescene --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageScene(1)->getImageScene(); ?> --EXPECTF-- 1gmagick-2.0.6RC1/tests/gmagick-048-getimagesignature.phpt0000755000175000017500000000054014011267774021642 0ustar vitovito--TEST-- Set, get imagesignature --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->getImageSignature(); ?> --EXPECTF-- 8b19185a62241bd7b79ecf3f619711f4ebbedd73eaeca0366f05778762b6614fgmagick-2.0.6RC1/tests/gmagick-049-set_getimagetype.phpt0000755000175000017500000000044714011267774021504 0ustar vitovito--TEST-- Set, get imagetype --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageType(6)->getImageType(); ?> --EXPECTF-- 6gmagick-2.0.6RC1/tests/gmagick-050-set_getimageunits.phpt0000755000175000017500000000045314011267774021652 0ustar vitovito--TEST-- Set, get imageunits --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->setImageUnits(2)->getImageUnits(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/gmagick-051-set_getimagewhitepoint.phpt0000755000175000017500000000056014011267774022702 0ustar vitovito--TEST-- Set, get imagewhitepoint --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->setImageWhitePoint(0.2, 0.2)->getImageWhitePoint()); ?> --EXPECTF-- Array ( [x] => 0.2 [y] => 0.2 )gmagick-2.0.6RC1/tests/gmagick-052-getimagewidth.phpt0000755000175000017500000000042114011267774020751 0ustar vitovito--TEST-- get imagewidth --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->getImageWidth(); ?> --EXPECTF-- 70gmagick-2.0.6RC1/tests/gmagick-053-getpackagename.phpt0000755000175000017500000000044014011267774021065 0ustar vitovito--TEST-- get packagename --SKIPIF-- --FILE-- read("magick:rose"); echo $gm->getPackageName(); ?> --EXPECTF-- GraphicsMagickgmagick-2.0.6RC1/tests/gmagick-054-getquantumdepth.phpt0000755000175000017500000000135214011267774021354 0ustar vitovito--TEST-- get quantumdepth --SKIPIF-- --FILE-- read("magick:rose"); $q=$gm->getQuantumDepth(); if (is_array($q) && count($q)==2 && isset($q['quantumDepthLong']) && isset($q['quantumDepthString'])) { echo "Struct OK\n"; if ($q['quantumDepthLong']=='8' && $q['quantumDepthString']=='Q8') { echo "Quantum OK\n"; } else if ($q['quantumDepthLong']=='16' && $q['quantumDepthString']=='Q16') { echo "Quantum OK\n"; } else { echo "Quantum KO\n"; print_r($q); } } else { echo "Struct KO\n"; print_r($q); } ?> --EXPECTF-- Struct OK Quantum OKgmagick-2.0.6RC1/tests/gmagick-055-getreleasedate.phpt0000755000175000017500000000043214011267774021112 0ustar vitovito--TEST-- get releasedate --SKIPIF-- --FILE-- read("magick:rose"); $gm->getReleaseDate(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-056-set_getsamplingfactors.phpt0000755000175000017500000000060314011267774022704 0ustar vitovito--TEST-- Set, getsamplingfactors --SKIPIF-- --FILE-- read("magick:rose"); $samples = array(1, 2); print_r($gm->setSamplingFactors($samples)->getSamplingFactors()); ?> --EXPECTF-- Array ( [0] => 1 [1] => 2 )gmagick-2.0.6RC1/tests/gmagick-057-set_getsize.phpt0000755000175000017500000000051514011267774020465 0ustar vitovito--TEST-- set,get size test --SKIPIF-- --FILE-- read("magick:rose"); print_r($gm->setSize(20, 20)->getSize()); ?> --EXPECTF-- Array ( [columns] => 20 [rows] => 20 )gmagick-2.0.6RC1/tests/gmagick-058-getversion.phpt0000755000175000017500000000042314011267774020324 0ustar vitovito--TEST-- getVersion test --SKIPIF-- --FILE-- read("magick:rose"); $gm->getVersion(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-059-hasnextimage.phpt0000755000175000017500000000043114011267774020614 0ustar vitovito--TEST-- hasNextImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->hasNextImage(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-060-haspreviousimage.phpt0000755000175000017500000000044514011267774021507 0ustar vitovito--TEST-- hasPreviousImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->hasPreviousImage(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-061-implodeimage.phpt0000755000175000017500000000043514011267774020570 0ustar vitovito--TEST-- implode image test --SKIPIF-- --FILE-- read("magick:rose"); $gm->implodeImage(0.5); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-062-labelimage.phpt0000755000175000017500000000043114011267774020213 0ustar vitovito--TEST-- labelImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->labelImage("test"); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-063-levelimage.phpt0000755000175000017500000000044014011267774020244 0ustar vitovito--TEST-- levelImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->levelImage(0.2, 0.2, 0.2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-064-magnifyimage.phpt0000755000175000017500000000043014011267774020567 0ustar vitovito--TEST-- magnifyImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->magnifyImage(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-065-mapimage.phpt0000755000175000017500000000063414011267774017721 0ustar vitovito--TEST-- mapImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm2->read("magick:rose"); $gm->mapImage($gm2, true); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-066-medianfilterimage.phpt0000755000175000017500000000045214011267774021606 0ustar vitovito--TEST-- medianFilterImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->medianFilterImage(0.5); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-067-minifyimage.phpt0000755000175000017500000000042614011267774020440 0ustar vitovito--TEST-- minifyImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->minifyImage(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-068-modulateimage.phpt0000755000175000017500000000045114011267774020756 0ustar vitovito--TEST-- modulateImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->modulateImage(0.2, 0.2, 0.2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-069-trimimage.phpt0000755000175000017500000000042214011267774020116 0ustar vitovito--TEST-- trimImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->trimImage(0.5); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-070-motionblurimage.phpt0000755000175000017500000000045214011267774021330 0ustar vitovito--TEST-- motionblur test --SKIPIF-- --FILE-- read("magick:rose"); $gm->motionBlurImage(0.2, 0.2, 0.2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-071-next_previousimage.phpt0000755000175000017500000000047014011267774022051 0ustar vitovito--TEST-- next,previousImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->nextImage(); $gm->previousImage(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-072-oilpaintimage.phpt0000755000175000017500000000043714011267774020762 0ustar vitovito--TEST-- oilPaintImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->oilPaintImage(0.2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-073-profileimage.phpt0000755000175000017500000000046214011267774020602 0ustar vitovito--TEST-- profileImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->profileImage('icc', 'test_icc_profile'); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-074-quantizeimage.phpt0000755000175000017500000000045714011267774021007 0ustar vitovito--TEST-- quantizeImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->quantizeImage(2, 2, 2, true, true); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-075-quantizeimages.phpt0000755000175000017500000000046214011267774021167 0ustar vitovito--TEST-- quantizeImages test --SKIPIF-- --FILE-- read("magick:rose"); $gm->quantizeImages(2, 2, 2, true, true); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-076-queryfonts.phpt0000755000175000017500000000042314011267774020356 0ustar vitovito--TEST-- queryFonts test --SKIPIF-- --FILE-- read("magick:rose"); $gm->queryFonts(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-077-cropthumbnail.phpt0000644000175000017500000000420414011267774021005 0ustar vitovito--TEST-- cropthumbnail test --SKIPIF-- --FILE-- read("magick:rose"); $gm->cropThumbnailImage(3, 3); //Test the the calculated values are actually correct. $desired_height = 250; $imageWidth = 1128; //Test the the calculated values are actually correct. $desired_height = 250; $imageWidth = 1128; $imageHeight = 1128; $legacySettings = array(0, 1); foreach($legacySettings as $legacy) { for ($desired_width = 245; $desired_width < 255; $desired_width++) { $gmagick = new Gmagick(); $gmagick->newImage ($imageWidth, $imageHeight, 'blue'); $gmagick->cropThumbnailImage( $desired_width, $desired_height, $legacy ); $error = false; $thumbnailImageWidth = $gmagick->getImageWidth(); $thumbnailImageHeight = $gmagick->getImageHeight(); if ($thumbnailImageHeight != $desired_height) { echo "Incorrect height for desired_width $desired_width imageHeight $imageHeight".PHP_EOL; $error = true; } $expectedWidth = $desired_width; $expectedHeight = $desired_height; if ($legacy == true && $desired_width == 250 && $desired_height == 250) { // The legacy behaviour is to generate a wrong size for this setting. // Thumbnail size of 249 x 250 does not matched desired size 250 x 250 // for source image of 1128 x 1128 $expectedWidth = 249; } if ($thumbnailImageWidth != $expectedWidth) { echo "Unexpected width of $thumbnailImageWidth for desired_width $desired_width, expected width is $expectedWidth".PHP_EOL; $error = true; } if ($thumbnailImageHeight != $expectedHeight) { echo "Unexpected height $thumbnailImageHeight for desired_width $desired_width, expected height is $expectedHeight".PHP_EOL; $error = true; } if ($error) { printf( "Thumbnail size of %d x %d does not matched expected size %d x %d for source image of %d x %d. Legacy is %d\n", $thumbnailImageWidth, $thumbnailImageHeight, $desired_width, $desired_height, $imageWidth, $imageHeight, $legacy ); } } } echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-078-rollimage.phpt0000755000175000017500000000042214011267774020113 0ustar vitovito--TEST-- rollImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->rollImage(5,5); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-079-rotateimage.phpt0000755000175000017500000000051514011267774020445 0ustar vitovito--TEST-- rotateImage test --SKIPIF-- --FILE-- read("magick:rose"); $color=new GmagickPixel("rgb(255,255,255)"); $gm->rotateImage($color, 0.8); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-080-scaleimage.phpt0000755000175000017500000000042614011267774020227 0ustar vitovito--TEST-- scaleImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->scaleImage(5, 5); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-081-separateimagechannel.phpt0000755000175000017500000000046114011267774022275 0ustar vitovito--TEST-- separateImageChannel test --SKIPIF-- --FILE-- read("magick:rose"); $gm->separateImageChannel(1); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-082-shearimage.phpt0000755000175000017500000000051714011267774020245 0ustar vitovito--TEST-- shearImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->shearImage($color, 0.2, 0.2); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-083-solarizeimage.phpt0000755000175000017500000000043414011267774020772 0ustar vitovito--TEST-- solarizeImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->solarizeImage(1); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-084-spreadimage.phpt0000755000175000017500000000043014011267774020415 0ustar vitovito--TEST-- spreadImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->spreadImage(0.2); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-085-stripimage.phpt0000755000175000017500000000042214011267774020302 0ustar vitovito--TEST-- stripImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->stripImage(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-086-swirlimage.phpt0000755000175000017500000000042514011267774020305 0ustar vitovito--TEST-- swirlImage test --SKIPIF-- --FILE-- read("magick:rose"); $gm->swirlImage(0.2); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-087-setcompressionquality.phpt0000644000175000017500000000046514011267774022632 0ustar vitovito--TEST-- setCompressionQuality test --SKIPIF-- --FILE-- read("magick:rose"); $gm->setCompressionQuality(2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-088-getimageblob.phpt0000644000175000017500000000043514011267774020563 0ustar vitovito--TEST-- getimageBlob test --SKIPIF-- --FILE-- getimageBlob(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-089-getnumberimages.phpt0000644000175000017500000000043014011267774021314 0ustar vitovito--TEST-- getNumberImages test --SKIPIF-- --FILE-- getNumberImages()); ?> --EXPECTF-- 1 gmagick-2.0.6RC1/tests/gmagick-090-setimage.phpt0000644000175000017500000000050014011267774017722 0ustar vitovito--TEST-- setImage test --SKIPIF-- --FILE-- setImage($replace); echo "1"; ?> --EXPECTF-- 1 gmagick-2.0.6RC1/tests/gmagick-091-getimage.phpt0000644000175000017500000000040414011267774017712 0ustar vitovito--TEST-- getImage test --SKIPIF-- --FILE-- getImage(); echo "1"; ?> --EXPECTF-- 1 gmagick-2.0.6RC1/tests/gmagick-092-getimagegeometry.phpt0000644000175000017500000000050514011267774021471 0ustar vitovito--TEST-- setImage test --SKIPIF-- --FILE-- getImageGeometry()); ?> --EXPECTF-- Array ( [width] => 70 [height] => 46 ) gmagick-2.0.6RC1/tests/gmagick-093-flattenimages.phpt0000644000175000017500000000043014011267774020754 0ustar vitovito--TEST-- setImage test --SKIPIF-- --FILE-- flattenImages(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-094-thresholdimage.phpt0000644000175000017500000000031314011267774021131 0ustar vitovito--TEST-- thresholdImage test --SKIPIF-- --FILE-- thresholdImage(2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-095-negateimage.phpt0000644000175000017500000000031014011267774020376 0ustar vitovito--TEST-- negateImage test --SKIPIF-- --FILE-- negateImage(TRUE); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-096-setinterlacescheme.phpt0000644000175000017500000000035114011267774022005 0ustar vitovito--TEST-- setInterlaceScheme test --SKIPIF-- --FILE-- setInterlaceScheme(Gmagick::INTERLACE_LINE); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-097-sampleimage.phpt0000644000175000017500000000031014011267774020416 0ustar vitovito--TEST-- sampleimage test --SKIPIF-- --FILE-- sampleimage(5, 5); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-098-cloneimage.phpt0000644000175000017500000000031414011267774020242 0ustar vitovito--TEST-- cloneimage test --SKIPIF-- --FILE-- cloneimage(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-099-appendimages.phpt0000644000175000017500000000035114011267774020576 0ustar vitovito--TEST-- appendimages test --SKIPIF-- --FILE-- newImage(100, 50, "blue"); $image->appendImages(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-100-coalesceimages.phpt0000644000175000017500000000042214011267774021063 0ustar vitovito--TEST-- coalesceimages test --SKIPIF-- --FILE-- newImage(100, 50, "blue"); $image->newImage(100, 50, "yellow"); $image->coalesceImages(); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-101-sharpenimage.phpt0000644000175000017500000000031614011267774020565 0ustar vitovito--TEST-- sharpenimage test --SKIPIF-- --FILE-- sharpenImage(1.5, 1.2); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-102-unsharpenmaskimage.phpt0000644000175000017500000000034014011267774022002 0ustar vitovito--TEST-- unsharpmaskimage test --SKIPIF-- --FILE-- unsharpMaskImage(0 , 0.5 , 1 , 0.05); echo "ok"; ?> --EXPECTF-- ok gmagick-2.0.6RC1/tests/gmagick-103-setgetimagecompression.phpt0000644000175000017500000000040414011267774022702 0ustar vitovito--TEST-- setImageCompression test --SKIPIF-- --FILE-- setImageCompression(Gmagick::COMPRESSION_JPEG); echo $image->getImageCompression(); ?> --EXPECTF-- 5gmagick-2.0.6RC1/tests/gmagick-104-setgetimagepage.phpt0000644000175000017500000000071314011267774021261 0ustar vitovito--TEST-- Gmagick::setImagePage test --SKIPIF-- --FILE-- setImagePage(10,10,10,10); $result = $image->getImagePage(); if (($result['width'] === 10) && ($result['height'] === 10) && ($result['x'] === 10) && ($result['y'] === 10)) { echo "ok"; } ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-105-readimageblob.phpt0000644000175000017500000000070714011267774020707 0ustar vitovito--TEST-- Gmagick::readImageBlob --SKIPIF-- --FILE-- setImageFormat('png'); $imageBlob = $image->getImageBlob(); $imageReload = new Gmagick(); $imageReload->readImageBlob($imageBlob); printf( "Dimensions are %d x %d\n", $imageReload->getImageWidth(), $imageReload->getImageHeight() ); echo "ok"; ?> --EXPECTF-- Dimensions are 70 x 46 okgmagick-2.0.6RC1/tests/gmagick-106-testConstants.phpt0000644000175000017500000000055314011267774021006 0ustar vitovito--TEST-- Test contants have symbols. --SKIPIF-- --FILE-- getConstants(); echo "ok"; ?> --EXPECTF-- okgmagick-2.0.6RC1/tests/gmagick-107_setimagevirtualpixelmethod.phpt0000644000175000017500000000273614011267774023672 0ustar vitovito--TEST-- Test Tutorial, edgeExtend --SKIPIF-- --FILE-- setImageVirtualPixelMethod($virtualPixelType); $gmagick->scaleimage(400, 300, true); $gmagick->setimagebackgroundcolor('pink'); $desiredWidth = 600; $originalWidth = $gmagick->getImageWidth(); //Make the image be the desired width. $gmagick->sampleimage($desiredWidth, $gmagick->getImageHeight()); //Now scale, rotate, translate (aka affine project) it //to be how you want $points = array(//The x scaling factor is 0.5 when the desired width is double //the source width ($originalWidth / $desiredWidth), 0, //Don't scale vertically 0, 1, //Offset the image so that it's in the centre ($desiredWidth - $originalWidth) / 2, 0); $amplitude = 5; $length = 20; $gmagick->waveImage($amplitude, $length); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} //Fyi it may be easier to think of the affine transform by //how it works for a rotation: //$affineRotate = array( // "sx" => cos($angle), // "sy" => cos($angle), // "rx" => sin($angle), // "ry" => -sin($angle), // "tx" => 0, // "ty" => 0, //); } edgeExtend($virtualPixelType) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-108_adaptiveThresholdImage_basic.phpt0000644000175000017500000000125114011267774023770 0ustar vitovito--TEST-- Test Gmagick, adaptiveThresholdImage --SKIPIF-- --FILE-- adaptiveThresholdImage($width, $height, $adaptiveOffsetQuantum); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } adaptiveThresholdImage($width, $height, $adaptiveOffset) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-109_affineTransformImage_basic.phpt0000644000175000017500000000130014011267774023436 0ustar vitovito--TEST-- Test Gmagick, affineTransformImage --SKIPIF-- --FILE-- cos($angle), "sy" => cos($angle), "rx" => sin($angle), "ry" => -sin($angle), "tx" => 0, "ty" => 0, ); $draw->affine($affineRotate); $gmagick->affineTransformImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } affineTransformImage() ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-110_blackThresholdImage_basic.phpt0000644000175000017500000000101414011267774023235 0ustar vitovito--TEST-- Test Gmagick, blackThresholdImage --SKIPIF-- --FILE-- blackthresholdimage($thresholdColor); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } blackThresholdImage($thresholdColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-111_whiteThresholdImage_basic.phpt0000644000175000017500000000075014011267774023310 0ustar vitovito--TEST-- Test Gmagick, whiteThresholdImage --SKIPIF-- --FILE-- whiteThresholdImage($color); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } whiteThresholdImage($color) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-112_colorizeImage_basic.phpt0000644000175000017500000000114614011267774022142 0ustar vitovito--TEST-- Test Gmagick, colorizeImage --SKIPIF-- --FILE-- colorizeImage($color, $opacityColor); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } colorizeImage($color, $opacity) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-113_compareImages.phpt0000644000175000017500000000171614011267774020770 0ustar vitovito--TEST-- Test PHP bug #59378 writing to php://memory is incomplete --SKIPIF-- --FILE-- setFormat("png"); $fp = fopen("php://memory", 'r+'); $gmagick->writeImageFile($fp); rewind($fp); $memoryBlob = stream_get_contents($fp); fclose($fp); //This test depends on getImageBlob working correctly. $imageBlob = $gmagick->getImageBlob(); //Read the images from the data blobs. $imageReopened = new Gmagick(); $imageReopened->readImageBlob($imageBlob); $memoryReopened = new Gmagick(); $memoryReopened->readImageBlob($memoryBlob); //Compare to see if they are identical. $result = $imageReopened->compareImages($memoryReopened, \Gmagick::METRIC_MEANABSOLUTEERROR); if ($result[1] == 0) { echo "Reopened images are identical."; } else { echo "Error, reopened images have changed."; var_dump($result); } ?> --EXPECTF-- Reopened images are identical. gmagick-2.0.6RC1/tests/gmagick-114_convolveImage_6.phpt0000644000175000017500000000121014011267774021225 0ustar vitovito--TEST-- Test Gmagick, convolveImage --SKIPIF-- --FILE-- -1, 1 => -1, 2 => -1, 3 => -1, 4 => 8, 5 => -1, 6 => -1, 7 => -1, 8 => -1, ); function convolveImage($bias, $kernelMatrix) { $gmagick = new \Gmagick("magick:logo"); $gmagick->convolveImage($kernelMatrix); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } convolveImage($bias, $kernelMatrix) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-115_equalizeImage_case2.phpt0000644000175000017500000000122314011267774022046 0ustar vitovito--TEST-- Test Gmagick, equalizeImage --SKIPIF-- --FILE-- equalizeImage(); $gmagick->extentImage( $startX, $startY, $width, $height ); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } $startX = 50; $startY = 50; $width = 150; $height = 150; extentImage($startX, $startY, $width, $height) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-116_waveImage_basic.phpt0000644000175000017500000000074614011267774021267 0ustar vitovito--TEST-- Test Gmagick, waveImage --SKIPIF-- --FILE-- waveImage($amplitude, $length); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } waveImage($amplitude, $length) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-117_haldClutImage_basic.phpt0000644000175000017500000000102514011267774022055 0ustar vitovito--TEST-- Test Gmagick, haldClutImage --SKIPIF-- --FILE-- sepiatoneImage(55); $gmagick->haldClutImage($gmagickPalette); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } haldClutImage() ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-118_shaveImage_basic.phpt0000644000175000017500000000063214011267774021427 0ustar vitovito--TEST-- Test Gmagick, shaveImage --SKIPIF-- --FILE-- shaveImage(100, 50); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } shaveImage() ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-119_thumbnail_fill.phpt0000644000175000017500000000077714011267775021222 0ustar vitovito--TEST-- Test filling thumbnail with color --SKIPIF-- = 0x660 && $v ['versionNumber'] < 0x670) die ('skip seems to be broken in this version of ImageMagick'); ?> --FILE-- setImageBackgroundColor("pink"); $gmagick->thumbnailImage(200, 200, true); echo "ok" ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagick-120_writeImageFile.phpt0000644000175000017500000000166414011267775021112 0ustar vitovito--TEST-- Test PHP writing to php://memory --SKIPIF-- --FILE-- setFormat("png"); $fp = fopen("php://memory", 'r+'); $gmagick->writeImageFile($fp); rewind($fp); $memoryBlob = stream_get_contents($fp); fclose($fp); //This test depends on getImageBlob working correctly. $imageBlob = $gmagick->getImageBlob(); //Read the images from the data blobs. $imageReopened = new Gmagick(); $imageReopened->readImageBlob($imageBlob); $memoryReopened = new Gmagick(); $memoryReopened->readImageBlob($memoryBlob); //Compare to see if they are identical. $result = $imageReopened->compareImages($memoryReopened, \Gmagick::METRIC_MEANABSOLUTEERROR); if ($result[1] == 0) { echo "Reopened images are identical."; } else { echo "Error, reopened images have changed."; var_dump($result); } ?> --EXPECTF-- Reopened images are identical. gmagick-2.0.6RC1/tests/gmagick-121_deconstructGif_basic.phpt0000644000175000017500000000427414011267775022342 0ustar vitovito--TEST-- Test Tutorial, deconstructGif --SKIPIF-- --XFAIL-- GraphicMagick has multiple issues with 'image counts'. It appears to be confused how many images are in the list. --FILE-- setFormat("gif"); $circleRadius = 20; $imageFrames = 6; $imageSize = 200; $background = new \Gmagick(); $background->newImage($imageSize, $imageSize, "gray"); $blackWhite = new \Gmagick(); $blackWhite->newImage($imageSize, $imageSize, "white"); $backgroundPalette = clone $background; $backgroundPalette->quantizeImage(240, \Gmagick::COLORSPACE_RGB, 8, false, false); $blackWhitePalette = clone $blackWhite; $blackWhitePalette->quantizeImage(16, \Gmagick::COLORSPACE_RGB, 8, false, false); $backgroundPalette->addimage($blackWhitePalette); /* for($count=0 ; $count<$imageFrames ; $count++) { echo "Frame: ".$count."\n"; $drawing = new \GmagickDraw(); $drawing->setFillColor('white'); $drawing->setStrokeColor('rgba(64, 64, 64, 0.8)'); $strokeWidth = 4; $drawing->setStrokeWidth($strokeWidth); $distanceToMove = $imageSize + (($circleRadius + $strokeWidth) * 2); $offset = ($distanceToMove * $count / ($imageFrames -1)) - ($circleRadius + $strokeWidth); $drawing->translate( $offset, ($imageSize / 2) + ($imageSize / 3 * cos(20 * $count / $imageFrames)) ); $drawing->circle(0, 0, $circleRadius, 0); $frame = clone $background; $frame->drawimage($drawing); $frame->setImageDelay(10); $frame = new Gmagick(); $frame->newimage( int $width , int $height , string $background [, string $format ] ) $aniGif->addImage($frame); } */ $colors = array( "Red", "Orange", "Yellow", "Green", "Indigo", "Violet", ); foreach ($colors as $color) { $frame = new Gmagick(); $frame->newimage(100, 100, $color); $aniGif->addImage($frame); } $aniGif->setImageFormat('gif'); //Even this fails. //$aniGif->writeImage("./testgif.gif"); $aniGif = $aniGif->deconstructImages(); $bytes = $aniGif->getImagesBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} echo "Ok"; ?> --EXPECTF-- Frame: 0 Frame: 1 Frame: 2 Frame: 3 Frame: 4 Frame: 5 Okgmagick-2.0.6RC1/tests/gmagick-122_unsharpMaskImage_basic.phpt0000644000175000017500000000121614011267775022610 0ustar vitovito--TEST-- Test Gmagick, unsharpMaskImage --SKIPIF-- --FILE-- unsharpMaskImage($radius, $sigma, $amount, $unsharpThreshold); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } unsharpMaskImage($radius, $sigma, $amount, $unsharpThreshold) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-123_sharpenImage_basic.phpt0000644000175000017500000000074014011267775021756 0ustar vitovito--TEST-- Test Gmagick, sharpenImage --SKIPIF-- --FILE-- sharpenimage($radius, $sigma); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } sharpenImage($radius, $sigma); echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-124__reduceNoiseImage_basic.phpt0000644000175000017500000000103314011267775022717 0ustar vitovito--TEST-- Test Gmagick, reduceNoiseImage --SKIPIF-- --FILE-- reduceNoiseImage($reduceNoise); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } reduceNoiseImage($reduceNoise) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-125_radialBlurImage_basic.phpt0000644000175000017500000000100514011267775022374 0ustar vitovito--TEST-- Test Gmagick, radialBlurImage --SKIPIF-- --FILE-- radialBlurImage(3); $gmagick->radialBlurImage(5); $gmagick->radialBlurImage(7); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } radialBlurImage() ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-126_negateImage_basic.phpt0000644000175000017500000000100414011267775021556 0ustar vitovito--TEST-- Test Gmagick, negateImage --SKIPIF-- --FILE-- negateImage($grayOnly, $channel); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } negateImage($grayOnly, $channel) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-127_contrastImage_basic.phpt0000644000175000017500000000100214011267775022147 0ustar vitovito--TEST-- Test Gmagick, contrastImage --SKIPIF-- --FILE-- contrastImage($contrastType); } $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } contrastImage($contrastType) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagick-128_staticMethods.phpt0000644000175000017500000000062014011267775021027 0ustar vitovito--TEST-- Test static methods --SKIPIF-- --FILE-- queryFormats ()) . PHP_EOL; //echo gettype (Gmagick::queryFonts ()) . PHP_EOL; echo gettype ($gmagick->queryFonts ()) . PHP_EOL; echo 'success'; ?> --EXPECT-- array array successgmagick-2.0.6RC1/tests/gmagick-129_gettersAndSetters.phpt0000644000175000017500000000472714011267775021703 0ustar vitovito--TEST-- Test static methods --SKIPIF-- --FILE-- getImageVirtualPixelMethod(); $gmagick->getImageBackgroundColor(); $gmagick->getImageBluePrimary(); $gmagick->getImageBorderColor(); $gmagick->getImagesBlob(); $gmagick->getImageColorspace(); $gmagick->getImageCompose(); $gmagick->getImageDelay(); $gmagick->getImageDepth(); $gmagick->getImageCompression(); $gmagick->getImageDispose(); $gmagick->getImageExtrema(); $gmagick->getImageFilename(); $gmagick->getImageFormat(); $gmagick->getImageGamma(); $gmagick->getImageGreenPrimary(); $gmagick->getImageIndex(); $gmagick->getImageInterlaceScheme(); $gmagick->getImageIterations(); $gmagick->getImageMatteColor(); $gmagick->getImageRedPrimary(); $gmagick->getImageRenderingIntent(); $gmagick->getImageResolution(); $gmagick->getImageScene(); $gmagick->getImageBoundingbox(0.1); $gmagick->getImageFuzz(); $gmagick->getImageSavedType(); $gmagick->getImageType(); $gmagick->getImageUnits(); $gmagick->getImageWhitepoint(); $gmagick->getSamplingfactors(); $gmagick->getSize(); $gmagick->getImageGeometry(); $gmagick->setImageAttribute("comment", "this is a comment"); $gmagick->setImageColormapColor(0, 'red'); $gmagick->setImageMatteColor('pink'); $gmagick->setDepth(16); $gmagick->setImageFuzz(0.1 * \GMAGICK::QUANTUM); $gmagick->setImageOption("jpeg", "preserve-settings", "true"); $gmagick->setImageSavedType(\GMAGICK::IMGTYPE_TRUECOLOR); $gmagick->setResolutionUnits(\GMAGICK::RESOLUTION_PIXELSPERCENTIMETER); $gmagick->setImageIndex(0); $gmagick->setInterlaceScheme(\GMAGICK::INTERLACE_PLANE); $gmagick->setImageCompression(\GMAGICK::COMPRESSION_NO); $gmagick->setImageFormat("BMP"); $gmagick->setResourceLimit(\GMAGICK::RESOURCETYPE_MEMORY, 16*1024*1024); $gmagick->getImageAttribute("comment"); $gmagick->getImageChannelExtrema(\GMAGICK::CHANNEL_RED); $gmagick->getImageChannelMean(\GMAGICK::CHANNEL_RED); $gmagick->getImageColormapColor(0); $gmagick->getImageChannelDepth(\GMAGICK::CHANNEL_RED); $gmagick->getResourceLimit(\GMAGICK::RESOURCETYPE_MEMORY); if (method_exists($gmagick, 'setImageGravity')) { $gmagick->setImageGravity(\GMAGICK::GRAVITY_SOUTHWEST); } if (method_exists($gmagick, 'getImageGravity')) { $gmagick->getImageGravity(); } if (method_exists($gmagick, 'getImagePage')) { $gmagick->getImagePage(); } // Don't know how to call this successfully. // $gmagick->get ImageProfile("ICC"); echo 'ok'; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-001-setstrokecolor_setstrokewidth.phpt0000644000175000017500000000060714011267775025230 0ustar vitovito--TEST-- Test set stroke color, set stroke width --SKIPIF-- --FILE-- setStrokeColor($pixel)->setStrokeWidth(2); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-002-ellipse.phpt0000644000175000017500000000054614011267775020443 0ustar vitovito--TEST-- Test ellipse --SKIPIF-- --FILE-- setFillColor($pixel)->ellipse( 200, 100, 50, 50, 0, 360 ); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-003-annotate.phpt0000644000175000017500000000071014011267775020611 0ustar vitovito--TEST-- Test annotate --SKIPIF-- --FILE-- read("magick:rose");//->write($filename); $gd->annotate(10, 20, "Test Text"); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-004-arc.phpt0000644000175000017500000000064614011267775017556 0ustar vitovito--TEST-- Test arc --SKIPIF-- --FILE-- read("magick:rose"); $gd->arc(10, 10, 30, 30, 5, 10); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-005-bezier.phpt0000644000175000017500000000134514011267775020267 0ustar vitovito--TEST-- Test bezier --SKIPIF-- --FILE-- read("magick:rose"); $gd->bezier( array( array( "x" => 3 , "y" => 8 ), array( "x" => 13, "y" => 16 ), array( "x" => 20, "y" => 25 ), array( "x" => 25, "y" => 23 ), array( "x" => 33, "y" => 23 ), array( "x" => 33, "y" => 3 ), ) ); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-006-setfillcolor_getfillcolor.phpt0000644000175000017500000000074314011267775024257 0ustar vitovito--TEST-- Test setfillcolor, getfillcolor --SKIPIF-- --FILE-- setFillColor($pixel)->getFillColor()->getColor()); ?> --EXPECT-- rgb(255,255,255) gmagick-2.0.6RC1/tests/gmagickdraw-006-setfillcolor_getfillcolor_q16.phpt0000644000175000017500000000075214011267775024746 0ustar vitovito--TEST-- Test setfillcolor, getfillcolor --SKIPIF-- --FILE-- setFillColor($pixel)->getFillColor()->getColor()); ?> --EXPECT-- rgb(65535,65535,65535) gmagick-2.0.6RC1/tests/gmagickdraw-007-setfillopacity_getfillopacity.phpt0000644000175000017500000000047714011267775025150 0ustar vitovito--TEST-- Test setfillopacity, getfillopacity --SKIPIF-- --FILE-- setFillOpacity(0.8); echo $gd->getFillOpacity(); ?> --EXPECT-- 0.2gmagick-2.0.6RC1/tests/gmagickdraw-008-setfont_getfont.phpt0000644000175000017500000000050414011267775022216 0ustar vitovito--TEST-- Test setfont, getfont --SKIPIF-- --FILE-- setFont(dirname(__FILE__) . "/Vera.ttf")->getFont(),"Vera.ttf"); ?> --EXPECT-- Vera.ttfgmagick-2.0.6RC1/tests/gmagickdraw-009-setfontsize_getfontsize.phpt0000755000175000017500000000044414011267775024013 0ustar vitovito--TEST-- Test setfontsize, getfontsize --SKIPIF-- --FILE-- setFontSize(1)->getFontSize(); ?> --EXPECT-- 1gmagick-2.0.6RC1/tests/gmagickdraw-010-setfontstyle_getfontstyle.phpt0000755000175000017500000000047614011267775024364 0ustar vitovito--TEST-- Test setfontstyle, getfontstyle --SKIPIF-- --FILE-- setFontStyle(Gmagick::STYLE_NORMAL)->getFontStyle(); ?> --EXPECT-- 0gmagick-2.0.6RC1/tests/gmagickdraw-011-setfontweight_getfontweight.phpt0000755000175000017500000000046414011267775024640 0ustar vitovito--TEST-- Test setfontweight, getfontweight --SKIPIF-- --FILE-- setFontWeight(101)->getFontWeight(); ?> --EXPECT-- 101gmagick-2.0.6RC1/tests/gmagickdraw-012-setstrokeopacity_getstrokeopacity.phpt0000755000175000017500000000050614011267775026102 0ustar vitovito--TEST-- Test setstrokeopacity, getstrokeopacity --SKIPIF-- --FILE-- setStrokeOpacity(0.8)->getStrokeOpacity(); ?> --EXPECT-- 0.8gmagick-2.0.6RC1/tests/gmagickdraw-013-setstrokecolor_getstrokecolor.phpt0000755000175000017500000000075714011267775025227 0ustar vitovito--TEST-- Test setstrokecolor, getstrokecolor --SKIPIF-- --FILE-- setStrokeColor($pixel)->getStrokeColor()->getColor()); ?> --EXPECT-- rgb(255,255,255) gmagick-2.0.6RC1/tests/gmagickdraw-013-setstrokecolor_getstrokecolor_q16.phpt0000644000175000017500000000076614011267775025713 0ustar vitovito--TEST-- Test setstrokecolor, getstrokecolor --SKIPIF-- --FILE-- setStrokeColor($pixel)->getStrokeColor()->getColor()); ?> --EXPECT-- rgb(65535,65535,65535) gmagick-2.0.6RC1/tests/gmagickdraw-014-setstrokewidth_getstrokewidth.phpt0000755000175000017500000000046614011267775025227 0ustar vitovito--TEST-- Test setstrokewidth, getstrokewidth --SKIPIF-- --FILE-- setStrokeWidth(2)->getStrokeWidth(); ?> --EXPECT-- 2gmagick-2.0.6RC1/tests/gmagickdraw-015-settextdecoration_gettextdecoration.phpt0000755000175000017500000000054414011267775026377 0ustar vitovito--TEST-- Test settextdecoration, gettextdecoration --SKIPIF-- --FILE-- setTextDecoration(Gmagick::DECORATION_UNDERLINE)->getTextDecoration(); ?> --EXPECT-- 1gmagick-2.0.6RC1/tests/gmagickdraw-016-settextencoding_gettextencoding.phpt0000755000175000017500000000050614011267775025474 0ustar vitovito--TEST-- Test settextencoding, gettextencoding --SKIPIF-- --FILE-- setTextEncoding("UTF-8")->getTextEncoding(); ?> --EXPECT-- UTF-8gmagick-2.0.6RC1/tests/gmagickdraw-017-line.phpt0000755000175000017500000000064014011267775017741 0ustar vitovito--TEST-- Test line --SKIPIF-- --FILE-- read("magick:rose"); $gd->line(8, 8, 18, 18); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-018-point.phpt0000755000175000017500000000063414011267775020147 0ustar vitovito--TEST-- Test point --SKIPIF-- --FILE-- read("magick:rose"); $gd->point(20,20); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-019-polygon.phpt0000755000175000017500000000105714011267775020506 0ustar vitovito--TEST-- Test polygon --SKIPIF-- --FILE-- read("magick:rose"); $polArray = array( array( 'x' => 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 ) ,array( 'x' => 5, 'y' => 10 ), array( 'x' => 3, 'y' => 4 )); $gd->polygon($polArray); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-020-polyline.phpt0000755000175000017500000000157614011267775020650 0ustar vitovito--TEST-- Test polyline --SKIPIF-- --FILE-- 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 ), array( 'x' => 5, 'y' => 10 ), array( 'x' => 3, 'y' => 4 ) ); $floatPoints = array( array( 'x' => 3.5, 'y' => 4.5 ), array( 'x' => 2.5, 'y' => 6.5 ), array( 'x' => 5.5, 'y' => 10.5 ), array( 'x' => 3.5, 'y' => 4.5 ) ); $tests = array( $intPoints, $floatPoints ); foreach ($tests as $polArray) { $filename = dirname(__FILE__) . '/test_constructor.jpg'; $gm = new GMagick(); $gd = new GMagickDraw(); $gm->read("magick:rose"); $gd->polyline($polArray); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok".PHP_EOL; } ?> --EXPECT-- ok okgmagick-2.0.6RC1/tests/gmagickdraw-021-rectangle.phpt0000755000175000017500000000065614011267775020760 0ustar vitovito--TEST-- Test rectangle --SKIPIF-- --FILE-- read("magick:rose"); $gd->rectangle(20,20,30,30); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-022-rotate.phpt0000755000175000017500000000067114011267775020310 0ustar vitovito--TEST-- Test rotate --SKIPIF-- --FILE-- read("magick:rose"); $gd->rectangle(20,20,30,30); $gd->rotate(45); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-023-roundrectangle.phpt0000755000175000017500000000070214011267775022022 0ustar vitovito--TEST-- Test round rectangle --SKIPIF-- --FILE-- read("magick:rose"); $gd->roundRectangle(30,30,35,35,5,5); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-024-scale.phpt0000755000175000017500000000067314011267775020105 0ustar vitovito--TEST-- Test scale --SKIPIF-- --FILE-- read("magick:rose"); $gd->rectangle(20,20,30,30); $gd->scale(0.5,0.5); $gm->drawImage($gd); $gm->write($filename); unlink($filename); echo "ok"; ?> --EXPECT-- okgmagick-2.0.6RC1/tests/gmagickdraw-025-affine.phpt0000644000175000017500000000055514011267775020243 0ustar vitovito--TEST-- Test affine --SKIPIF-- --FILE-- 1, "rx" => 0, "ry" => 0, "sy" =>1, "tx" => 0, "ty" => 0); $gDraw->affine($affineArray); echo "ok"; ?> --EXPECT-- ok gmagick-2.0.6RC1/tests/gmagickdraw-026-setgravity_getgravity.phpt0000644000175000017500000000055214011267775023457 0ustar vitovito--TEST-- Test affine --SKIPIF-- --FILE-- setGravity(2); echo $gDraw->getGravity(); ?> --EXPECT-- 2 gmagick-2.0.6RC1/tests/gmagickdraw-027-setantialias_getantialias.phpt0000755000175000017500000000034614011267775024224 0ustar vitovito--TEST-- Test and get anti-alias --SKIPIF-- --FILE-- setStrokeAntiAlias(true); echo $gDraw->getStrokeAntiAlias(); ?> --EXPECT-- 1 gmagick-2.0.6RC1/tests/gmagickdraw-028-setlinecap_getlinecap.phpt0000755000175000017500000000047214011267775023341 0ustar vitovito--TEST-- Test set and get line cap --SKIPIF-- --FILE-- setStrokeLineCap(2); echo $gDraw->getStrokeLineCap(); ?> --EXPECT-- 2 gmagick-2.0.6RC1/tests/gmagickdraw-029-setlinejoin_getlinejoin.phpt0000755000175000017500000000047314011267775023733 0ustar vitovito--TEST-- Test stroke line join --SKIPIF-- --FILE-- setStrokeLineJoin(2); echo $gDraw->getStrokeLineJoin(); ?> --EXPECT-- 2 gmagick-2.0.6RC1/tests/gmagickdraw-030-setmiterlimit_getmiterlimit.phpt0000755000175000017500000000051414011267775024637 0ustar vitovito--TEST-- Test get and set strokeMiterLimit --SKIPIF-- --FILE-- setStrokeMiterLimit(2); echo $gDraw->getStrokeMiterLimit(); ?> --EXPECT-- 2 gmagick-2.0.6RC1/tests/gmagickdraw-031-setdashstrokearray_getdashstrokearray.phpt0000755000175000017500000000061714011267775026722 0ustar vitovito--TEST-- Test set and get stroke dash array --SKIPIF-- --FILE-- setStrokeDashArray(array(3, 2)); print_r($gDraw->getStrokeDashArray()); ?> --EXPECT-- Array ( [0] => 3 [1] => 2 )gmagick-2.0.6RC1/tests/gmagickdraw-032_circle_basic.phpt0000644000175000017500000000220614011267775021470 0ustar vitovito--TEST-- Test GmagickDraw, circle --SKIPIF-- --FILE-- setStrokeOpacity(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(2); $draw->setFontSize(72); $draw->circle($originX, $originY, $endX, $endY); $imagick = new \Gmagick(); $imagick->newImage(500, 500, $backgroundColor); $imagick->setImageFormat("png"); $imagick->drawImage($draw); $bytes = $imagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } circle($strokeColor, $fillColor, $backgroundColor, $originX, $originY, $endX, $endY) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw-033_setClipPath_basic.phpt0000644000175000017500000000232114011267775022446 0ustar vitovito--TEST-- Test GmagickDraw, setClipPath --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeOpacity(1); $draw->setStrokeWidth(2); $clipPathName = 'testClipPath'; $draw->pushClipPath($clipPathName); $draw->rectangle(0, 0, 250, 250); $draw->popClipPath(); $draw->setClipPath($clipPathName); $draw->rectangle(100, 100, 400, 400); $storedPathName = $draw->getClipPath(); if (strcmp($storedPathName, $clipPathName) !== 0) { echo "Error retrieving clipPath: $storedPathName != $clipPathName \n"; } $imagick = new \Gmagick(); $imagick->newImage(500, 500, $backgroundColor); $imagick->setImageFormat("png"); $imagick->drawImage($draw); $bytes = $imagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setClipPath($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_034_setClipRule_basic.phpt0000644000175000017500000000255414011267775022554 0ustar vitovito--TEST-- Test GmagickDraw, setClipRule --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeOpacity(1); $draw->setStrokeWidth(2); //\Gmagick::FILLRULE_EVENODD //\Gmagick::FILLRULE_NONZERO $clipPathName = 'testClipPath'; $draw->pushClipPath($clipPathName); $draw->setClipRule(\Gmagick::FILLRULE_EVENODD); $draw->rectangle(0, 0, 300, 500); $draw->rectangle(200, 0, 500, 500); $draw->popClipPath(); $draw->setClipPath($clipPathName); $draw->rectangle(200, 200, 300, 300); $clipRule = $draw->getClipRule(); if ($clipRule !== \Gmagick::FILLRULE_EVENODD) { echo "Failed to get correct clipRule $clipRule != \Gmagick::FILLRULE_EVENODD \n"; } $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setClipRule($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_035_setClipUnits_basic.phpt0000644000175000017500000000254014011267775022743 0ustar vitovito--TEST-- Test GmagickDraw, setClipUnits --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeOpacity(1); $draw->setStrokeWidth(2); $clipPathName = 'testClipPath'; $draw->setClipUnits(\Gmagick::RESOLUTION_PIXELSPERINCH); $draw->pushClipPath($clipPathName); $draw->rectangle(0, 0, 250, 250); $draw->popClipPath(); $draw->setClipPath($clipPathName); $clipUnits = $draw->getClipUnits(); if ($clipUnits !== \Gmagick::RESOLUTION_PIXELSPERINCH) { echo "Failed to get correct clipUnits $clipRule != \Gmagick::RESOLUTION_PIXELSPERINCH \n"; } //RESOLUTION_PIXELSPERINCH //RESOLUTION_PIXELSPERCENTIMETER $draw->rectangle(200, 200, 300, 300); $imagick = new \Gmagick(); $imagick->newImage(500, 500, $backgroundColor); $imagick->setImageFormat("png"); $imagick->drawImage($draw); $bytes = $imagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setClipUnits($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_036_pushPattern_basic.phpt0000644000175000017500000000300714011267775022632 0ustar vitovito--TEST-- Test GmagickDraw, pushPattern --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(1); $draw->setStrokeOpacity(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(1); $draw->pushPattern("MyFirstPattern", 0, 0, 50, 50); for ($x = 0; $x < 50; $x += 10) { for ($y = 0; $y < 50; $y += 5) { $positionX = $x + (($y / 5) % 5); $draw->rectangle($positionX, $y, $positionX + 5, $y + 5); } } $draw->popPattern(); $draw->setFillOpacity(0); $draw->rectangle(100, 100, 400, 400); $draw->setFillOpacity(1); $draw->setFillOpacity(1); $draw->pushGraphicContext(); $draw->setFillPatternURL('#MyFirstPattern'); $draw->setFillColor('yellow'); $draw->rectangle(100, 100, 400, 400); $draw->popGraphicContext(); $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } pushPattern($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_037_setFillRule_basic.phpt0000644000175000017500000000361714011267775022557 0ustar vitovito--TEST-- Test GmagickDraw, setFillRule --SKIPIF-- --FILE-- setStrokeWidth(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $fillRules = array(\Gmagick::FILLRULE_NONZERO, \Gmagick::FILLRULE_EVENODD); $points = 11; $size = 150; $draw->translate(175, 160); for ($x = 0; $x < 2; $x++) { $draw->setFillRule($fillRules[$x]); $draw->pathStart(); for ($n = 0; $n < $points * 2; $n++) { if ($n >= $points) { $angle = fmod($n * 360 * 4 / $points, 360) * pi() / 180; } else { $angle = fmod($n * 360 * 3 / $points, 360) * pi() / 180; } $positionX = $size * sin($angle); $positionY = $size * cos($angle); if ($n == 0) { $draw->pathMoveToAbsolute($positionX, $positionY); } else { $draw->pathLineToAbsolute($positionX, $positionY); } } $draw->pathClose(); $draw->pathFinish(); $currentFillRule = $draw->getFillRule(); if ($currentFillRule !== $fillRules[$x]) { echo "Failed to get correct fillRule $currentFillRule != ".$fillRules[$x]." \n"; } $draw->translate(325, 0); } $image = new \Gmagick(); $image->newImage(700, 320, $backgroundColor); $image->setImageFormat("png"); $image->drawImage($draw); $bytes = $image->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setFillRule($fillColor, $strokeColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_038_setFontStretch_basic.phpt0000644000175000017500000000314314011267775023277 0ustar vitovito--TEST-- Test GmagickDraw, setFontStretch --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(2); $draw->setFontSize(36); $fontStretchTypes = array( \Gmagick::STRETCH_ULTRACONDENSED, \Gmagick::STRETCH_CONDENSED, \Gmagick::STRETCH_SEMICONDENSED, \Gmagick::STRETCH_SEMIEXPANDED, \Gmagick::STRETCH_EXPANDED, \Gmagick::STRETCH_EXTRAEXPANDED, \Gmagick::STRETCH_ULTRAEXPANDED, \Gmagick::STRETCH_ANY ); $offset = 0; foreach ($fontStretchTypes as $fontStretch) { $draw->setFontStretch($fontStretch); $draw->annotate(50, 75 + $offset, "Lorem Ipsum!"); $offset += 50; $currentFontStretch = $draw->getFontStretch($fontStretch); if ($currentFontStretch !== $fontStretch) { echo "Failed to get correct fontStretch $currentFontStretch != $fontStretch \n"; } } $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setFontStretch($fillColor, $strokeColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_039_pathStart_basic.phpt0000644000175000017500000000276614011267775022305 0ustar vitovito--TEST-- Test GmagickDraw, pathStart --SKIPIF-- --FILE-- setStrokeOpacity(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(2); $draw->setFontSize(72); $draw->pathStart(); $draw->pathMoveToAbsolute(50, 50); $draw->pathLineToAbsolute(100, 50); $draw->pathLineToRelative(0, 50); $draw->pathLineToHorizontalRelative(-50); $draw->pathFinish(); $draw->pathStart(); $draw->pathMoveToAbsolute(50, 50); $draw->pathMoveToRelative(300, 0); $draw->pathLineToRelative(50, 0); $draw->pathLineToVerticalRelative(50); $draw->pathLineToHorizontalAbsolute(350); $draw->pathclose(); $draw->pathFinish(); $draw->pathStart(); $draw->pathMoveToAbsolute(50, 300); $draw->pathCurveToAbsolute(50, 300, 100, 200, 300, 300); $draw->pathLineToVerticalAbsolute(350); $draw->pathFinish(); $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } pathStart($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_040_pathCurveToQuadraticBezierAbsolute_basic.phpt0000644000175000017500000000357614011267775027265 0ustar vitovito--TEST-- Test GmagickDraw, pathCurveToQuadraticBezierAbsolute --SKIPIF-- --FILE-- setStrokeOpacity(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(2); $draw->setFontSize(72); $draw->pathStart(); $draw->pathMoveToAbsolute(50,250); // This specifies a quadratic bezier curve with the current position as the start // point, the control point is the first two params, and the end point is the last two params. $draw->pathCurveToQuadraticBezierAbsolute( 150,50, 250,250 ); // This specifies a quadratic bezier curve with the current position as the start // point, the control point is mirrored from the previous curves control point // and the end point is defined by the x, y values. $draw->pathCurveToQuadraticBezierSmoothAbsolute( 450,250 ); // This specifies a quadratic bezier curve with the current position as the start // point, the control point is mirrored from the previous curves control point // and the end point is defined relative from the current position by the x, y values. $draw->pathCurveToQuadraticBezierSmoothRelative( 200,-100 ); $draw->pathFinish(); $gmagick = new \Gmagick(); $gmagick->newImage(700, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } pathCurveToQuadraticBezierAbsolute($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_041_popDefs_basic.phpt0000644000175000017500000000174214011267775021715 0ustar vitovito--TEST-- Test GmagickDraw, popDefs --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setstrokeOpacity(1); $draw->setStrokeWidth(2); $draw->setFontSize(72); $draw->pushDefs(); $draw->setStrokeColor('white'); $draw->rectangle(50, 50, 200, 200); $draw->popDefs(); $draw->rectangle(300, 50, 450, 200); $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } popDefs($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_042_setTextAntialias_basic.phpt0000644000175000017500000000245514011267775023606 0ustar vitovito--TEST-- Test GmagickDraw, setTextAntialias --SKIPIF-- --FILE-- setStrokeColor('none'); $draw->setFillColor($fillColor); $draw->setStrokeWidth(1); $draw->setFontSize(32); $draw->setTextAntialias(false); $draw->annotate(5, 30, "Lorem Ipsum!"); $draw->setTextAntialias(true); $draw->annotate(5, 65, "Lorem Ipsum!"); $currentValue = $draw->getTextAntialias(); if ($currentValue !== true) { echo "Failed to get textAntiAlias setting, which should be true\n"; var_dump($currentValue); } $gmagick = new \Gmagick(); $gmagick->newImage(220, 80, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); //Scale the image so that people can see the aliasing. $gmagick->scaleImage(220 * 6, 80 * 6); $gmagick->cropImage(640, 480, 0, 0); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setTextAntialias($fillColor, $backgroundColor); echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_043_setViewBox_basic.phpt0000644000175000017500000000245614011267775022421 0ustar vitovito--TEST-- Test GmagickDraw, setViewBox --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(2); $draw->setFontSize(72); /* Sets the overall canvas size to be recorded with the drawing vector data. Usually this will be specified using the same size as the canvas image. When the vector data is saved to SVG or MVG formats, the viewbox is use to specify the size of the canvas image that a viewer will render the vector data on. */ $draw->circle(250, 250, 250, 0); $draw->setviewbox(0, 0, 200, 200); $draw->circle(125, 250, 250, 250); $draw->translate(250, 125); $draw->circle(0, 0, 125, 0); $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setViewBox($strokeColor, $fillColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_044_setTextUnderColor_basic.phpt0000644000175000017500000000205214011267775023750 0ustar vitovito--TEST-- Test GmagickDraw, setTextUnderColor --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(2); $draw->setFontSize(72); $draw->annotate(50, 75, "Lorem Ipsum!"); $draw->setTextUnderColor($textUnderColor); $draw->annotate(50, 175, "Lorem Ipsum!"); $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setTextUnderColor($strokeColor, $fillColor, $backgroundColor, $textUnderColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickdraw_045_setFontFamily_basic.phpt0000644000175000017500000000247314011267775023107 0ustar vitovito--TEST-- Test GmagickDraw, setFontFamily --SKIPIF-- --FILE-- setStrokeColor($strokeColor); $draw->setFillColor($fillColor); //TODO - actually use setFontFamily $draw->setStrokeWidth(2); $draw->setFontSize(24); $draw->annotate(50, 50, "Lorem Ipsum!"); $draw->setFontSize(36); $draw->annotate(50, 100, "Lorem Ipsum!"); $draw->setFontSize(48); $draw->annotate(50, 150, "Lorem Ipsum!"); $draw->setFontSize(60); $draw->annotate(50, 200, "Lorem Ipsum!"); $draw->setFontSize(72); $draw->annotate(50, 250, "Lorem Ipsum!"); $gmagick = new \Gmagick(); $gmagick->newImage(500, 500, $backgroundColor); $gmagick->setImageFormat("png"); $gmagick->drawImage($draw); $bytes = $gmagick->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } setFontFamily($fillColor, $strokeColor, $backgroundColor) ; echo "Ok"; ?> --EXPECTF-- Okgmagick-2.0.6RC1/tests/gmagickpixel-001-setcolor_getcolor.phpt0000644000175000017500000000105314011267775022713 0ustar vitovito--TEST-- Test setColor and getColor methods --SKIPIF-- --FILE-- getColor()) . "\n"; var_dump($pixel->setColor($pixel->getColor())); echo strcmp($color, $pixel->getColor()) . "\n"; ?> --EXPECTF-- 0 object(GmagickPixel)#%d (%d) { } 0 gmagick-2.0.6RC1/tests/gmagickpixel-002-setcolorvalue_getcolorvalue.phpt0000644000175000017500000000065114011267775025011 0ustar vitovito--TEST-- Test setColorValue and getColorValue methods --SKIPIF-- --FILE-- getColorValue(Gmagick::COLOR_BLACK). "\n"; $gp->setColorValue(Gmagick::COLOR_BLACK,1); echo $gp->getColorValue(Gmagick::COLOR_BLACK). "\n"; ?> --EXPECTF-- 0 1gmagick-2.0.6RC1/tests/gmagickpixel-003-getcolorcount.phpt0000644000175000017500000000046414011267775022061 0ustar vitovito--TEST-- Test getColorcount method --SKIPIF-- --FILE-- getColorCount(); ?> --EXPECTF-- 0gmagick-2.0.6RC1/tests/gmagickpixel-004-clone.phpt0000644000175000017500000000032314011267775020265 0ustar vitovito--TEST-- Test object cloning and get --SKIPIF-- --FILE-- --EXPECTF-- gmagick-2.0.6RC1/tests/gmagickpixel-005-setcolorvaluequantum_getcolorvaluequantum.phpt0000644000175000017500000000113414011267775030037 0ustar vitovito--TEST-- Test setColorValueQuantum and getColorValueQuantum methods --SKIPIF-- --FILE-- getColorValueQuantum(Gmagick::COLOR_BLACK). "\n"; $gp->setColorValueQuantum(Gmagick::COLOR_BLACK,1); echo $gp->getColorValueQuantum(Gmagick::COLOR_BLACK). "\n"; try { $gp->setColorValueQuantum(123456, 1); echo "GmagickPixelException was not thrown".PHP_EOL; } catch (GmagickPixelException $gpe) { //This is the expected exception echo $gpe->getMessage(); } ?> --EXPECTF-- 0 1 Unknown color type: 123456 gmagick-2.0.6RC1/tests/gmagickpixel-006-setcolorcount.phpt0000644000175000017500000000051614011267775022076 0ustar vitovito--TEST-- Test getColorcount method --SKIPIF-- --FILE-- setColorCount(2); echo $pixel->getColorCount(); ?> --EXPECTF-- 2gmagick-2.0.6RC1/tests/Vera.ttf0000644000175000017500000020053114011267775014744 0ustar vitovitoOS/2´_ôcëpVPCLTÑŠ^—ëÈ6cmap¤Ãè ±lXcvt ÿÓ9üüfpgmç´ñÄ&`‹gaspH glyf tAÏ&ìŠ~hdmx4ð!ìHheadÝ„¢ÐT6hheaEoëL$hmtx ÆŽ²´Ä0kernÜRÕ™½ -ŠlocaóËÒ=»„maxpG:ë, nameټȵßpost´Z/»¸ôŽprep;ñ øh::_:: dM0­l  ƒ p t › &   Y &  &   c . 5 ` õ s 0¡ & {Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera SansBitstreamVeraSans-RomanRelease 1.10Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.comCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera SansBitstreamVeraSans-RomanRelease 1.10Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.com5¸ËËÁªœ¦¸fqË ²…u¸Ãˉ-˦ðÓª‡ËªJ3ËÙôT´œ99N´R¸çÍ7sÍ`s3¢V¦V9Åɸßsºé3¼Dßͪåªˤ{¸o{RÇÍššoËÍžÓðºƒÕ˜HžÕÁËöƒT3fÓǤ͚sÕ þ+¤´œbœ-ÕÕÕð{T¤¸#Ӹ˦Ãì“ Ó\qÛ…#¨H99`Õš#fy```{œw`ªé`b{Å{´RÍf¼fwÍ;…‰{ÍJ/œœ}oo5jo{®²-–{öƒT7öœáföÍD)fîs¸€@ÿûþúù%ø2÷–öõþôþó%òñ–ð%ïŠAïþî–í–ìúëúêþé:èBçþæ2åäSå–äŠAäSãâ/ãúâ/áþàþß2ÞÝ–ÜþÛÚ}Ù»ØþÖŠAÖ}ÕÔGÕ}ÔGÓÒÓþÒÑþÐþÏþÎþÍ–ÌËÌþËÊ2ÉþÆ…ÆÅÄþÃþÂþÁþÀþ¿þ¾þ½þ¼þ»þº¹†%¹þ¸·»¸þ·¶]·»·€¶µ%¶]@ÿ¶@µ%´þ³–²þ±þ°þ¯þ®d­¬«%¬d«ª«%ª©ŠA©ú¨þ§þ¦þ¥¤þ£¢£2¢¡d ŠA –Ÿþž žþ œ›œd›š›š™ ˜þ—– —þ– •ŠA•–”“”(“’ú‘»‘þ]»€Ž%]@Ž%þŒ‹.Œþ‹.І%ŠA‰ˆ ‰ˆ ‡†%‡d†…†%…„þƒ‚ƒþ‚þ€þþ@ÿ~}}~þ}}|d{T{%zþyþxw v uþtúsúrúqúpþoþnþl!kþjBjSiþh}gBfþeþdþcþbþa:`ú^ ]þ[þZþYX YúX WW2VþUTUBTSSRQJQþP OþNMNþMLþKJKþJIJI IH GþF–E–DþC-CúB»AK@þ?þ>=>=<=<; <@ÿ; :þ9þ878ú76765 65 43 21 2þ1 0/ 0 / .- .- ,2+*%+d*)*%)('%(A'%&% &% $þ#þ"!! dú d BþúBBþdþþþþBþ-B}dþ  þ   þ  þ-þdþ@-þ-þ¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °ýEDY!-,°%E`D-,KSX°%°%EDY!!-,ED-fþ–f¤@ ûû/ÄÔì1ÔìÔì0!%!!füsüåþ–øòr)5Õ @@ƒ ü<ì2991/äüÌ0K° TX½ @ ÿÀ878Y¶ P ]%3#3#5ËËË¢þþÕýqþ›eŪéÕM@„üüÜì1ô<ì20K°TK°T[X½@ÿÀ878Y@0 @ P ` p   ¿ ]#!#oª$ªÕýÕ+ýÕ+ž¾`@1 ‡  ‡   üÌ91/<Ô<<ü<<Ô<<Ä2ì220@   ]!! !3!!!!#!#!5!!5!þÝT%Dh$i g8þ¡R>þ›h gþÛg¡hþÅ`Tþ¾if…þ²‡þaŸþašþ²™þbžþbž™NšŸªþÓm!(/Õ@U" '&( /)/))/B" ) *!††#Љ*Љ- ) " & 0ü<ìô<ü<ôäì1/äìÄÔäì2Äîî99990KSXíí9í9íY"K° TX½0@00ÿÀ878YK° TK°T[K°T[X½0ÿÀ00@878Y#.'5.546753.'>54&´diÒjfÑoÝÉÚÌd]®SS¯\ãÖãÖdtzqá{þÓ---´@AÈ$¬–£¼ëè¯*.þU#´œ©Ãš jXV`ÕþOnZXhqÿã)ð #'3•@6$%&%&'$'B’ ’.’$’ &Œ($‘4'!%   ! + 1 4üÄìôìîöî991ä2ô<äìîöîî0KSXííY"K° TK° T[K° T[K°T[K°T[K° T[X½4@44ÿÀ878Y"32654&'2#"&546"32654&%3#2#"&546ÑWccWUccUžº» º»ü—VcbWWcd1 üZ ž¼»ŸŸ¹º‘”„‚••‚ƒ•Ü»»ÛÛ»¼Ûa•‚„””„–ùó Û»½ÚÛ¼ºÜÿãþð 0Í@–  † †  † †††  !         B  (('•+•'”$‘Œ .  .'.'!!1üìÄÔÔìÆî99999991/ÆäöæîîÆ9990KSXíí9í9í9í9í9íí9í9ííí9Y"²2]@² " ) **&:4D ^YZ UZZY0g{›š™—• “••"™-  ' (   2'') #**(/2; 49?2J LKFO2VZ Y UY\_2j i`2uy z““—•œœŸš › š 2 2°29]]3267 >73#'#"5467.54632.#"ò[UÔ _¦Iþ{ü;Bº h]ühäƒñþΆ†02Þ¸S¥UWžDiƒ;#Q¡X’Â?@ýøYËr„þþ~þã“YW×€ác?}<¢Å$$¶/1oX3gŪoÕB@ „üì1ôì0K°TK°T[X½@ÿÀ878Y@ @P`p ]#oªÕýÕ+°þò{ O@˜—  Üä2ì991üì0K°TX½@ÿÀ878YK°TX½ÿÀ@878Y#&547{†‚ƒ… –•”—æþ>ççþ;åëÆàßÄì¤þòo @˜— Ü<ôì991üì03#654¤ –••– …ƒƒìþ<ßàþ:ëåÅççÂ=JÃðN@,  ™ ™ ‘    Ô<ä2Ü<ä2991ôÔ<ì2Äì2990%#'%%73%Ãþ™g:þ°rþ°:gþ™:PrPßÂÃbËþ‡yËbÃÂcËyþ‡ËÙÛ #@ œ  Üü<ü<ì1/Ô<ü<Ä0!!#!5!®-ýÓ¨ýÓ-ýÓªýÓ-ª-žÿÃþ@ žƒüìÔÌ1üì073#ðÓ¤Rþ¬þÀ@d߃¶œÜÌ1Ôì0!!dý僤ۮþ·ƒüì1/ì073#ÛÓÓþþÿB²Õ-@BŸ/Ä991ôì0KSXííY"3#ªýøªÕùm‡ÿãð #@   ‘Œ üìôì1äôìî0"32'2#"‹œœû þ÷ûûþ÷ PþÍþÌþÍþÍ3343 þsþ†þ‡þsyzáZÕ K@B     ÔìÄüì1/ì2ôìÔì0KSXY"K°TX½ ÿÀ @878Y´]7!5%3!!þJþ™eÊJü¤ªsH¸HúÕª–Jð¥@'B¡”  ‘   üÄÔìÀÀ91/ì2ôìôì0KSXíí9Y"K°TK°T[K°T[X½@ÿÀ878Y@2UVVzzv‡tvust‚†‚‚‚¨¨]]%!!567>54&#"5>32‰ÁüLs3aM§†_ÓxzÔXèE[þôªªªw‘:m—Iw–BCÌ12èÂ\¥pþëœÿãsð({@. † †     “  “#‘Œ£)&  )üÄÄÔìôì991ìäôäìæîîîî90K°TK°T[X½)@))ÿÀ878Y@ daa d!]!"&'532654&+532654&#"5>32?‘£þÐþè^ÇjTÈm¾Ç¹¥®¶•ž£˜S¾rsÉYæ Ž%ÄÝò%%Ã12–„•¦wps{$&´ Ѳ|«d¤Õ Œ@   B     ÜÔ<Äì291/äÔ<ì290KSXÉÉY"K° TK° T[X½@ÿÀ878Y@* *HYiwŠ+&+6NO O Vfuz… ]] !33##!5þþ5þÕÕÉý^%üãÍü3¨þ `ÞÿãdÕu@#†  ‰   Œ¤  üÄÔìÄî1ääôìæîþÄî90K°TK°T[X½@ÿÀ878YK°TX½ÿÀ@878Y!!>32!"&'532654&#"Ýý ,X,ú$þÔþï^ÃhZÀk­ÊÊ­Q¡TÕªþ’þîêñþõ Ë10¶œœ¶$&ÿã–ð $X@$ †   ¥  ‰"‘Œ% " !%üììôìä1äôäüäîîî90@ËËÍÍÍËˤ²]]"32654&.#">32# !2¤ˆŸŸˆˆŸŸ L›LÈÓ;²káþðâþýþîPL›;º¢¡»»¡¢ºy¸$&þòþïW]þïëæþêyb¥¨hÕc@B üÌÄ991/ôì0KSXííY"K°TX½@ÿÀ878Y@X9Hg°°]]!#!¨ÀýâÓþý3ÕVú+‹ÿã‹ð #/C@%  ' - ‘Œ'£0 $*$ !0üÄìôÄìîî991ìäôìîî990"32654&%&&54632#"$54632654&#"‹¥¥¦¥þ¥‚‘ÿÞßþ‘’£þ÷÷÷þ÷¤H‘ƒ‚““‚ƒ‘Åš‡‡š›†‡šV ²€³Ðг€² "ÆÙèèÙÆat‚‚tt‚‚ÿã‡ð$X@#†  ¥ ‰ ‘Œ%!"" %üìäôìì1äôìæþõîî90@ÄÂÀÀÀÂμé]]7532#"543 !"&2654&#"áLœKÈÓ:²làþûâþ±þåLœ>ˆŸŸˆˆŸŸ¸$& V\ëæþsþ†þŸþ[—º¢¡»»¡¢ºðÃ#@ƒ¦ƒü<ì21/ìôì073#3#ðÓÓÓÓþþ#þžÿÃ# %@ƒžƒ¦  ü<ì2ÔÌ1äüìî03#3#ðÓÓÓ¤R#þýÙ¬þÀ@Ù^Û¦M@*œœœœB¨§$#üì291ôì90KSXííííY" 5Ûûøúþðþ‘þ“¶ѦÑÙ`Û¢@ œœ#ü<Ä21ÔìÔì0!!!!Ùúþúþ¢¨ðªÙ^Û¦O@+œœœœB¨§$#ü<ì91ôì90KSXííííY"55Ùúþð¶þ/¦þ/¶m“°ð$p@+$  †ˆ•‘ƒ   &%ÜÄüìÔìî99991/îöþôîÍ9990K° TX½%@%%ÿÀ878Y¶y z z ]%3##546?>54&#"5>32‡ËËÅ¿8ZZ93ƒlO³a^Ág¸ßHZX/'þþ‘še‚VY5^1YnFC¼98ŸL‰VV/5<4‡þœq¢ L•@2  ©©L43¬0©7¬$©7CM34( (+(I+*(I,=MÜìüìþýþ<Æî991ÔÄüìþíÔÆÅî2Äî990K° TK° T[K°T[K°T[K°T[X½MÿÀMM@878Y@ NN/N?N]32654&#"#"&5463253>54&'&$#"3267#"$'&5476$32úŽ|{zy!<›g¬×Ø«gœ;’¥?@hþÕ°{â`±smiùhZ}þÙ˜¹þ¸€€†ˆ~R½Ôk{KOþÂþè£¤ŽŒ¥¤þHMIùÈÈúKLƒý ß±k¼Pƒ‹A@fþµÁŸþêjhmWQoagƒ}}I½¶J}‡® bæ{þùþÐhÕ º@A       B•    ÔÄ91/<äÔì90KSXííííííííY"² ]@:XvpŒ VXP ghxv|rwx‡ˆ€ ˜™–]] !3#!#¼þî%þ{å9Òˆý_ˆÕý®ú+þÉìÕ C@#• •• ­ . !üì2üìÔì9991/ììôìî90²"]!2654&#!2654&#%!2#!“D££þ¼+”‘‘”þ çú€|•¥þðûýèÉý݇‹Œ…fþ>orqp¦À±‰¢ ˘ÈÚsÿã'ð6@ ¡® •¡®•‘Œ 0üì2ì1äôìôìîöî0´].# !267# !2'fç‚ÿþð‚çfjí„þ­þz†S†íbÕ_^þÇþØþÙþÇ^_ÓHHŸghŸGɰÕ.@• •  2 üìôì99991/ìôì0²`]3 !%! )“ô5þáþËþBŸ²–þhþPþa/ûw.,¦þ—þ€þ~þ–É‹Õ .@•••­   üì2ÔÄÄ1/ììôìî0² ]!!!!!!ɰýÇý9øü>ÕªþFªýãªÉ#Õ )@••­ üì2ÔÄ1/ìôìî0² ]!!!!#ÉZýpPý°ÊÕªþHªý7sÿã‹ð9@ ••¡®•‘Œ43 üìüäüÄ1äôìôìþÔî990%!5!# !2&&# !26Ãþ¶uþæ þ¢þu‹^’opü‹þîþík¨Õ‘¦ýSU™mn™HF×_`þÎþÑþÒþÎ%É;Õ ,@•­ 8  üì2üì21/<ä2üì0²P ]3!3#!#ÉÊÞÊÊý"ÊÕýœdú+Çý9É“Õ9·¯üì1/ì0K°TX½ÿÀ@878Y@ 0@P`Ÿ]3#ÉÊÊÕú+ÿ–þf“Õ M@ •° 9 üìä991äüì990K°TX½ ÿÀ @878Y@ 0 @ P ` Ÿ ]3+53265ÉÊÍãM?†nÕú“þòôª–ÂÉjÕ ï@(B¯  üì2ÔÄ91/<ì290KSXííííY"²]@’ ((764GFCUgvwƒˆ”›ç    (+*66650 A@E@@@ b`hgwp ‹‹Ž š¶µÅÅ×Öèéèê÷øù,]q]q3! !#ÉÊžýþöý3ÊÕý‰wýHüãÏý1ÉjÕ%@ •:üìì1/äì0@ 0P€€]3!!ÉÊ×ü_ÕúÕªÉÕ ¿@4  B ¯   >  üìüì91/<Äì290KSXííííY"²p]@V   && & 45 i|{y €‚‚  #,'( 4<VY ej vy •›]]! !###É-}-ÅþËþÄÕüøú+üúáÉ3Õ y@B¯6 üìüì991/<ì2990KSXííY"² ]@068HGif€ FIWXeiy…Š•šŸ ]]!3!#É–ÄþðýjÄÕûáú+áûsÿãÙð #@•• ‘Œ 3üìüì1äôìî0"32' ! 'ÜþýÜÜþÿÜ:xþˆþÆþÅþ‡yLþ¸þåþæþ¸HH¤þ[þžþŸþ[¤bb¥ÉÕ:@••   ? üì2üì91/ôìÔì0@ ?_¯]32654&#%!2+#“þššþ8ÈûþÿûþÊ/ýÏ’‡†’¦ãÛÝâý¨sþøÙð R@*  B ••‘Œ    3üìüì9991Ääôìî990KSXíí9Y""32#'# ! 'ÜþýÜÜþÿ? ôÝ!#þÅþ‡y;:xÑLþ¸þåþæþ¸HHúÏþÝï¥ab¥þ[þžþüþŽÉTÕ±@5  B• •   ?  üì2üÄì99991/<ôìÔì9990KSXíí9Y"²@]@Bz%%%&'&&& 66FFhuuwˆˆ˜˜]]#.+#! 32654&#A{>ÍÙ¿J‹xÜÊÈüƒý‰þ’••’¼~þh–bý‰ÕÖØºOýƒ…‡ÿã¢ð'~@<    B ¡”••”%‘Œ( "-"(ÜÄìüìä99991äôäìîöîÆ90KSXí9í9Y"²)]¶)/)O)].#"!"&'532654&/.54$32HsÌ_¥³w¦zâ×þÝþçjï€{ìr­¼‡š{âÊõiÚ¤Å76€vce+Ù¶Ùà0/ÐEFˆ~n|-À«Æä&ÿúéÕJ@•@@Ôäüä1/ôì20K° TX½@ÿÀ878Y@  @ p Ÿ ]!!#!ïýîËýîÕªúÕ+²ÿã)ÕK@ •Œ  8Aüìüì1ä2ôì99990K°TX½@ÿÀ878Y¶Ÿ]332653! ²Ë®Ã®ËþßþæþåþßÕüuðÓÓð‹ü\þÜþÖ*$hÕ·@'B¯ÔÄ91/ì290KSXííííY"²P]@b*GGZ}ƒ *&&))% 833<<7HEEIIGYVfiizvvyyu€˜—)]]!3 3JýÆÓÙÚÒýÇÕûéú+D¦Õ {@I      B ¯    ÔÌ91/<ì2290KSXííííííííY"²]@ò  ($ >>4 0 LMB @ Yjkg ` {|€ –•     !   # $ %  <:5306 9 ? 0FFJ@E@BBB@@ D M @@XVY Pfgab```d d d wv{xwtyywpx  †‡ˆ‰… Š —Ÿ¯[]]3 3 3# #DÌ:9ã:9Íþ‰þþÅþÂþÕûîûîú+úð=;Õ ]@F      B ¯   ÔÄÜÄ91/<ì290KSXííííííííY"K° TK° T[K°T[X½ ÿÀ @878Y@¸ '' 486 KX[fkww †€‡‹… ”—–     &()&(' ) 54<;:;4 4 8 ? H O X _ eejjhiil l xyyx}  x €€ƒˆ…„ƒ ”——•“ Ÿ ¯ @]]3 3 # #ÙsuÙþ Ùþ\þYÚÕýÕ+ý3üø{ý…ÿüçÕ”@(B¯@@ Ôäüä91/ì290KSXííííY"² ]@<5000F@@@QQQe„“ &)78@ ghxp Ÿ ]]3 3#Ùž›ÙýðËÕýšfüòý9Ç\Õ ›@B••B ÜÄÔä991/ìôì0KSXííY"K° TK° T[X½ @ ÿÀ878Y@@ )&8HGH    / 59? GJO UYfio wx Ÿ ]]!!!5!s•üPÇû=°ügÕšûoªš‘°þòXS@©²©±CÜüÌ21üìôì0K° TX½ÿÀ@878YK°TK°T[X½@ÿÀ878Y!#3!°¨ððþXùüÿB²Õ-@BŸ/Ä991ôì0KSXííY"#ªªýøÕùm“Çþòo<@©²©±Cü<Üì1üìôì0K°TK°T[X½ÿÀ@878Y!53#5oþXïïøÞÙ¨ÛÕ@ ÜÌ91ôÌ290##¼ÉþHþHÉÕýÓ‹þu-ÿìþþ¬µ©ÄÄ1Ôì0!5ûØþ¬ªð‰f1@ ´³DÜì1ôì0K° TK°T[X½ÿÀ@878Y #o™þºfþŠv{ÿã-{ %¼@'  ©¹ †º¹#¸Œ   E&üìÌÔì22991/ÄäôüôìÆîî9990@n0000 0!0"?'@@@@ @!@"PPPP P!P"P'p'…‡‡‡ ‡!…"' 'ð'000 0!@@@ @!PPP P!``` `!ppp p!€€€ €!]]"326=7#5#"&5463!54&#"5>32¾ß¬o™¹¸¸?¼ˆ¬Ëýû§—`¶Te¾Zóð3f{bsÙ´)LýªfaÁ¢½À‹..ª''üºÿ㤠8@¹  ¹Œ¸—G Füì22ôì1/ìäôÄìÆî0¶`€ ]4&#"326>32#"&'#3å§’’§§’’§ýŽ:±{ÌÿÿÌ{±:¹¹/ËççËËççRdaþ¼þøþøþ¼ad¨qÿãç{?@†ˆ† ˆ ¹¹¸Œ HEüä2ì1äôìþôîõî0@ € ].#"3267#"!2çNP³ÆÆ³PNM¥]ýþÖ-U¢5¬++ãÍÍã++ª$$>:#qÿãZ8@¹¹Œ¸—G Eüìôì221/ìäôÄìÄî0¶`€ ]3#5#"3232654&#"¢¸¸:±|ËÿÿË|±ýǧ’’¨¨’’§¶^ùì¨daDDaþËççËËççqÿã{p@$ †ˆ©¹ »¹¸ ŒKEüìôìÄ91äôìäîîôî90@)?p Ðð?????,// , ooooo ]q]!3267# 32.#"ü² Í·jÇbcÐkþôþÇ)ü⸥ˆš¹^Z¾Ç44®*,8 CþÝÄ—´®ž/øp@ ©‡—¼    Lü<Äü<ÄÄ991/ä2üìî2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y¶@P ]#"!!##535463ø°cM/þѹ°°®½™Phcü/ÑN»«qþVZ{ (J@#  †¹¹&#¸'¼ ¹½& G E)üÄìôì221/ÄäìäôÄìþÕî990¶`*€* *]4&#"326!"&'5326=#"3253¢¥•”¥¥”•¥¸þþúa¬QQžRµ´9²|ÎüüÎ|²9¸=ÈÜÜÈÇÜÜëþâþé³,*½¿[cb::bcªºd4@ ‡¸ — N  Füì2ôì1/<ìôÄì90²`]#4&#"#3>32d¸||•¬¹¹B³uÁƤý\žŸž¾¤ý‡ýžedïÁy+@¾±¼Fü<ì21/äüì0@  @ P ` p ]3#3#Á¸¸¸¸`û éÿÛþVy D@ ¾ ‡½¼ ±O  Fü<ì2ä991ìäôìî990@ @P`p]3+532653#Á¸£µF1iL¸¸`ûŒÖÀœa™(麜 ¼@)B¼— F üì2ÔÄ91/<ìä90KSXííííY"² ]@_ ')+Vfgsw‚‰Ž“–—£    ('(++@ h` ‰…‰š—ª§¶ÅÖ÷ð÷ð]q]33 ##º¹%ëý®kðýǹüiãýôý¬#ýÝÁy"·—Füì1/ì0@ @P`pð]3#Á¸¸ùìº{"Z@&  ‡ ¸¼PPF#üì2üüüì91/<<äô<Äì290@0$P$p$$ $ $¿$ß$ÿ$ ]>32#4&#"#4&#"#3>32)EÀ‚¯¾¹ru¦¹rw¦¹¹?°yz«‰|võâý\ž¡œ¾¤ý‡ž¢›¿£ý‡`®gb|ºd{6@ ‡¸ ¼ N  Füì2ôì1/<äôÄì90´`Ï]#4&#"#3>32d¸||•¬¹¹B³uÁƤý\žŸž¾¤ý‡`®edïqÿãu{ J@¹¹ ¸Œ QEüìôì1äôìî0@#?{{   {  { ð]"32654&'2#"s”¬«•“¬¬“ðþîðñþïßçÉÉçèÈÇéœþÈþìþíþÇ98ºþV¤{>@¹¹¸Œ½¼ GFüì22ôì1äääôÄìÄî0@ `€ à]%#3>32#"&4&#"326s¹¹:±{ÌÿÿÌ{±8§’’§§’’§¨ý® ªdaþ¼þøþøþ¼aëËççËËççqþVZ{ >@¹  ¹¸Œ½¼ GEüìôì221äääôÄìÆî0@ `€ à]32654&#"#"3253#/§’’¨¨’’§s:±|ËÿÿË|±:¸¸/ËççËËççý®daDDadªùöºJ{0@  ‡¸ ¼ FüÄì21/äôìÄÔÌ90´PŸ].#"#3>32JI,œ§¹¹:º….´˾ý²`®fcoÿãÇ{'ç@<  S  SB †‰†‰¹¹%¸Œ( R"E(üÄìÔìä99991äôìþõîõî90KSXí9í9Y"²']@m   . , , , ; ; ; ; $( ( *//*(() )!$'† † † †      '/)?)_))€)) )ð)]]q.#"#"&'532654&/.54632‹N¨Z‰‰b”?Ä¥÷ØZÃlfÆa‚Œe«@«˜àÎf´?®((TT@I!*™‰œ¶##¾55YQKP%$•‚ž¬7òž8@©¼‡  Fü<Äü<Ä2991/ìô<Äì2990²¯]!!;#"&5#53w{þ…Ks½½Õ¢‡‡žþÂý ‰NšŸÒ`>®ÿãX`6@ ‡Œ ¼  NFüìôì21/ä2ôÄì90´`Ï]332653#5#"&®¸||•­¸¸C±uÁȺ¦ýaŸŸ¾¤{û ¬fcð=`@'B¿ÔÄ91/ì290KSXííííY"K° TX½ÿÀ@878YK°TK°T[X½@ÿÀ878Y@ŽHj{†€‘¤  &&)) 55::0FFIIFH@VVYYPffiigh`ut{{uz……‰‰‰†––—š˜˜—¨§°Àßÿ>]]3 3#=Ã^^Ãþ\ú`üT¬û V5` @IU U U U   B ¿    ÔÌ91/<ì2290KSXííííííííY"K° TK°T[K°T[K°T[K° T[X½ ÿÀ @878YK° TK° T[K°T[X½ @ ÿÀ878Y@ÿ" 5 IIF @ [[U P nnf yy‡™˜” ¼¼ÎÇÏ         %%#'!%""%' $ ! # 9669 0FHF@B@@@D D D @@VVVPQRRPS T U cdejejjjn a g ouuy}x}zzxy  { v } ‡ˆ——”“œ›˜˜™@/– Ÿ¦¦¤¤««©©«¤ ¯µ±½»¸ ¿ÄÃÌÊy]]333# #V¸æåÙæå¸þÛÙñòÙ`ü–jü–jû –üj;y` Z@F      B ¿  ÔÄÔÄ91/<ì290KSXííííííííY"K° TK°T[K°T[K°T[X½ ÿÀ @878YK°TX½ @ ÿÀ878Y@˜   & =1 UWX f vzvt ‚ ™Ÿ—’ ¦©¯¥£       )&% * :9746 9 0 IFE J @ YVYYWVYVV Y P o x ›”«¤° Ï ß ÿ /]] # # 3 dþkªÙþºþºÙ³þrÙ))`ýßýÁ¸þHJþq=þV`¢@C        B  ‡½ ¼  ÔÄÄ91ä2ôì9990KSXíííííí2Y"K° TK°T[X½ÿÀ@878YK°TX½@ÿÀ878Y@ð     # 5 I O N Z Z j ‡ € “        '$$  )( % $ $ ' ** 755008 6 6 8 990A@@@@@@@@B E G II@TQQUPPVUVW W U U YYPffh ii`{xx‰Š … … ‰ ‰‰™ • • šš¤ ¤ ««°Ïßÿe]]+5326?3 3“N”|“lLT3!þ;Ã^^ÃhÈzšH†TNü”lXÛ` ´@B©¼© ÜÄ2Ä991/ìôì0KSXííY"K° TK° T[X½ @ ÿÀ878YK°TX½ ÿÀ @878Y@B&GI  + 690 @@E@@CWY_ ``f``b € ¯ ]]!!!5!qjýL´ü}´ýe`¨üÛ“¨%þ²$‚@4 %   ! © ©À ©±% $  C %Ô<Äü<Ä299999991üìÄôìî99999990K° TX½%ÿÀ%%@878Y²&]#"&=4&+5326=46;#"3>ù©lŽ==k©ù>DV[noZV¾”Ýï—ts•ðÝ“XøŽŽœøXþ®·±Ôì1üÌ0#®ªøþ²$ž@6%   ©©#À©±%#C %Ô<Ä2ü<Ä99999991üìÄôìî99999990K° TX½%@%%ÿÀ878YK°TX½%ÿÀ%%@878Y²&]326=467.=4&+532;#"+FŒUZooZUŒF?ù§lŽ>>Žl§ù?¾VøœŽŽøŽW“Ýð•st—ïÝ”ÙÓÛ1#@ œœ ÔÄ1ÔüÔìÀ990#"'&'&'&#"56632326Ûi³an’ ›^X¬bi³an“ ›^V©1²OD;>MS²OE<>LÿÿhN'$¼uhm !Ë@T   !!  ! !!!B  Á • Ž  !  VV!"ÔÄÔì2Ôî299999991/<æÖîÔî9990KSXííííííííY"² #]@  s › P#f iu {yyv v!€# ]]4&#"326!.54632#!#TY?@WX??Y˜þð!þX=>Ÿsr¡?<Òˆý_ˆÕZ?YWA?XXþóýN)sIs ¡rFv)ú‹þÿÿsþu'ð'&Ý-ÿÿÉ‹k'(žuÿÿÉ3^'1þuÿÿsÿãÙN'2'uÿÿ²ÿã)N'8îuÿÿ{ÿã-f'DRÿÿ{ÿã-f'DCRÿÿ{ÿã-f'D×Rÿÿ{ÿã-'DŽRÿÿ{ÿã-7'DØRÿÿ{ÿã-'DÜRÿÿqþuç{'FÝÿÿqÿãf'H‹ÿÿqÿãf'HC‹ÿÿqÿãf'H׋ÿÿqÿã'HŽ‹ÿÿof'ÖÿÿÿÿǦf'ÖCÿÿÿÿÞ\f'Ö×ÿÿÿÿôF'ÖŽÿÿÿºd7'Qؘÿÿqÿãuf'Rsÿÿqÿãuf'RCsÿÿqÿãuf'R×sÿÿqÿãu'RŽsÿÿqÿãu7'RØsÿÿ®ÿãXf'X{ÿÿ®ÿãXf'XC{ÿÿ®ÿãXf'X×{ÿÿ®ÿãX'XŽ{9ÿ;ÇÕ '@¹  YW Y Ô<ìü<ì1äôÔ<ì203!!#!5!¨°oþ‘°þ‘oÕþ\™û£]™Ãu=ð  @ÃÄà ‘ Z[ZÜìüì1ôìüì0"32654&'2#"&546PnnPPnoO@v+..¹†‡´¸ooPOmmOOp1.-rB„·´‡†º¬þÇ#˜!Q@+  †ˆ †ˆ ¹ ¹¸Œ"  "ÜìÔ<Ô<<ì221äô<ÄìÄþôîõî9990%&&'667#&73¦“¤¤JˆDF‰HA‰Mfñþ÷ ñfI‰ƒX⸹⡬)*ü *'ª#þä 32þá!bð`@!† ©  ”‘   Ü<ÌÌü<ÄÔÄ1/ì2ôäìÔ<î2î990K° TX½ÿÀ@878Y´66].#"!!!!53#535632NLˆ=”t‡þy-üìÇÇÖè=—´¶))›Ô×þ/ªªÑîó\ÿ=¢ð >‘@54&.#"#"&'532654/.5467.54632{?>‹ú?>ÌS8alÎÓƒ\]>9Ì­IšXW”:fqÝÖ€][;;ȦI™¨.Z.L…‡-[.Kˆ“¤''PGZswšeZŒ54m@ލ¤''TLf{x™f[1,pE‚Ÿ3Ñ…! · Ç \ Ôì1Ôì04632#"&3­~|«¬}}¬ú|««|}¬¬žÿ;9Õ %@Á]] ÔÔüÜì91Ä2ôì90!###&&54$yÀ¾Ž×ëÕùfùáNݸ¾èºÿã¬/š@0-'!  *†¹*¹—Œ.  !' $'$-F0üÄüÌÆîÔîî99991/äþîþÕî990@@'(Š Š     ! "&  : :!MM I!I"jj ¥¥¦ ]]4632#"&'532654&/.5467.#"#ºïÚÐÛ—¨:A9¦`áÓ@ˆIPŒAtx;e\`W§—ƒq‚ˆ»qÈÛèàs`/Q*%jŽd¬·¤_[?T>7;‡[¬gp‹ƒû“åÍ/8L`@6EBC?2ÉH0É9JCÊ 9ÊÉÈ É$HE301BKL?gwyVpMIßÑ`3þœDåÍ/IC@&=Ë>:ÌAÊ$1Ë04ÌGÊÉÈ$É 7aD=0^* D^ JÜÌüìþí2î1/îöþýîÖîýîÖî02#"$'&5476$"32676654&'&&&&#"3267#"&54632˜mmllmmþù˜˜þùmmllmm˜ƒâ^^``^^⃄ã^]]^\^ã§B‚B•§«›@zBC‰FØûûØIˆÍnmmþúš˜þûmmnnmm˜šmmng^^^å‚ã^^__^]⃅ã]^^õ! ¯Ÿ®"ôÐÑò'“FÕ >@!  É  b b cbcÔäüäÔìÔì91ô<<ì2Ô<<Ä903#######5J®¤ªqÃ7ËrqËrÉÕÿý¾äþÑ/þB^þä^sîRf1@ ´³DÔì1ôì0K° TK°T[X½ÿÀ@878Y3#‹Çþº™fþˆ×F)’@ÎÍddÜüÔì1ü<ì20K° TK° T[X½@ÿÀ878YK° TK° T[K°T[K°T[X½ÿÀ@878YK°TK°T[X½@ÿÀ878Y@````pppp]3#%3#^ËËþyËËÊÊÊÙ'ÛÝ>@" Ïœ Ï œ  Ü<Ä291Ô<Ì2ü<ìþ<ì990!!!!!'7!5!7!Ù}®/þHÃ{üúþþ}®þÕ¶Ãý‡¢;fÕ¨ðªþÇfÓªðHÕ‡@9  B• ••••­    ÔÔ<ì2ÔÄÄ91/<ììÄôììîî0KSXííííY"²€]@gww† …– ¿ ]!!!!!!#!5ýÇý9øü=ýð Íq‹þ¶ËÕªþFªýãªþÕžüðfÿºå +ž@< +,  )&  *&•& •‘&Œ,+,* # )#3,üìüìÀ999999991äôìîÀÀ99999990@*WZWU!je!{vu! FYVjddj(|svz( ]] 324&'.#"&5!27!"&''¶ý3>¡_Ü'y=¡_Üþý''†NOy;‚ÝW¢fªNPþˆþÆ€Ý[¢gXü²@CHp¸¸@Cþ¸þåp¼Džf b¥MK¿YÆgþöžþŸþ[KK¿XÝÝÏî /ÿ@- !$'!!0 $*0ÔÄÔÄ99991ÔÄÔÄÀ9990@¾     $$$   $$ $ ***///***55500055 5 :::???:::EEE@@@EE E JJJOOOJJJV´° °!°"°&°'°(´)]]32654&#".#"326#"&54632>32#"&“1†Te€vYR…Ä1…UfvYR†F^ˆº§†_™HDža†¼§†^•/XZ‡ie†‡7XX„je†ˆ‡ߦ¯Ø~ŠŠƒá§¯ÖwÙÛ .@МР œ   Ô<ì2ü<ì21/ìÔ<ìü<ì0!!#!5!!!®-ýÓ¨ýÓ-ýÓúþþ}ªþ}ƒªƒû¦ªÙÛ¨ T@.œœœœBѧœ $# ü<ì2291/ìôì90KSXííííY" 5!!Ûü@Àúþúþúþøþëþî²pªoüªÙÛ¨ V@/œœœœBѧœ$ # ü<<ì291/ìôì90KSXííííY"55!5ÙúþÁAúþø°þ‘ªþ²ýǪªRÃÕÆ@F  B Ó Ó   fe f eÔ<ì2ìüì2ì99991/ä2Ô<ì2Ô<ì290KSXííííY"K° TX½ÿÀ@878Y@(†¦ µ' ' ')((79‡ ˆ¦ ¥ª©]]!#!5!5'!5!3 3!!!þcÉþ` Tþ´þþ{y¿þÂþµTŸÇþ9Ç{3›{JýD¼ý¶{›3®þVå` M@% ‡Œ ¼½!   NF!üì2ôìÄ91ää2ô<ìÜÄ990¶"`"Ï"]3326533267#"&'#"&'®¸Š‡”•¸#% )I#ER2‘bf*þV ýH‘”¨¨ü¢<9 ”NPOONNý×hÿçÁ-)b@'! '!Õ* $$*ÔÌÜÌ9991äÌÜÌÎÎ990K° TK° T[K°T[K°T[K°T[X½*@**ÿÀ878Y>54&#"#"&54632#"&54324&#"32ôIH7$$0e´ÖþßÕ˜ËÝ¢e‚ WOmVPmmW£Kƒt,>bþÊþùþ±þFØ£Æ[àt}þþÏt{þw;Á ]@    ÔÄ91ÄÔÌÎ990@0QVPZ spvupz €€ Z pp{ t €€ ]]!! !!5 7êüA ýJïúÞÕýIÁÁý3ýÀ•!ãœþwqÁ@×Ö¯ggÔìÔì1üìì20!#!#œÕðý ïÁø¶}ùƒÿáÿðª/#Ë@1 ÚÙ"ØÕ $ #" #h#$ÔÔÔì9999991/<äôì22î9990K° TX½$ÿÀ$$@878Y@V             ##(]]#3267#"&5467!##"#>3!‡¶i/7.%7vy"PþºÂµÃ)6<  ¥y‘þJ\:1fd.¡xüo‘@E¦}/þú%&@ Û Ûܱ& iji&Üìüì1üìÜäÞä026732#"&'&&#"#"&546327j ¾ÊPd@7*8  k½ÄOeD=!0 þú°l9¼TA6?&#Hý•Ánþ!þbSA8?SsÕ;ð)_@3(%ãÝá%Ý ßÞÝ à‘* "(kl"k *ÜìÌüì22ÀÀ9991ôäüôìÄîíÖîî99990!!#5#"&5463354&#"56632"32655‹°ýP®•,]€˜¿¼¶uu>ˆDI‘E·³þì¡~bRh‚P{¸þ@p?D‡q‡Š[[""°ðCO@Mr`Õdð.@ãáÝ àÝ‘ klk Üìüì991ôìôìüì0!!2#"&546"32654&‹°ýPX³Îγ³Ðгi~hi}|P{Ý¿¿Ûܾ¿Ýs¡ˆ…  …‰ NÏç@@" å‘å  mm  ÔììÔììÀÀ9991/<ì2ôì0%!5654#"!5!&5! Ïý¨±ÆþøØØþ÷Dzý¨?ž‘1/Ž¡²²²aLÊð"þÝïÊþ´a²²‹*¸>ŠþwþËÂþØ{ÿão{3>@C'-%= 4©%†ˆ©:¹.†-º*¹»1 ¸Œ%?47&%7& =&-7"E?üìÌÔü<ÔìÄ999991Ää2ô<Ääü<ôìÄî2îôîî9990@0+0,0-0.0/00@+@,@-@.@/@0P+P,P-P.P/P0…+…0€@@ @°@À@Ð@à@à@ð@??? ??0,0-0.0/@,@-@.@/P,P-P.P/ooo oo`,`-`.`/p,p-p.p/€,€-€.€/]q].#">32!3267#"&'#"&5463!54&#"5>32"326=¶¥‰™¹DJÔ„âü² Ì·hÈddÐj§øMIؽÒýû§—`¶Te¾ZŽÕï߬o™¹”—´®ž0Z^þÝúZ¿È55®*,ywxx»¨½À‹..ª''`þf{bsÙ´)Hÿ¢œ¼ +ä@<+,&  )&  *&¹& ¹¸&Œ,+,* # #Q)E,üì2ôì2À9999991äôìîÀÀ99999990@p(?-YVUV jf!{    { z{ {!"#$%{&›•%¨ -ð-&YVUZ(ifej(ztvz(‰•š$¢­$]] 32654&'.#".5327#"&''‰þ)gA“¬\*g>—©}66ñ]ŸC‹_’56þîð`¡?‹`!ý°*(èÈOuš))ëÓHn.—MÅw834¨O³MÆxþíþÇ43¨Nÿã¬Õ $†@/ †ˆ !ƒ# •Œ#%" " "!& %ÜìÔüìÔì99991äôìþÍôî9990K°TK°T[K°T[X½%ÿÀ%%@878Y@ ttttv]33267#"&546?>7>5#53ô¾7ZZ:3ƒmN´`^Àg¸àIYX0&ÄÊÊDœe‚WX5^1YnFC¼98ŸL‰VV/5<6þ5Õ b@ƒ ü<ì2991/ôüÌ0K° TX½ @ ÿÀ878YK°TK°T[K°T[X½ ÿÀ @878Y¶ P ]#53#3ËËË¢×þú+eþ›ÙÛ^@ œÜÔì1ÔÄì0!#!Ù¨û¦^ýÁ•=ÿ×} *@    ÔÌ91ÔÌÄ903##'%\½sý®BþÁ}}`ùºs-Pbý;þV#Š@@   B   ©Šæ©Šæ©!—$  $ÔÌ91Ä2Äüìôìîöîî299990KSXí2í9Y"K° TX½$ÿÀ$$@878Y.#"!!#"&'53267#5!>32&P,`r<þÃ:¼º:d/4a/am"‰ø?$Æ—5dð¤z„þÉý…þãÓ¦!!‰¦­J·ÃÙÛô;?@.9*-" *œ19œ"œ œ<-<Ô<Ä21ÔìÔìÜüÔìÀ9999990#"'&'&'&#"56632326#"'&'&'&#"56632326Ûi³an’ ›^X¬bi³an“ ›^V©gi³an’ ›^X¬bi³an“ ›^V©o³NE;=LT³NE;=KÚ²OE;=LS²NE;=Kÿú`Á8@ÔÌ91/ÄÌ90@cmpxyvn]] !3!¬þ^DýïàCúšîûÄú?ž%# †@Ièèèè è è è  è B  ç¦ o o nüü<Ôì2991ô<ì2990KSXííííííííY"55%þÓ-þ+#þÓ-þ+#¿þôþô¿¢R¢¿þôþô¿¢RÁH# †@I è è è è èèèèB  ç¦ o opü<üÔ<ì991ô<ì2990KSXííííííííY"5%5ÁÕþ+-þÓ²Õþ+-þÓ#þ^Rþ^¿  ¿þ^Rþ^¿  ìþ #@ƒ   ÔüÔìÔì1/<<ì220%3#%3#%3#–ÔÔ©ÕÕú­ÕÕþþþþþþÿÿhk'$¼uÿÿh^'$¼uÿÿsÿãÙ^'2'us Õ;@•••­   üìÔÄÄÔì299991/ìì2ôì2î0!!!!! !# !3úýÇý9øû×þOþA¿±gþ¿þÀ@AÕªþFªýãª|pm|ªþáþàþßþßqÿãÃ{'3„@1†ˆ ©. ¹(¹»"%¸Œ4"1 K1 Q+E4üìôüôìÄ9991ä2ô<Ääì2Äî2îôî90@%?5_5p5Ÿ5Ï5Ð5ð5????? ooooo ]q].#"!3267#"&'#"32>32%"32654& ¤‰™¹Hü² Ì·jÈbdÐj òQGÑŒñþïñŒÓBNèâú°”¬«•“¬¬”˜³®ž5Z¾Ç44®*,nmnm98olkpþ݇çÉÉçèÈÇééy¶©é/Æ1üì0!!üyéyµ©/Ì1Ôì0!!øy®émÕ '@ž   ÜüÌÔÌþÔÎ1ô<ì20#53#53Ó¤RšÓ¤Ré­?þÁ­­?þÁ®émÕ '@ ž  ÜìÔÌÜîÔÎ1ô<ì203#%3#Ó¤RšÓ¤RÕ¬þÀ@¬¬þÀ@®éÓÕ@ žÜüÔÌ1ôì0#53Ó¤Ré­?þÁ²þ×Õ@ žqÜìÔÌ1ôì03#Ó¤RÕ˜þÁ?Ù–Ûo )@êêœ r ÜÔ<ü<Ä1ÔÄüÄîî03#3#!!ßööööýúúþoöþõAªþ#îu"@ÔÌ91ÔÌ990 úþþôþ þ üÏüÇ9%ûÛûÓ-ÿÿ=þV'\Ž^ÿÿÿüçN'<suþ‰ÿãÍð+@BŒ‘ÔÌ1ää0KSXííY"3#- ü\ ðùó^R¼²#/ƒ@I -'! - -¹ëì'¹ë!0 *$0* $ $(st*(s0Üäìôäì9999999991ÔäìôäìÀ9999999907'#"&''7&&5467'766324&#"326{ÏrÎ%$&(ÑrÏ;t=:x=ÏqÏ%%&&ÏsÏ7t@?s9ÏqÏ(&%%ÏsÎ>v:@t8ÎsÏ'%$þ|pššprœžs#G@%èèèèBç¦onüì291ôì90KSXííííY"5sþÓ-þ+#¿þôþô¿¢RÁ–#I@&èèèèBç¦opü<ì91ôì90KSXííííY"5ÁÕþ+-þÓ#þ^Rþ^¿  /J›@( ©‡¾±— ¼ Lü<Ä2Äü<Äî2991/<æ2îþîîî2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@0P€€€ Ðï]]#!##53546;#"3#J¹þ¹°°­³¹°cMù¹¹`û Ñü/ÑN·¯™Phc²é/J„@! © ‡— ¼   Lü<ÄÄü<Äî991/<æ2þîî2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@0P€ € € Ðï]!#!"!!##53546J¹þ·cM/þѹ°°®ùì{Phcü/ÑN»«9ÿ;ÇÕ>@ ¹¹  ÂY W Y Ô<<ì2ü<<ì21äôÄ2Ä2î2î20%!#!5!!5!3!!!Çþ‘°þ‘oþ‘o°oþ‘oßþ\¤š™¤þ\™ýáÛH®F·ƒÔì1Ôì03#ÛÓÓFþ®ÿÓþ@ žƒÔìÔÌ1üì0%3#Ó¤Rþ¬þÀ@®ÿmþ '@ žƒ   ÜìÔÌÜîÔÎ1ü<ì20%3#%3#šÓ¤RþfÓ¤Rþ¬þÀ@¬¬þÀ@qÿã Lð #'3?K®@D$%&%&'$'B@’ .’(’F’4 :&Œ$‘L%IC'1+C =  1 =I 7+ ! LüäìÔÄìäîîöîî991ä2ô<<ä2ì2îöîî20KSXííY"K°TK° T[K° T[K° T[K° T[K°T[X½L@LLÿÀ878Y"32654&'2#"&5462#"&546!3#"32654&2#"&546"32654&ôWddWUccUžº» º»ùtž¼»ŸŸ¹º% üZ VcbWWcd²žº» º»ŸWccWUcc‘”„‚••‚ƒ•Ü»»ÛÛ»¼ÛàÛ»½ÚÛ¼ºÜùóŽ•‚„””„–ýŸÜ»»ÛÛ»¼Û”„‚••‚ƒ•ÿÿhm'$¼uÿÿÉ‹m'(žuÿÿhk'$¼uÿÿÉ‹N'(žuÿÿÉ‹k'(žuÿÿ¢k',ÿ/uÿÿÿþ`m',ÿ/uÿÿXN',ÿ/uÿÿ;ºk',ÿ/uÿÿsÿãÙk'2'uÿÿsÿãÙm'2'uÿÿsÿãÙk'2'uÿÿ²ÿã)k'8îuÿÿ²ÿã)m'8îuÿÿ²ÿã)k'8îuÁy` ·¿Füì1/ì0@ @P`p]3#Á¸¸`û Áî?f7@ ´³uÜì91ôì290K° TK°T[X½ÿÀ@878Y3#'#¶”õ‹´´‹fþˆõõ¶J7c@$  Ãà íVwVvôìüì99991ü<üÔ<ì99990K° TK° T[X½ÿÀ@878Y'.#"#>3232673#"&ü9! &$}f[&@%9! &$}f[&@Z7IR‡“!7IR‡“Õb+ö/·ïîÔÌ1üì0K° TK°T[X½ÿÀ@878Y!!ÕVýªö”Ç)9H W@ ð³VVÜìÔì1ô<Ôì0K° TX½ÿÀ@878YK°TK°T[K°T[X½@ÿÀ878Y332673#"&Çv aWV` v ž‘‘žHKKJLšDf,@ ÎÍdÔì1üì0K° TX½ÿÀ@878Y3#šÌÌÌîá _@Áò ÁñV xVÔìôì1ôìôì0K° TK° T[X½ÿÀ@878YK° TK° T[K° T[X½ÿÀ@878Y4&#"3267#"&54632˜X@AWWA@XzŸssŸŸssŸô?XW@AWX@s  ssŸŸ#þuÁ@  ó' ÜÔìÔÌ1/ÔüÄ90!#"&'532654&'T76xv.W+"J/;<+->i0Y[ ƒ0.W=ðî®fB@´³ÔÜÔÌ991ô<ì20K° TK°T[X½ÿÀ@878Y3#3#ü²ø‡ªß‰fþˆxþˆLþuÁ @  óô 'ÔìÄÔÌ1/üüÄ90!33267#"&546¸w-+76 >&Dzs5=X..… W]0iÁî?f7@ ´³uÜì91ô<ì90K° TK°T[X½ÿÀ@878Y373¶õ‹´´‹õîxõõþˆÿòuÕ ?@ •  : yô<ìÄü<Ä991/äì90´0P]3%!!'7ÓË9Pþw×ü^”MáÕý˜Ûoþîýãª;jnžH ^@ — z z Ô<äü<ä991/ì90K°TX½ @ ÿÀ878Y@ @ P ` sz p à ð ]37#'7Ǹ}Lɸ{JÅý¦ZjüãšXjÿÿ‡ÿã¢m'6‹uÿÿoÿãÇf'Vàÿÿ\m'=¾uÿÿXÛf']àþ¢®˜@ õõÜ<ì21ÔìÔì0##®ªªª˜ý öý ö ºÕ g@  © ••  2  yô<ì2ÄôìÄ91/Æ2îöîî20@( °Ÿ Ÿ Ÿ Ÿ ŸŸŸŸ¿ ¿ ¿ ¿ ¿¿¿¿]]! )#53!!3 !Ó ±–þiþPþ`ÉÉËPþ°ó5þáþËÕþ—þ€þ~þ–¼ãþýê.,qÿãu('@^%{&%#${##{#({'(#&'('%$%(('"#" ! B('&%"! ##¹ ¹Œ#±)&' ! (%#" QE)üìôì99999991ìÄôìî9990KSXÉÉÉÉííííY"²?*]@v%+("/#/$)%-&-'*(6%F%X X!` `!f"u u!u"%#%$&&&''(6$6%F$E%Z Z!b b!z{     {zzv v!x" *ð*']].#"32654&#"5432''%'3%F2X)§¹®’‘®6 ~rþäæçþåÝ4*ŸþÁ!µäM!þÙ“ØÃ¼ÞÞ¼z¼&þà­ÿþÉ7ÿú7´kc\Ì‘oabÿÿÿüçk'<suÿÿ=þVf'\^ÉÕ =@• •ö  ? üì22üì91/ôüìÔì0@ ?_]332+#32654&#ÉÊþûþÿûþÊÊþš™ŽÕþøáÜÜâþ®'ýÑ’††‘ºþV¤>@¹¹Œ¸½— GFüì22ôì1ìääôÄìÆî0@ `€ à]%#3>32#"&4&#"326s¹¹:±{ÌÿÿÌ{±8§’’§§’’§¨ý®¾ý¢daþ¼þøþøþ¼aëËççËËççÙ-Û×¶œÔÄ1Ôì0!!Ùúþת?œÅ …@M œ  œœœœœ œ œ B   Ô<Ì291Ô<Ì290KSXííííííííY" '7œþ7Éwþ5þ5vÈþ8vËËLþ5þ7yËþ5yÉËyþ5ˉœÅß ,@Ý ÝÝ ÷‘ |]|| Üôäüä1ôììÔìî2035733!œÌßæ‰Íý× c)t'ý+n^œ´ðJ@$}}BÝÝ÷ Ý‘~ÜÄÔÄì91ôÄìüìî90KSXí2íY"!!56754&#"56632 ¨ýª"?XhU4zHM…9‘®þµ8rn81^BQ##{„l‹þä0bÍð(H@' Ý Ý Ý Ý ø÷Ý ø#‘)~&~ )ÜÄÄÔìÔì9991ôäìüäìÔìîî90#"&'532654&##532654&#"56632 \e¾±9}F4wCmxolV^^ad_(fQI€7©Z`mR|†yOFJLl?<:=svcE`ÿÿ‰ÿãð'ð'¼5 ‹ýdÿÿ‰ÿã?ð'ð'¼5ñ‹ýdÿÿbÿãð'ò'¼5 ‹ýdÿÿsÿã‹m'* uÿÿqþVZH'JÚ‹ÿÿÉ•P', ÿ/uÿÿ‡þu¢ð'6Ý‹ÿÿoþuÇ{'VÝÿÿsÿã'k'&-uÿÿqÿãçf'F‰ÿÿsÿã'm'&-uÿÿqÿãçf'Fà‰qÿãô$J@$Ó ù"¹¹ Œ¸—   GE%üìô<Äü<Ä1/ìäôÄìÄîý<î20¶`&€& &]!5!533##5#"3232654&#"¢þºF¸šš¸:±|ËÿÿË|±ýǧ’’¨¨’’§¶N}““}úü¨daDDaþËççËËççd߃¶œÜÌ1Ôì0!!dý僤ÛH®F·ƒÔì1Ôì03#ÛÓÓFþÿãð1@: Ó"+Ó ¡®•¡®•/‘Œ) 2+"!)#&  , & &*!/<ÔÄ2üÄÄ99999999991Ä2äôìôìîöîî2Ý<î20K° TK° T[K° T[K°T[K°T[K°T[X½2ÿÀ22@878Y@z  1Ti lnooooiko o!o"o#n$l%i'i-ŸŸŸ Ÿ Ÿ Ÿ Ÿ ŸŸŸŸŸŸ–Ÿ Ÿ!Ÿ"Ÿ#Ÿ$Ÿ%Ÿ&Ÿ'Ÿ(Ÿ)Ÿ*Ÿ+Ÿ,-2   USjg ]].#"!!!!3267#"#734&5465#7332[©fÊ A7ýæ¾8þŠ Êf©[Y¹`íþË(Ó7‹Â7œ(6ìb¹bÕiZÈ»{.# .{»ÊZiÓHH"{/ #/{"G×)Ù¥@ ÎddÔüÜì1Ô<ì20K°TK°T[X½@ÿÀ878YK°TK° T[K°T[X½ÿÀ@878YK°TK°T[X½@ÿÀ878YK°TX½ÿÀ@878Y@````pppp]3#%3#^ËËþyËËÙËËËsîðö@BúÄÀ1ôÌ0KSXÉÉY"K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@ %%6FVjg //]]3#7¹ä™öþø¶Jéu@!  ÃÃúVV ÔìÔì99991ô<ìÔì2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y´ ]'.#"#4632326=3#"&ü9 $(}gV$=09" (}gT";9! 2-ev 3)dw î‹ö‰@BúÄÀ1ôÌ0KSXÉÉY"K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@*$$5CUUŸŸ¯¯//]]#ÇÄ™æöþøÏî1øw@ úÔÄ91ô<Ä90K° TX½ÿÀ@878YK°TX½@ÿÀ878YK°TX½ÿÀ@878Y@ //- ]3#'#¢¼Ó‹¦¦‹øþö²²Ïî1ø†@ úÔÄ91ôÄ290K° TK° T[K° T[K° T[X½ÿÀ@878YK°TX½@ÿÀ878YK°TX½ÿÀ@878Y@ "  ]373¢Ó‹¦¦‹Óî ²²þö?œôß Ô@ Ý ÷‘ ] ÜÔ<Äì291ôüÔ<ì290K°TK°T[K°T[K°T[K° T[K° T[X½@ÿÀ878YK°TK°T[X½ÿÀ@878Y@T /9IFYi‹«»       "5GK S[ e„¥µ]] !33##5!5ÝþË5¦‡‡þbfþ]ýämººyÇ9ø j@à úVVÔìÔì1ôüÄ20K° TX½ÿÀ@878YK°TX½@ÿÀ878YK°TK°T[X½ÿÀ@878Y332673#"&Çv cSRav  Ÿø6978w{zšfÛ¶úÔÌ1ôÌ03#šÌÌÛÍ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßà>: ~ÿ1BSax~’ÇÝ©À & 0 : ¬!""""+"H"e%Êûÿÿ   0AR^x}’ÆØ©À  0 9 ¬!""""+"H"`%ÊûÿÿÿãÿõÿØÿ ÿ^ÿCÿhÿüöüÛà–à…àVßjÞqÞ_Úï¿8ôüúúü (B¬£„…½–熎‹©¤ŠÙƒ“ñò—ˆÃÝðžªóôõ¢­ÉÇ®bcdËeÈÊÏÌÍÎèfÒÐѯgï‘ÕÓÔhêì‰jikmln oqprsutvwéxzy{}|¸¡~€ëíºýþÿøÖùúãä×àÚÛÜßØÞ²³¶·Ä´µÅ‚‡«˜¨š™î¼¥’”•Íf‹‹55®Å´žªšq=3ۤ=´Ù‹žãd‹Û²‡á–œdž¨‹²ð²ž´Ù´Ù´Ù?“‡y}É–s)ÉÉšÉ3sÉ\É\ÿ–?ÉuÉçÉüÉLsÓÉLsɇãÿúÛ²yéD{=ãÿü{\°²Ç´Ùÿìªç{ºfqqìqÑ/qº9Á9ÿÛ¢º9Á˺ºåqºqJº+o#7®¼=‹V¼;¼=3X²´Ùyy–sÉüÉLsÛ²ç{ç{ç{ç{ç{ç{fqìqìqìqìq99ÿÇ9ÿÞ9ÿôºåqåqåqåqåq®®®®9ì\¸3ž º's×´ÙËLfªÝ´Ù´Ù´ÙR®#hdœ¶ÿá+/ÅsÅ`NÛ{åH?55´Ù=´ÙZÿúåžåÁìyyLss/q%®%®‹®‹²´Ùô¼=ãÿüVþ‰^3ž3Á / /9‹Û‹®%® ¼qyÉyÉÉ\¢\ÿþ\\;LsLsLsÛ²Û²Û²9ÁÁ¶ÕÇšî#ðLÁÿòF‡+o{\3X²3 åqãÿü¼=×ɺ´Ù´5‰5^5bÁ‰Á‰Áb3sq\ɇ+o–sfq–sfqqãd‹Û×s¶ ÏÏ5?Çšÿ+   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóõôöøùúûüýþÿ     sfthyphenperiodcenteredEuroc6459c6460c6461c6462c6463c6466c6467c6468c6469""""X“ÿ¶Oƒ²ö!n˜´ÊÞE‚~áL·üeÏî  R s ®  ß X ° û : i “ æ  = z /¬E…ëuñ)pཊëP‹±á@Ö"m¹#{ßC€øw³R¡Ø‡Äº‡wè [ r ó!5!B!â!ï!ü" ""#"0"="J"W"d"q"~"‹"˜"¥"²"¿"Ì"Ù"æ"ó## ##'#4#A#N#[#h#”#Ï$4$%3%S%&&º'K''·((X(Ã)_*%*\*£*é+z+Ó,D,,±-P- ..R.ª/‡0A0½11!1P1Ï2H2z2ß3F3p3p3}3Š3—3æ4z44£4Ñ4ÿ5595g5‘5ž5«5Ï6[6“6Í7C7©7ë888J999)969C9P9]9j9w9„9‘9ž9«9¸9Å9Ò9ï::{: :å;;^;Ž;Ä;ô<"<_<§<´<Á<Î<Û<þ=c>;>H>U>˜>ç>ý?a??Ü@:@K@\@m@z@‡@”@¡@®@»@È@Õ@âA@AVAkBEBªB÷C_C²CÿDUDÛE*E?-†” x$ÿÓ%ÿ·&')*K+-r./2934K57ÿD9ÿˆ:ÿ­;ÿš<ÿ =IQR&UYÿÉZ\ÿÜbÿÓdg9xy&z&{&|&}&‰­ÿÓ®ÿÓ¯9ºÿÜ»ÿ ÇÿÓÉÿÓÐ9Ñ9Ò9åéêÿ ëÿÜìöKûý$ÿÓ$ÿÜ$ÿÜ$$9$&ÿÜ$*ÿÜ$2ÿÜ$4ÿÜ$6$7ÿa$8$9ÿ}$:ÿ$;$<ÿa$FÿÜ$GÿÜ$HÿÜ$Iÿ·$RÿÜ$TÿÜ$WÿÜ$X$Yÿˆ$Zÿ­$\ÿu$b9$dÿÜ$gÿÜ$h$oÿÜ$pÿÜ$qÿÜ$rÿÜ$sÿÜ$yÿÜ$zÿÜ${ÿÜ$|ÿÜ$}ÿÜ$~$$€$$©ÿ·$ª$­9$®9$¯ÿÜ$´þø$µÿ$ºÿu$»ÿa$Å/$Ç9$É9$ÐÿÜ$ÑÿÜ$ÒÿÜ$Ó$Ô$Õ$ã$êÿa$ëÿu$öÿÜ$ù$ûÿÜ$üÿÜ$ýÿÜ$þÿÜ%%&ÿÜ%*ÿÜ%2ÿÜ%6ÿÜ%9ÿÁ%:ÿ·%<ÿ%dÿÜ%gÿÜ%©ÿÁ%ªÿÜ%¯ÿÜ%´ÿ%µÿ%»ÿ%Åÿ­%ÐÿÜ%ÑÿÜ%ÒÿÜ%ãÿÜ%êÿ%öÿÜ%ùÿÜ%ûÿÜ%ýÿÜ&&$&6&<ÿÜ&b&©ÿÜ&ªÿÜ&­&®&´&µ&&»ÿÜ&Å&Ç&É&ã&êÿÜ&ù''$ÿÜ'9ÿÜ':'<ÿ'bÿÜ'©ÿÜ'ªÿÜ'­ÿÜ'®ÿÜ'´ÿÓ'µÿÉ'»ÿ'ÅÿD'ÇÿÜ'ÉÿÜ'êÿ))þ·)ÿa)$ÿD)6ÿÜ)7ÿÜ)DÿD)Hÿ)Lÿk)Rÿ·)Uÿk)Xÿ)\ÿD)bÿD)iÿD)jÿD)kÿD)lÿD)mÿD)nÿD)pÿ)qÿ)rÿ)sÿ)yÿ·)zÿ·){ÿ·)|ÿ·)}ÿ·)~ÿ)ÿ)€ÿ)ÿ)©)ª)­ÿD)®ÿD)´ÿÓ)µ)ºÿD)Åþˆ)ÇÿD)ÉÿD)ãÿÜ)ëÿD)ùÿÜ**$*7ÿ·*:*<ÿš*b*©ÿÜ*ªÿÜ*­*®*´ÿÓ*µÿÓ*»ÿš*ÅÿÉ*Ç*É*êÿš++ÿÜ++©+ª+´ÿ·+µÿÁ+Åÿ·-ÿ·-$ÿÜ-bÿÜ-©ÿÜ-ªÿÜ-­ÿÜ-®ÿÜ-´ÿ·-µÿÁ-Åÿ-ÇÿÜ-ÉÿÜ.ÿ).$ÿÜ.&ÿ.2ÿ.7ÿa.8ÿÉ.:ÿ·.<ÿ·.DÿÜ.Hÿš.Rÿš.Xÿš.\ÿk.bÿÜ.dÿ.gÿ.hÿÉ.iÿÜ.jÿÜ.kÿÜ.lÿÜ.mÿÜ.nÿÜ.pÿš.qÿš.rÿš.sÿš.yÿš.zÿš.{ÿš.|ÿš.}ÿš.~ÿš.ÿš.€ÿš.ÿš.©ÿ}.ª.­ÿÜ.®ÿÜ.¯ÿ.´ÿÁ.µÿÁ.ºÿk.»ÿ·.Å.ÇÿÜ.ÉÿÜ.Ðÿ.Ñÿ.Òÿ.ÓÿÉ.ÔÿÉ.ÕÿÉ.êÿ·.ëÿk.ûÿ.ýÿ/ÿÜ/$//2ÿ·/7þæ/8ÿš/9ÿ/:ÿD/<þð/D/HÿÜ/RÿÜ/XÿÜ/\ÿD/b//gÿ·/hÿš/i/j/k/l/m/n/pÿÜ/qÿÜ/rÿÜ/sÿÜ/yÿÜ/zÿÜ/{ÿÜ/|ÿÜ/}ÿÜ/~ÿÜ/ÿÜ/€ÿÜ/ÿÜ/©/ª/­//®//¯ÿ·/´þa/µýæ/ºÿD/»þð/Å/Ç//É//Ðÿ·/Ñÿ·/Òÿ·/Óÿš/Ôÿš/Õÿš/êþð/ëÿD292ÿ­2ÿÜ2$ÿÜ29ÿÜ2;ÿ}2<ÿ2bÿÜ2©ÿÜ2ª2­ÿÜ2®ÿÜ2´ÿÓ2µÿÜ2»ÿ2ÅÿD2ÇÿÜ2ÉÿÜ2êÿ3ÿÓ3þÁ33$ÿ}383:3<ÿÓ3Dÿ¤3Hÿ·3LÿÓ3QÿÜ3Rÿ·3UÿÜ3VÿÜ3XÿÜ3\3bÿ}3h3iÿ¤3jÿ¤3kÿ¤3lÿ¤3mÿ¤3nÿ¤3pÿ·3qÿ·3rÿ·3sÿ·3xÿÜ3yÿ·3zÿ·3{ÿ·3|ÿ·3}ÿ·3~ÿÜ3ÿÜ3€ÿÜ3ÿÜ3©ÿÜ3ª3­ÿ}3®ÿ}3´&3µ&3º3»ÿÓ3Åþ·3Çÿ}3Éÿ}3Ó3Ô3Õ3äÿÜ3êÿÓ3ë3úÿÜ494©4ª4´ÿÓ4µÿÜ4Åÿ}5ÿ­5ÿ·5ÿÁ5$ÿ­5&ÿš57ÿk59ÿ5:ÿ­5<ÿ}5DÿÓ5Hÿ¤5Rÿ¤5Xÿ¤5\ÿ5bÿ­5dÿš5iÿÓ5jÿÓ5kÿÓ5lÿÓ5mÿÓ5nÿÓ5pÿ¤5qÿ¤5rÿ¤5sÿ¤5yÿ¤5zÿ¤5{ÿ¤5|ÿ¤5}ÿ¤5~ÿ¤5ÿ¤5€ÿ¤5ÿ¤5©ÿ5ªÿÜ5­ÿ­5®ÿ­5´ÿk5µÿ}5ºÿ5»ÿ}5ÅÿÜ5Çÿ­5Éÿ­5êÿ}5ëÿ5ûÿš5ýÿš6$&6&6*6264666b&6d6g6­&6®&6¯6Ç&6É&6Ð6Ñ6Ò6ã6ö6ù6û6ý7ÿD7ÿ 7ÿ7$ÿa7&ÿˆ77ÿÜ7Dþ­7Fþ¤7Hþ¤7LÿÁ7Rþ¤7UþÓ7Vþ­7XþÉ7Zþ­7\þÁ7bÿa7dÿˆ7iþ­7jþ­7kþ­7lþ­7mþ­7nþ­7oþ¤7pþ¤7qþ¤7rþ¤7sþ¤7yþ¤7zþ¤7{þ¤7|þ¤7}þ¤7~þÉ7þÉ7€þÉ7þÉ7©ÿD7ªÿ7­ÿa7®ÿa7´7µÿÓ7ºþÁ7Åþø7Çÿa7Éÿa7äþ­7ëþÁ7úþ­7ûÿˆ7üþ¤7ýÿˆ7þþ¤8$8-8=ÿÜ8b8­8®8Ç8É8åÿÜ9ÿˆ9þø9ÿY9$ÿ}92ÿÜ9Dÿa9Hÿa9LÿÓ9Rÿa9Xÿu9\ÿÉ9bÿ}9gÿÜ9iÿa9jÿa9kÿa9lÿa9mÿa9nÿa9pÿa9qÿa9rÿa9sÿa9yÿa9zÿa9{ÿa9|ÿa9}ÿa9~ÿu9ÿu9€ÿu9ÿu9©ÿN9ªÿ9­ÿ}9®ÿ}9¯ÿÜ9´9µ9ºÿÉ9Åþæ9Çÿ}9Éÿ}9ÐÿÜ9ÑÿÜ9ÒÿÜ9ëÿÉ:ÿ­:ÿ:ÿˆ:$ÿ:Dÿ}:Hÿˆ:LÿÓ:Rÿˆ:Uÿ¤:Xÿ·:\ÿÜ:bÿ:iÿ}:jÿ}:kÿ}:lÿ}:mÿ}:nÿ}:pÿˆ:qÿˆ:rÿˆ:sÿˆ:yÿˆ:zÿˆ:{ÿˆ:|ÿˆ:}ÿˆ:~ÿ·:ÿ·:€ÿ·:ÿ·:©ÿ:ªÿÜ:­ÿ:®ÿ:´ÿÜ:µ:ºÿÜ:Åþø:Çÿ:Éÿ:ëÿÜ;ÿš;$;&ÿk;2ÿ};7ÿÜ;Hÿ¤;b;dÿk;gÿ};pÿ¤;qÿ¤;rÿ¤;sÿ¤;©ÿ;ª;­;®;¯ÿ};´ÿa;µÿ­;ÅÿÓ;Ç;É;Ðÿ};Ñÿ};Òÿ};ûÿk;ýÿk<ÿ <þa<þð<$ÿa<&ÿ<2ÿ<Dþæ<Hþð<Lÿ·<Rþð<Xÿ<bÿa<dÿ<gÿ<iþæ<jþæ<kþæ<lþæ<mþæ<nþæ<pþð<qþð<rþð<sþð<yþð<zþð<{þð<|þð<}þð<~ÿ<ÿ<€ÿ<ÿ<©ÿ<ªÿk<­ÿa<®ÿa<¯ÿ<´ÿ<µÿÜ<Åþø<Çÿa<Éÿa<Ðÿ<Ñÿ<Òÿ<ûÿ<ýÿ=ÿÜ=©=ª=´ÿÜ=µÿÜ=ÅÿÜH[ÿÜIÿIÿkIÿ·IWÿÜIZÿÜI\ÿÜI©ÿ·IªÿÜI´AIµIºÿÜIÅÿIëÿÜNDÿÜNHÿ·NRÿ·NXÿÁN\ÿ·NiÿÜNjÿÜNkÿÜNlÿÜNmÿÜNnÿÜNpÿ·Nqÿ·Nrÿ·Nsÿ·Nyÿ·Nzÿ·N{ÿ·N|ÿ·N}ÿ·N~ÿÁNÿÁN€ÿÁNÿÁNºÿ·Nëÿ·QQQQ©QªQ´ÿkQµÿQÅÿ¤R&RÿÜRR[ÿÁR©RªR´ÿkRµÿ·RÅÿ}Uÿ}UÿDUÿÜUFÿÓUGÿÜUHÿÓUIUJÿÜUKÿÜUPÿÜUQÿÜURÿÓUTÿÜUUÿÜUXUYUZU[ÿÉU\U]UoÿÓUpÿÓUqÿÓUrÿÓUsÿÓUxÿÜUyÿÓUzÿÓU{ÿÓU|ÿÓU}ÿÓU~UU€UU©ÿ·UªU´UµVUºUÅþÉUæUëU÷ÿÜUüÿÓUþÿÓYÿÉYÿaYÿY©ÿÜYªÿÜY´YµÿÜYÅþðZZÿDZÿZ©ÿÜZªÿÜZ´ZµZÅÿ)[FÿÜ[HÿÁ[RÿÁ[oÿÜ[pÿÁ[qÿÁ[rÿÁ[sÿÁ[yÿÁ[zÿÁ[{ÿÁ[|ÿÁ[}ÿÁ[üÿÜ[þÿÜ\ÿÜ\þÜ\ÿk\©ÿÜ\ªÿÜ\´\µ\ÅþÓbÿÓbÿÜbÿÜb$9b&ÿÜb*ÿÜb2ÿÜb4ÿÜb6b7ÿab8b9ÿ}b:ÿb;b<ÿabFÿÜbGÿÜbHÿÜbIÿ·bRÿÜbTÿÜbWÿÜbXbYÿˆbZÿ­b\ÿubb9bdÿÜbgÿÜbhboÿÜbpÿÜbqÿÜbrÿÜbsÿÜbyÿÜbzÿÜb{ÿÜb|ÿÜb}ÿÜb~bb€bb©ÿ·bªb­9b®9b¯ÿÜb´þøbµÿbºÿub»ÿabÅ/bÇ9bÉ9bÐÿÜbÑÿÜbÒÿÜbÓbÔbÕbãbêÿabëÿuböÿÜbùbûÿÜbüÿÜbýÿÜbþÿÜdd$d6d<ÿÜdbd©ÿÜdªÿÜd­d®d´dµ&d»ÿÜdÅdÇdÉdãdêÿÜdùg9gÿ­gÿÜg$ÿÜg9ÿÜg;ÿ}g<ÿgbÿÜg©ÿÜgªg­ÿÜg®ÿÜg´ÿÓgµÿÜg»ÿgÅÿDgÇÿÜgÉÿÜgêÿh$h-h=ÿÜhbh­h®hÇhÉhåÿÜp[ÿÜq[ÿÜr[ÿÜs[ÿÜxxxx©xªx´ÿkxµÿxÅÿ¤y&yÿÜyy[ÿÁy©yªy´ÿkyµÿ·yÅÿ}z&zÿÜzz[ÿÁz©zªz´ÿkzµÿ·zÅÿ}{&{ÿÜ{{[ÿÁ{©{ª{´ÿk{µÿ·{Åÿ}|&|ÿÜ||[ÿÁ|©|ª|´ÿk|µÿ·|Åÿ}}&}ÿÜ}}[ÿÁ}©}ª}´ÿk}µÿ·}Åÿ}‰&‰©‰ª‰´ÿ‰µÿ‰Åÿ­©ª´ÿ­µÿ¤Åÿ©$©%ÿÜ©&ÿÜ©'ÿÜ©)©*ÿÜ©+©-ÿÜ©.©/©2©3©4©5©7ÿ©9ÿ©:ÿÜ©;©<ÿk©=©I©Q©R©U©YÿÜ©ZÿÜ©\ÿÜ©b©dÿÜ©g©x©y©z©{©|©}©‰©—©­©®©¯©ºÿÜ©»ÿk©Ç©É©Ð©Ñ©Ò©å©é©êÿk©ëÿÜ©ì©öÿÜ©ûÿÜ©ýÿܪ$ÿ·ª%ÿ·ª&ÿܪ'ÿܪ)ª*ª+ª-ÿܪ.ª/ª2ÿܪ3ª4ª5ª7ÿDª9ÿNª:ÿª;ÿª<ÿª=ªIªQªRªUªYÿܪZÿܪ\ÿܪbÿ·ªdÿܪgÿܪxªyªzª{ª|ª}ª‰ªª­ÿ·ª®ÿ·ª¯ÿܪºÿܪ»ÿªÇÿ·ªÉÿ·ªÐÿܪÑÿܪÒÿܪåªéªêÿªëÿܪìªöªûÿܪýÿÜ­ÿÓ­ÿÜ­ÿÜ­$9­&ÿÜ­*ÿÜ­2ÿÜ­4ÿÜ­6­7ÿa­8­9ÿ}­:ÿ­;­<ÿa­FÿÜ­GÿÜ­HÿÜ­Iÿ·­RÿÜ­TÿÜ­WÿÜ­X­Yÿˆ­Zÿ­­\ÿu­b9­dÿÜ­gÿÜ­h­oÿÜ­pÿÜ­qÿÜ­rÿÜ­sÿÜ­yÿÜ­zÿÜ­{ÿÜ­|ÿÜ­}ÿÜ­~­­€­­©ÿ·­ª­­9­®9­¯ÿÜ­´þø­µÿ­ºÿu­»ÿa­Å/­Ç9­É9­ÐÿÜ­ÑÿÜ­ÒÿÜ­Ó­Ô­Õ­ã­êÿa­ëÿu­öÿÜ­ù­ûÿÜ­üÿÜ­ýÿÜ­þÿÜ®ÿÓ®ÿÜ®ÿÜ®$9®&ÿÜ®*ÿÜ®2ÿÜ®4ÿÜ®6®7ÿa®8®9ÿ}®:ÿ®;®<ÿa®FÿÜ®GÿÜ®HÿÜ®Iÿ·®RÿÜ®TÿÜ®WÿÜ®X®Yÿˆ®Zÿ­®\ÿu®b9®dÿÜ®gÿÜ®h®oÿÜ®pÿÜ®qÿÜ®rÿÜ®sÿÜ®yÿÜ®zÿÜ®{ÿÜ®|ÿÜ®}ÿÜ®~®®€®®©ÿ·®ª®­9®®9®¯ÿÜ®´þø®µÿ®ºÿu®»ÿa®Å/®Ç9®É9®ÐÿÜ®ÑÿÜ®ÒÿܮӮԮծã®êÿa®ëÿu®öÿÜ®ù®ûÿÜ®üÿÜ®ýÿÜ®þÿܯ9¯ÿ­¯ÿܯ$ÿܯ9ÿܯ;ÿ}¯<ÿ¯bÿܯ©ÿܯª¯­ÿܯ®ÿܯ´ÿÓ¯µÿܯ»ÿ¯ÅÿD¯ÇÿܯÉÿܯêÿ´$þø´%ÿÁ´&ÿ·´'ÿÁ´)ÿÁ´*ÿ·´+ÿÁ´-ÿÁ´.ÿÁ´/ÿÁ´2ÿ·´3ÿÁ´4ÿ·´5ÿÁ´7´9´:´;ÿˆ´<´=ÿÜ´Iÿ·´Qÿ´Rÿk´Uÿ´Yÿ·´Zÿ·´\ÿ·´bþø´dÿ·´gÿ·´xÿ´yÿk´zÿk´{ÿk´|ÿk´}ÿk´‰ÿÁ´þ}´­þø´®þø´¯ÿ·´ºÿ·´»´Çþø´Éþø´Ðÿ·´Ñÿ·´Òÿ·´åÿÜ´éÿ·´ê´ëÿ·´ìÿÁ´öÿ·´ûÿ·´ýÿ·ºÿܺþܺÿkº©ÿܺªÿܺ´ºµºÅþÓ»ÿ »þa»þð»$ÿa»&ÿ»2ÿ»Dþæ»Hþð»Lÿ·»Rþð»Xÿ»bÿa»dÿ»gÿ»iþæ»jþæ»kþæ»lþæ»mþæ»nþæ»pþð»qþð»rþð»sþð»yþð»zþð»{þð»|þð»}þð»~ÿ»ÿ»€ÿ»ÿ»©ÿ»ªÿk»­ÿa»®ÿa»¯ÿ»´ÿ»µÿÜ»Åþø»Çÿa»Éÿa»Ðÿ»Ñÿ»Òÿ»ûÿ»ýÿÅ$&Å%ÿ·Å&ÿÅ'ÿ·Å)ÿ·Å*ÿ·Å+ÿ·Å-/Å.ÿ·Å/ÿ·Å2ÿÅ3ÿ·Å4ÿÅ5ÿ·Å7þæÅ9þˆÅ:ÿÅ;ÿ·Å<þˆÅ=ÅIÿÜÅQÿ·ÅRÿ·ÅUÿ·ÅYÿÅZÿ<Å\ÿÅb&ÅdÿÅgÿÅxÿ·Åyÿ·Åzÿ·Å{ÿ·Å|ÿ·Å}ÿ·Å‰ÿ·Å&Å­&Å®&ůÿźÿÅ»þˆÅÇ&ÅÉ&ÅÐÿÅÑÿÅÒÿÅåÅéÿ·ÅêþˆÅëÿÅìÿ·Åöÿ·ÅûÿÅýÿÇÿÓÇÿÜÇÿÜÇ$9Ç&ÿÜÇ*ÿÜÇ2ÿÜÇ4ÿÜÇ6Ç7ÿaÇ8Ç9ÿ}Ç:ÿÇ;Ç<ÿaÇFÿÜÇGÿÜÇHÿÜÇIÿ·ÇRÿÜÇTÿÜÇWÿÜÇXÇYÿˆÇZÿ­Ç\ÿuÇb9ÇdÿÜÇgÿÜÇhÇoÿÜÇpÿÜÇqÿÜÇrÿÜÇsÿÜÇyÿÜÇzÿÜÇ{ÿÜÇ|ÿÜÇ}ÿÜÇ~ÇÇ€ÇÇ©ÿ·ÇªÇ­9Ç®9ǯÿÜÇ´þøÇµÿǺÿuÇ»ÿaÇÅ/ÇÇ9ÇÉ9ÇÐÿÜÇÑÿÜÇÒÿÜÇÓÇÔÇÕÇãÇêÿaÇëÿuÇöÿÜÇùÇûÿÜÇüÿÜÇýÿÜÇþÿÜÉÿÓÉÿÜÉÿÜÉ$9É&ÿÜÉ*ÿÜÉ2ÿÜÉ4ÿÜÉ6É7ÿaÉ8É9ÿ}É:ÿÉ;É<ÿaÉFÿÜÉGÿÜÉHÿÜÉIÿ·ÉRÿÜÉTÿÜÉWÿÜÉXÉYÿˆÉZÿ­É\ÿuÉb9ÉdÿÜÉgÿÜÉhÉoÿÜÉpÿÜÉqÿÜÉrÿÜÉsÿÜÉyÿÜÉzÿÜÉ{ÿÜÉ|ÿÜÉ}ÿÜÉ~ÉÉ€ÉÉ©ÿ·ÉªÉ­9É®9ɯÿÜÉ´þøÉµÿɺÿuÉ»ÿaÉÅ/ÉÇ9ÉÉ9ÉÐÿÜÉÑÿÜÉÒÿÜÉÓÉÔÉÕÉãÉêÿaÉëÿuÉöÿÜÉùÉûÿÜÉüÿÜÉýÿÜÉþÿÜÐ9Ðÿ­ÐÿÜÐ$ÿÜÐ9ÿÜÐ;ÿ}Ð<ÿÐbÿÜЩÿÜЪЭÿÜЮÿÜдÿÓеÿÜлÿÐÅÿDÐÇÿÜÐÉÿÜÐêÿÑ9Ñÿ­ÑÿÜÑ$ÿÜÑ9ÿÜÑ;ÿ}Ñ<ÿÑbÿÜÑ©ÿÜѪѭÿÜÑ®ÿÜÑ´ÿÓѵÿÜÑ»ÿÑÅÿDÑÇÿÜÑÉÿÜÑêÿÒ9Òÿ­ÒÿÜÒ$ÿÜÒ9ÿÜÒ;ÿ}Ò<ÿÒbÿÜÒ©ÿÜÒªÒ­ÿÜÒ®ÿÜÒ´ÿÓÒµÿÜÒ»ÿÒÅÿDÒÇÿÜÒÉÿÜÒêÿÓ$Ó-Ó=ÿÜÓbÓ­Ó®ÓÇÓÉÓåÿÜÔ$Ô-Ô=ÿÜÔbÔ­Ô®ÔÇÔÉÔåÿÜÕ$Õ-Õ=ÿÜÕbÕ­Õ®ÕÇÕÉÕåÿÜã$&ã&ã*ã2ã4ã6ãb&ãdãgã­&ã®&ã¯ãÇ&ãÉ&ãÐãÑãÒãããöãùãûãýåÿÜå©åªå´ÿÜåµÿÜåÅÿÜéé©éªé´ÿ¤éµÿéÅÿ·êÿ êþaêþðê$ÿaê&ÿê2ÿêDþæêHþðêLÿ·êRþðêXÿêbÿaêdÿêgÿêiþæêjþæêkþæêlþæêmþæênþæêpþðêqþðêrþðêsþðêyþðêzþðê{þðê|þðê}þðê~ÿêÿê€ÿêÿê©ÿêªÿkê­ÿaê®ÿaê¯ÿê´ÿêµÿÜêÅþøêÇÿaêÉÿaêÐÿêÑÿêÒÿêûÿêýÿëÿÜëþÜëÿkë©ÿÜëªÿÜë´ëµëÅþÓììÿkìÿ·ì©ìªì´ÿÜìµìÅÿDöö$ö7ÿ·ö:ö<ÿšöbö©ÿÜöªÿÜö­ö®ö´ÿÓöµÿÓö»ÿšöÅÿÉöÇöÉöêÿšù$&ù&ù*ù2ù4ù6ùb&ùdùgù­&ù®&ù¯ùÇ&ùÉ&ùÐùÑùÒùãùöùùùûùýûû$û6û<ÿÜûbû©ÿÜûªÿÜû­û®û´ûµ&û»ÿÜûÅûÇûÉûãûêÿÜûùýý$ý6ý<ÿÜýbý©ÿÜýªÿÜý­ý®ý´ýµ&ý»ÿÜýÅýÇýÉýãýêÿÜýù MB@hmþ ¼þ‰þ‰ L GÌþBGÌSf €¯ JBits@ ûþšmãB±‹`#cÕVeraSansÿÿÿÿ6ÿÿþ628R00@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        "                      "       #                       #     $               $    &              &    ÿÿ P ì_<õº¹ð¸ºÂg‘þ‰þ Lmgmagick-2.0.6RC1/tests/hald_8.png0000644000175000017500000002462614011267775015206 0ustar vitovito‰PNG  IHDR+ŠŸîgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿÿÿÿ X÷Ü(­IDATxÚíÝKjÁ–@Ñäí‡`1G`ÜÓƒñ‡Õˆ½ÕxUPf¿“'”Ü|[k­µ®ýé¾ùOþâ?ýþÿýýyý«í/þ·¯ÿÐäóòövíú×ÿàþïõoþë_ÿúÙ¿ýû_k}û±ÍQêoÍRŠÒü[õ·êoµÿ¥k­^¨U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿t­õñ]ÿ#ÎÖ`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/]kÝOÿHÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_šï´‚ «þVÛÇjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ùÀÖÿŒ“Uߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úKó€VÔ`ÕßjûXÍ¿U«þVû_ê€kYõ·:¬æßª¿U«ý/õ+@\ Ȫ¿Õ`5ÿVý­ú[õ—ºàz¬ú[õ·z³š«þVý¥n¸«þVý­^¬æßª¿U©®Àª¿U«þV/`VóoÕ_ê;\€Õ²êoÕßjÿ[Í¿U©®ÀjYõ·êoµÿ­æßª¿4ߨúŸq²ê[õ·úÈjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥¾ÀUߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿Ui¾Ð ‚z¬ú[m«ù·êoÕßjÿKÝp- «þV€Õü[õ·êoµÿ¥~ˆkYõ·:¬æßª¿U«þR7\€U«þV/`VóoÕߪ¿Ô ×`Õߪ¿Õ €Õü[õ·ê/uÀõXõ·êoÕßêÌjþ­úK}€ë°Z@Vý­ú[í«ù·ê/uÀuX- «þVý­ö¿Õü[õ—æ;[ÿ3NV}«þVYÍ¿U«þVû_ê€kYõ·:¬æßª¿U«ý/õ+@\ Ȫ¿Õ`5ÿVý­ú[õ—ºàz¬ú[õ·z³š«þVý¥n¸«þVý­^¬æßª¿U©®Àª¿U«þV/`VóoÕ_ê;\€Õ²êoÕßjÿ[Í¿U©®ÀjYõ·êoµÿ­æßª¿Ôw¸ê[õ·úÈjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥¾ÀUߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/ÍwZAP€U«íc5ÿVý­ú[í©®dÕßê°š«þVý­ö¿Ô¯q- «þV€Õü[õ·êoÕ_ê€ë°êoÕßêÌjþ­ú[õ—ºàz¬ú[õ·z°š«þVý¥n¸«þVý­ú[½€YÍ¿U©ïpV Ȫ¿U«ýo5ÿVý¥n¸«dÕߪ¿Õþ·š«þÒµÖý¼¶þgœ¬Àª¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/]kÝOÿHÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_šï´‚ «þVÛÇjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ùÀÖÿŒ“Uߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_šï´‚ «þVÛÇjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ùÀÖÿŒ“Uߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úKó€VÔ`ÕßjûXÍ¿U«þVû_ê€kYõ·:¬æßª¿U«ý/õ+@\ Ȫ¿Õ`5ÿVý­ú[õ—ºàz¬ú[õ·z³š«þVý¥n¸«þVý­^¬æßª¿U©®Àª¿U«þV/`VóoÕ_ê;\€Õ²êoÕßjÿ[Í¿U©®ÀjYõ·êoµÿ­æßª¿4ߨúŸq²ê[õ·úÈjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥¾ÀUߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿UéZë~^­ ¨Àª¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/]kÝOÿHÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_ê;\õ­ú[ýd5ÿVý­ú[í©®dÕßê°š«þVý­ö¿Ô¯q- «þV€Õü[õ·êoÕ_ê€ë°êoÕßêÌjþ­ú[õ—ºàz¬ú[õ·z°š«þVý¥n¸«þVý­ú[½€YÍ¿U©ïpV Ȫ¿U«ýo5ÿVý¥n¸«dÕߪ¿Õþ·š«þÒ| õXõ·Ú>VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/Íw¶þgœ¬úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_šï´‚ «þVÛÇjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ùÀÖÿŒ“Uߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_šï´‚ «þVÛÇjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ùÀÖÿŒ“Uߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿UéZë~^[ÿ3NÖ`Õßê «ù·êoÕßjÿKÝp- «þV€Õü[õ·êoµÿ¥~ˆkYõ·:¬æßª¿U«þR7\€U«þV/`VóoÕߪ¿Ô ×`Õߪ¿Õ €Õü[õ·ê/uÀõXõ·êoÕßêÌjþ­úK}€ë°Z@Vý­ú[í«ù·ê/uÀuX- «þVý­ö¿Õü[õ—®µî§$õXõ·Ú>VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/Íw¶þgœ¬úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úK}€«¾U«?€¬æßª¿U«ý/uÀµ€¬ú[VóoÕߪ¿Õþ—ú ®dÕßê°š«þVý­úKÝp=Vý­ú[½€YÍ¿U«þR7\€U«þV/VóoÕߪ¿Ô ×`Õߪ¿U«0«ù·ê/õ®ÀjYõ·êoµÿ­æßª¿Ô ×`µ€¬ú[õ·ÚÿVóoÕ_šï´‚ «þVÛÇjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ùÀÖÿŒ“Uߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿U©ïpÕ·êoõÕü[õ·êoµÿ¥n¸U«Àjþ­ú[õ·ÚÿR¿ĵ€¬ú[VóoÕߪ¿U©®Àª¿U«0«ù·êoÕ_ê€ë°êoÕßêÀjþ­ú[õ—ºàz¬ú[õ·êoõf5ÿVý¥¾ÀuX- «þVý­ö¿Õü[õ—ºà:¬U«þVûßjþ­úKó€VÔ`ÕßjûXÍ¿U«þVû_ê€kYõ·:¬æßª¿U«ý/õ+@\ Ȫ¿Õ`5ÿVý­ú[õ—ºàz¬ú[õ·z³š«þVý¥n¸«þVý­^¬æßª¿U©®Àª¿U«þV/`VóoÕ_ê;\€Õ²êoÕßjÿ[Í¿U©®ÀjYõ·êoµÿ­æßª¿4ߨúŸq²ê[õ·úÈjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥¾ÀUߪ¿Õ@VóoÕߪ¿Õþ—ºàZ@Vý­«ù·êoÕßjÿKý ײêouXÍ¿U«þVý¥n¸«þVý­^À¬æßª¿U©®Àª¿U««ù·êoÕ_ê€ë°êoÕߪ¿Õ ˜Õü[õ—ú×`µ€¬ú[õ·ÚÿVóoÕ_ê€ë°Z@Vý­ú[í«ù·ê/õ®úVý­þ²š«þVý­ö¿Ô ײêouXÍ¿U«þVû_êW€¸U«Àjþ­ú[õ·ê/uÀõXõ·êoõf5ÿVý­úKÝp=Vý­ú[½XÍ¿U«þR7\€U«þVý­^À¬æßª¿Ôw¸«dÕߪ¿Õþ·š«þR7\€Õ²êoÕßjÿ[Í¿Ui¾Ð ‚z¬ú[m«ù·êoÕßjÿKÝp- «þV€Õü[õ·êoµÿ¥~ˆkYõ·:¬æßª¿U«þR7\€U«þV/`VóoÕߪ¿Ô ×`Õߪ¿Õ €Õü[õ·ê/uÀõXõ·êoÕßêÌjþ­úK}€ë°Z@Vý­ú[í«ù·ê/uÀuX- «þVý­ö¿Õü[õ—æ;[ÿ3NV}«þVYÍ¿U«þVû_ê€kYõ·:¬æßª¿U«ý/õ+@\ Ȫ¿Õ`5ÿVý­ú[õ—ºàz¬ú[õ·z³š«þVý¥n¸«þVý­^¬æßª¿U©®Àª¿U«þV/`VóoÕ_ê;\€Õ²êoÕßjÿ[Í¿U©®ÀjYõ·êoµÿ­æßª¿Ôw¸ê[õ·úÈjþ­ú[õ·ÚÿR7\ Ȫ¿Õ`5ÿVý­ú[í©_âZ@Vý­«ù·êoÕߪ¿Ô ×`Õߪ¿Õ ˜Õü[õ·ê/uÀõXõ·êoõ`5ÿVý­úKÝp=Vý­ú[õ·z³š«þRßà:¬U«þVûßjþ­úKÝpV Ȫ¿U«ýo5ÿVý¥ŸÚ܈VCñ %tEXtdate:create2014-05-31T13:00:02+00:00Rúñ%tEXtdate:modify2014-05-31T13:00:02+00:00#§¯MIEND®B`‚gmagick-2.0.6RC1/config.m40000644000175000017500000000441414011267775013677 0ustar vitovitoPHP_ARG_WITH(gmagick, whether to enable the gmagick extension, [ --with-gmagick[=DIR] Enables the gmagick extension. DIR is the prefix to GraphicsMagick installation directory.], no) if test $PHP_GMAGICK != "no"; then AC_MSG_CHECKING(GraphicsMagick configuration program) for i in $PHP_GMAGICK /usr/local /usr; do test -r $i/bin/GraphicsMagick-config && WAND_BINARY=$i/bin/GraphicsMagick-config && break done if test -z "$WAND_BINARY"; then AC_MSG_ERROR(not found. Please provide a path to GraphicsMagick-config program.) fi AC_MSG_RESULT(found in $WAND_BINARY) AC_MSG_CHECKING(GraphicsMagick version) WAND_DIR=`$WAND_BINARY --prefix` GRAPHICSMAGICK_VERSION_ORIG=`$WAND_BINARY --version` GRAPHICSMAGICK_VERSION_MASK=`echo ${GRAPHICSMAGICK_VERSION_ORIG} | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` if test "$GRAPHICSMAGICK_VERSION_MASK" -ge 1001000; then AC_MSG_RESULT(found version $GRAPHICSMAGICK_VERSION_ORIG) else AC_MSG_ERROR(no. You need at least GraphicsMagick version 1.1.0 to use Gmagick.) fi AC_MSG_CHECKING(GraphicsMagick version mask) AC_MSG_RESULT(found version $GRAPHICSMAGICK_VERSION_MASK) AC_MSG_CHECKING(omp_pause_resource_all usability) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]],[[ omp_pause_resource_all(omp_pause_hard); ]])],[ AC_MSG_RESULT(yes) PHP_CHECK_FUNC(omp_pause_resource_all, gomp) PHP_ADD_LIBRARY(gomp,, GMAGICK_SHARED_LIBADD) ],[ AC_MSG_RESULT(no) ]) LIB_DIR=$WAND_DIR/lib # If "$LIB_DIR" == "/usr/lib" or possible /usr/$PHP_LIBDIR" then you're probably # going to have a bad time. PHP m4 files seem to be hard-coded to not link properly against # those directories. See PHP_ADD_LIBPATH for the weirdness. PHP_ADD_LIBRARY_WITH_PATH(GraphicsMagick, $LIB_DIR, GMAGICK_SHARED_LIBADD) PHP_ADD_LIBRARY_WITH_PATH(GraphicsMagickWand, $LIB_DIR, GMAGICK_SHARED_LIBADD) PHP_ADD_INCLUDE($WAND_DIR/include/GraphicsMagick) PHP_NEW_EXTENSION(gmagick, gmagick_helpers.c gmagick_methods.c gmagick.c gmagickdraw_methods.c gmagickpixel_methods.c, $ext_shared) PHP_SUBST(GMAGICK_SHARED_LIBADD) AC_DEFINE(HAVE_GMAGICK,1,[ ]) AC_DEFINE_UNQUOTED(GMAGICK_LIB_MASK,$GRAPHICSMAGICK_VERSION_MASK,[Version mask for comparisons]) fi gmagick-2.0.6RC1/config.w320000644000175000017500000000145614011267775013775 0ustar vitovitoARG_WITH("gmagick", "GraphicsMagick support", "no"); if (PHP_GMAGICK != "no") { if (CHECK_HEADER_ADD_INCLUDE("wand/wand_api.h", "CFLAGS_GMAGICK", PHP_PHP_BUILD + "\\include\\graphicsmagick;" + PHP_GMAGICK) && CHECK_LIB("CORE_RL_wand_.lib", "gmagick", PHP_PHP_BUILD + "\\lib\\graphicsmagick;" + PHP_GMAGICK) && CHECK_LIB("CORE_RL_magick_.lib", "gmagick", PHP_PHP_BUILD + "\\lib\\graphicsmagick;" + PHP_GMAGICK) ) { ADD_FLAG("CFLAGS_GMAGICK", "/D NDEBUG /D _WINDOWS /D WIN32 /D _VISUALC_ /D NeedFunctionPrototypes /D _DLL /D _MAGICKMOD_ /D _WANDLIB_"); EXTENSION('gmagick', 'gmagick_helpers.c gmagick_methods.c gmagick.c gmagickdraw_methods.c gmagickpixel_methods.c'); AC_DEFINE('HAVE_GMAGICK', 1); } else { WARNING("gmagick not enabled; libraries and headers not found"); } } gmagick-2.0.6RC1/gmagick.c0000644000175000017500000002773714011267775013753 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #include "php_gmagick.h" #include "php_gmagick_macros.h" #include "php_gmagick_helpers.h" #include "gmagick_arginfo.h" ZEND_DECLARE_MODULE_GLOBALS(gmagick) /* handlers */ static zend_object_handlers gmagick_object_handlers; static zend_object_handlers gmagickdraw_object_handlers; static zend_object_handlers gmagickpixel_object_handlers; zend_class_entry *php_gmagick_sc_entry; zend_class_entry *php_gmagickdraw_sc_entry; zend_class_entry *php_gmagickpixel_sc_entry; zend_class_entry *php_gmagick_exception_class_entry; zend_class_entry *php_gmagickdraw_exception_class_entry; zend_class_entry *php_gmagickpixel_exception_class_entry; /* {{{ static void php_gmagick_object_free_storage(void *object TSRMLS_DC) */ static void php_gmagick_object_free_storage(zend_object *object TSRMLS_DC) { php_gmagick_object *intern = GMAGICK_FETCH_OBJECT(object); if (!intern) { return; } if (intern->magick_wand) { DestroyMagickWand(intern->magick_wand); } zend_object_std_dtor(&intern->zo TSRMLS_CC); } /* }}} */ /* {{{ static zend_object *php_gmagick_object_new_ex(zend_class_entry *class_type, zend_bool init_wand) */ static zend_object *php_gmagick_object_new_ex(zend_class_entry *class_type, zend_bool init_wand) { /* Allocate memory for it */ php_gmagick_object *intern = ecalloc(1, sizeof(php_gmagick_object) + zend_object_properties_size(class_type)); /* Set the magickwand */ if (init_wand) { intern->magick_wand = NewMagickWand(); } else { intern->magick_wand = NULL; } zend_object_std_init(&(intern->zo), class_type); object_properties_init(&intern->zo, class_type); intern->zo.handlers = &gmagick_object_handlers; return &intern->zo; } /* }}} */ /* {{{ static zend_object *php_gmagick_object_new(zend_class_entry *class_type) */ static zend_object *php_gmagick_object_new(zend_class_entry *class_type) { return php_gmagick_object_new_ex(class_type, 1); } /* }}} */ /* {{{ static zend_object *php_gmagick_clone_gmagick_object(zval *this_ptr TSRMLS_DC) */ #if PHP_MAJOR_VERSION < 8 static zend_object *php_gmagick_clone_gmagick_object(zval *this_ptr TSRMLS_DC) { php_gmagick_object *old_obj = Z_GMAGICK_OBJ_P(this_ptr); php_gmagick_object *new_obj = GMAGICK_FETCH_OBJECT(php_gmagick_object_new_ex(old_obj->zo.ce, 0)); zend_objects_clone_members(&new_obj->zo, &old_obj->zo); if (new_obj->magick_wand) { DestroyMagickWand(new_obj->magick_wand); } new_obj->magick_wand = CloneMagickWand(old_obj->magick_wand); return &new_obj->zo; } #else static zend_object *php_gmagick_clone_gmagick_object(zend_object *this_ptr) { php_gmagick_object *old_obj = GMAGICK_FETCH_OBJECT(this_ptr); php_gmagick_object *new_obj = GMAGICK_FETCH_OBJECT(php_gmagick_object_new_ex(this_ptr->ce, 0)); zend_objects_clone_members(&new_obj->zo, &old_obj->zo); if (new_obj->magick_wand) { DestroyMagickWand(new_obj->magick_wand); } new_obj->magick_wand = CloneMagickWand(old_obj->magick_wand); return &new_obj->zo; } #endif /* }}} */ /* {{{ static void php_gmagickdraw_object_free_storage(zend_object *object) */ static void php_gmagickdraw_object_free_storage(zend_object *object) { php_gmagickdraw_object *intern = GMAGICKDRAW_FETCH_OBJECT(object); if (!intern) { return; } if (intern->drawing_wand) { DestroyDrawingWand(intern->drawing_wand); } zend_object_std_dtor(&intern->zo); } /* }}} */ /* {{{ static zend_object *php_gmagickdraw_object_new_ex(zend_class_entry *class_type, zend_bool init_wand) */ static zend_object *php_gmagickdraw_object_new_ex(zend_class_entry *class_type, zend_bool init_wand) { /* Allocate memory for it */ php_gmagickdraw_object *intern = ecalloc(1, sizeof(php_gmagickdraw_object) + zend_object_properties_size(class_type)); /* Set the DrawingWand */ if (init_wand) { intern->drawing_wand = NewDrawingWand(); } else { intern->drawing_wand = NULL; } zend_object_std_init(&intern->zo, class_type); object_properties_init(&intern->zo, class_type ); intern->zo.handlers = &gmagickdraw_object_handlers; return &intern->zo; } /* }}} */ /* {{{ static zend_object *php_gmagickdraw_object_new(zend_class_entry *class_type) */ static zend_object *php_gmagickdraw_object_new(zend_class_entry *class_type) { return php_gmagickdraw_object_new_ex(class_type, 1); } /* }}} */ /* {{{ static void php_gmagickpixel_object_free_storage(zend_object *object TSRMLS_DC) */ static void php_gmagickpixel_object_free_storage(zend_object *object) { php_gmagickpixel_object *intern = GMAGICKPIXEL_FETCH_OBJECT(object); if (!intern) { return; } if(intern->pixel_wand) { DestroyPixelWand(intern->pixel_wand); } zend_object_std_dtor(&intern->zo); } /* }}} */ /* {{{ static zend_object *php_gmagickpixel_object_new_ex(zend_class_entry *class_type, zend_bool init_wand) */ static zend_object *php_gmagickpixel_object_new_ex(zend_class_entry *class_type, zend_bool init_wand) { /* Allocate memory for it */ php_gmagickpixel_object *intern = ecalloc(1, sizeof(php_gmagickpixel_object) + zend_object_properties_size(class_type)); /* Set the pixelwand if requested */ if (init_wand) { intern->pixel_wand = (PixelWand *)NewPixelWand(); } else { intern->pixel_wand = NULL; } /* ALLOC_HASHTABLE(intern->zo.properties); */ zend_object_std_init(&intern->zo, class_type TSRMLS_CC); object_properties_init(&intern->zo, class_type ); intern->zo.handlers = &gmagickpixel_object_handlers; return &intern->zo; } /* }}} */ /* {{{ static zend_object *php_gmagickpixel_object_new(zend_class_entry *class_type) */ static zend_object *php_gmagickpixel_object_new(zend_class_entry *class_type TSRMLS_DC) { return php_gmagickpixel_object_new_ex(class_type, 1); } /* }}} */ /* {{{ static zend_object *php_gmagick_clone_gmagickpixel_object(zval *this_ptr) */ #if PHP_MAJOR_VERSION < 8 static zend_object *php_gmagick_clone_gmagickpixel_object(zval *this_ptr) { php_gmagickpixel_object *old_obj = Z_GMAGICKPIXEL_OBJ_P(this_ptr); php_gmagickpixel_object *new_obj = GMAGICKPIXEL_FETCH_OBJECT(php_gmagickpixel_object_new_ex(old_obj->zo.ce, 0)); zend_objects_clone_members(&new_obj->zo, &old_obj->zo); GMAGICK_CLONE_PIXELWAND(old_obj->pixel_wand, new_obj->pixel_wand); return &new_obj->zo; } #else static zend_object *php_gmagick_clone_gmagickpixel_object(zend_object *this_ptr) { php_gmagickpixel_object *old_obj = GMAGICKPIXEL_FETCH_OBJECT(this_ptr); php_gmagickpixel_object *new_obj = GMAGICKPIXEL_FETCH_OBJECT(php_gmagickpixel_object_new_ex(old_obj->zo.ce, 0)); zend_objects_clone_members(&new_obj->zo, &old_obj->zo); GMAGICK_CLONE_PIXELWAND(old_obj->pixel_wand, new_obj->pixel_wand); return &new_obj->zo; } #endif /* }}} */ PHP_INI_BEGIN() STD_PHP_INI_ENTRY("gmagick.shutdown_sleep_count", "10", PHP_INI_ALL, OnUpdateLong, shutdown_sleep_count, zend_gmagick_globals, gmagick_globals) PHP_INI_END() static void php_gmagick_init_globals(zend_gmagick_globals *gmagick_globals) { // 10 is magick number, that seems to be enough. gmagick_globals->shutdown_sleep_count = 10; } /* {{{ PHP_MINIT_FUNCTION(gmagick) */ PHP_MINIT_FUNCTION(gmagick) { char *cwd; size_t cwd_len; zend_class_entry ce; ZEND_INIT_MODULE_GLOBALS(gmagick, php_gmagick_init_globals, NULL); /* Exception */ INIT_CLASS_ENTRY(ce, "GmagickException", NULL); php_gmagick_exception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default()); php_gmagick_exception_class_entry->ce_flags |= ZEND_ACC_FINAL; INIT_CLASS_ENTRY(ce, "GmagickPixelException", NULL); php_gmagickpixel_exception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default()); php_gmagickpixel_exception_class_entry->ce_flags |= ZEND_ACC_FINAL; /* Class entry */ INIT_CLASS_ENTRY(ce, "Gmagick", class_Gmagick_methods); php_gmagick_sc_entry = zend_register_internal_class(&ce); php_gmagick_sc_entry->create_object = php_gmagick_object_new; memcpy(&gmagick_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); gmagick_object_handlers.offset = XtOffsetOf(php_gmagick_object, zo); gmagick_object_handlers.free_obj = php_gmagick_object_free_storage; gmagick_object_handlers.clone_obj = php_gmagick_clone_gmagick_object; INIT_CLASS_ENTRY(ce, "GmagickDraw", class_GmagickDraw_methods); php_gmagickdraw_sc_entry = zend_register_internal_class(&ce); php_gmagickdraw_sc_entry->create_object = php_gmagickdraw_object_new; memcpy(&gmagickdraw_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); gmagickdraw_object_handlers.offset = XtOffsetOf(php_gmagickdraw_object, zo); gmagickdraw_object_handlers.free_obj = php_gmagickdraw_object_free_storage; gmagickdraw_object_handlers.clone_obj = NULL; INIT_CLASS_ENTRY(ce, "GmagickPixel", class_GmagickPixel_methods); php_gmagickpixel_sc_entry = zend_register_internal_class(&ce); php_gmagickpixel_sc_entry->create_object = php_gmagickpixel_object_new; memcpy(&gmagickpixel_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); gmagickpixel_object_handlers.offset = XtOffsetOf(php_gmagickpixel_object, zo); gmagickpixel_object_handlers.free_obj = php_gmagickpixel_object_free_storage; gmagickpixel_object_handlers.clone_obj = php_gmagick_clone_gmagickpixel_object; /* Initialize GraphicsMagick environment */ cwd = virtual_getcwd_ex(&cwd_len); if (!cwd) return FAILURE; InitializeMagick(cwd); efree(cwd); /* init constants */ php_gmagick_initialize_constants(); REGISTER_INI_ENTRIES(); return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION(gmagick) */ PHP_MSHUTDOWN_FUNCTION(gmagick) { #ifndef HAVE_OMP_PAUSE_RESOURCE_ALL int i; #endif DestroyMagick(); #if HAVE_OMP_PAUSE_RESOURCE_ALL // Note there is a patch to add omp_pause_resource_all to DestroyMagick() // https://sourceforge.net/p/graphicsmagick/patches/63/ // But it hasn't been accepted omp_pause_resource_all(omp_pause_hard); #else for (i = 0; i < 100 && i < GMAGICK_G(shutdown_sleep_count); i += 1) { usleep(1000); } #endif return SUCCESS; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION(gmagick) */ PHP_MINFO_FUNCTION(gmagick) { const char *version; unsigned long version_number; version = MagickGetVersion(&version_number); php_info_print_table_start(); php_info_print_table_header(2, "gmagick module", "enabled"); php_info_print_table_row(2, "gmagick version", PHP_GMAGICK_VERSION); php_info_print_table_row(2, "GraphicsMagick version", version); php_info_print_table_end(); DISPLAY_INI_ENTRIES(); } /* {{{ zend_module_entry gmagick_module_entry */ zend_module_entry gmagick_module_entry = { STANDARD_MODULE_HEADER, /* Standard module header */ "gmagick", /* Extension name */ NULL, /* Functions */ PHP_MINIT(gmagick), /* MINIT */ PHP_MSHUTDOWN(gmagick), /* MSHUTDOWN */ NULL, /* RINIT */ NULL, /* RSHUTDOWN */ PHP_MINFO(gmagick), /* MINFO */ PHP_GMAGICK_VERSION, /* Version */ STANDARD_MODULE_PROPERTIES /* Standard properties */ }; /* }}} */ /* {{{ ZEND_GET_MODULE(gmagick) */ #ifdef COMPILE_DL_GMAGICK ZEND_GET_MODULE(gmagick) #endif /* }}} */ gmagick-2.0.6RC1/gmagickdraw_methods.c0000644000175000017500000020462514011267775016345 0ustar vitovito/** +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #include "php_gmagick.h" #include "php_gmagick_macros.h" #include "php_gmagick_helpers.h" /* {{{ proto GmagickDraw GmagickDraw::setStrokeColor(GmagickPixel|string color) Sets the color used for stroking object outlines. */ PHP_METHOD(GmagickDraw, setstrokecolor) { zval *param; php_gmagickdraw_object *internd; php_gmagickpixel_object *internp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 2); if (internd->drawing_wand != NULL) { DrawSetStrokeColor(internd->drawing_wand, internp->pixel_wand); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeWidth(float stroke_width) Sets the width of the stroke used to draw object outlines. */ PHP_METHOD(GmagickDraw, setstrokewidth) { php_gmagickdraw_object *internd; double width; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &width) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); if (internd->drawing_wand != NULL) { DrawSetStrokeWidth(internd->drawing_wand, width); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::ellipse(float ox, float oy, float rx, float ry, float start, float end) Draws an ellipse on the image. */ PHP_METHOD(GmagickDraw, ellipse) { double ox, oy, rx, ry, start, end; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddddd", &ox, &oy, &rx, &ry, &start, &end) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawEllipse(internd->drawing_wand, ox, oy, rx, ry, start, end); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::annotate(float x, float y, string *text) Draws text on the image. */ PHP_METHOD(GmagickDraw, annotate) { php_gmagickdraw_object *internd; double x, y; unsigned char *text; size_t text_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dds", &x, &y, &text, &text_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawAnnotation(internd->drawing_wand, x, y, text); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool GmagickDraw::affine(array affine) Adjusts the current affine transformation matrix with the specified affine transformation matrix. Note that the current affine transform is adjusted rather than replaced. */ PHP_METHOD(GmagickDraw, affine) { php_gmagickdraw_object *internd; zval *affine_matrix, *current; HashTable *affine; char *matrix_elements[] = { "sx", "rx", "ry", "sy", "tx", "ty" }; int i = 0; double value; AffineMatrix *pmatrix; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &affine_matrix) == FAILURE) { return; } /* Allocate space to build matrix */ pmatrix = emalloc(sizeof(AffineMatrix)); affine = HASH_OF(affine_matrix); ZEND_HASH_FOREACH_VAL(affine, current) { if (i >= 6) { break; } else if (!current) { efree(pmatrix); GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "AffineMatrix should contain keys: sx, rx, ry, sy, tx and ty", 2); } else { value = zval_get_double(current); if (strcmp(matrix_elements[i], "sx") == 0) { pmatrix->sx = value; } else if (strcmp(matrix_elements[i], "rx") == 0) { pmatrix->rx = value; } else if (strcmp(matrix_elements[i], "ry") == 0) { pmatrix->ry = value; } else if (strcmp(matrix_elements[i], "sy") == 0) { pmatrix->sy = value; } else if (strcmp(matrix_elements[i], "tx") == 0) { pmatrix->tx = value; } else if (strcmp(matrix_elements[i], "ty") == 0) { pmatrix->ty = value; } } i++; } ZEND_HASH_FOREACH_END(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawAffine(internd->drawing_wand, pmatrix); efree(pmatrix); RETURN_TRUE; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::arc(float sx, float sy, float ex, float ey, float sd, float ed) Draws an arc falling within a specified bounding rectangle on the image. */ PHP_METHOD(GmagickDraw, arc) { double sx, sy, ex, ey, sd, ed; php_gmagickdraw_object *internd; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddddd", &sx, &sy, &ex, &ey, &sd, &ed) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawArc(internd->drawing_wand, sx, sy, ex, ey, sd, ed); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::bezier(array coordinates) Draws a bezier curve through a set of points on the image. */ PHP_METHOD(GmagickDraw, bezier) { zval *coordinate_array; php_gmagickdraw_object *internd; PointInfo *coordinates; int num_elements = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &coordinate_array) == FAILURE) { return; } coordinates = get_pointinfo_array(coordinate_array, &num_elements TSRMLS_CC); if (coordinates == (PointInfo *)NULL) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Unable to read coordinate array", 2); } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawBezier(internd->drawing_wand, num_elements, coordinates); efree(coordinates); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickPixel GmagickDraw::getFillColor() Returns the fill color used for drawing filled objects. */ PHP_METHOD(GmagickDraw, getfillcolor) { php_gmagickpixel_object *internp; php_gmagickdraw_object *internd; PixelWand *tmp_wand; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); tmp_wand = NewPixelWand(); DrawGetFillColor(internd->drawing_wand, tmp_wand); object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ /* {{{ proto float GmagickDraw::getFillOpacity() Returns the opacity used when drawing using the fill color or fill texture. Fully opaque is 1.0. */ PHP_METHOD(GmagickDraw, getfillopacity) { php_gmagickdraw_object *internd; double opacity; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); opacity = DrawGetFillOpacity(internd->drawing_wand); RETVAL_DOUBLE(opacity); } /* }}} */ /* {{{ proto string|bool GmagickDraw::getFont() Returns a null-terminaged string specifying the font used when annotating with text. The value returned must be freed by the user when no longer needed. */ PHP_METHOD(GmagickDraw, getfont) { php_gmagickdraw_object *internd; char *font; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); font = DrawGetFont(internd->drawing_wand); if(font == (char *)NULL || *font == '\0') { RETURN_FALSE; } else { ZVAL_STRING(return_value, font); GMAGICK_FREE_MEMORY(char *, font); return; } } /* }}} */ /* {{{ proto float GmagickDraw::getFontSize() Returns the font pointsize used when annotating with text. */ PHP_METHOD(GmagickDraw, getfontsize) { php_gmagickdraw_object *internd; double font_size; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); font_size = DrawGetFontSize(internd->drawing_wand); ZVAL_DOUBLE(return_value, font_size); return; } /* }}} */ /* {{{ proto int GmagickDraw::getFontStyle() Returns the font style used when annotating with text. */ PHP_METHOD(GmagickDraw, getfontstyle) { php_gmagickdraw_object *internd; long font_style; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); font_style = DrawGetFontStyle(internd->drawing_wand); ZVAL_LONG(return_value, font_style); return; } /* }}} */ /* {{{ proto int GmagickDraw::getFontWeight() Returns the font weight used when annotating with text. */ PHP_METHOD(GmagickDraw, getfontweight) { php_gmagickdraw_object *internd; long weight; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); weight = DrawGetFontWeight(internd->drawing_wand); ZVAL_LONG(return_value, weight); return; } /* }}} */ /* {{{ proto float GmagickDraw::getStrokeOpacity() Returns the opacity of stroked object outlines. */ PHP_METHOD(GmagickDraw, getstrokeopacity) { php_gmagickdraw_object *internd; double opacity; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); opacity = DrawGetStrokeOpacity(internd->drawing_wand); RETVAL_DOUBLE(opacity); } /* }}} */ /* {{{ proto GmagickPixel GmagickDraw::getStrokeColor() Returns the color used for stroking object outlines. */ PHP_METHOD(GmagickDraw, getstrokecolor) { php_gmagickpixel_object *internp; php_gmagickdraw_object *internd; PixelWand *tmp_wand; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); tmp_wand = NewPixelWand(); DrawGetStrokeColor(internd->drawing_wand, tmp_wand); object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ /* {{{ proto float GmagickDraw::getStrokeWidth() Returns the width of the stroke used to draw object outlines. */ PHP_METHOD(GmagickDraw, getstrokewidth) { php_gmagickdraw_object *internd; double width; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); width = DrawGetStrokeWidth(internd->drawing_wand); RETVAL_DOUBLE(width); } /* }}} */ /* {{{ proto int GmagickDraw::getTextDecoration() Returns the decoration applied when annotating with text. */ PHP_METHOD(GmagickDraw, gettextdecoration) { php_gmagickdraw_object *internd; long decoration; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); decoration = DrawGetTextDecoration(internd->drawing_wand); ZVAL_LONG(return_value, decoration); return; } /* }}} */ /* {{{ proto string|bool GmagickDraw::getTextEncoding() Returns a null-terminated string which specifies the code set used for text annotations. The string must be freed by the user once it is no longer required. */ PHP_METHOD(GmagickDraw, gettextencoding) { php_gmagickdraw_object *internd; char *encoding; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); encoding = DrawGetTextEncoding(internd->drawing_wand); if(encoding == (char *)NULL || *encoding == '\0') { RETURN_FALSE; } else { ZVAL_STRING(return_value, encoding); GMAGICK_FREE_MEMORY(char *, encoding); return; } } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::line(float sx, float sy, float ex, float ey) Draws a line on the image using the current stroke color, stroke opacity, and stroke width. */ PHP_METHOD(GmagickDraw, line) { php_gmagickdraw_object *internd; double sx, sy, ex, ey; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &sx, &sy, &ex, &ey) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawLine(internd->drawing_wand, sx, sy, ex, ey); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::point(float x, float y) Draws a point using the current stroke color and stroke thickness at the specified coordinates. */ PHP_METHOD(GmagickDraw, point) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPoint(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::polygon(array coordinates) Draws a polygon using the current stroke, stroke width, and fill color or texture, using the specified array of coordinates. */ PHP_METHOD(GmagickDraw, polygon) { zval *coordinate_array; php_gmagickdraw_object *internd; PointInfo *coordinates; int num_elements = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &coordinate_array) == FAILURE) { return; } coordinates = get_pointinfo_array(coordinate_array, &num_elements TSRMLS_CC); if (coordinates == (PointInfo *)NULL) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Unable to read coordinate array", 2); } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPolygon(internd->drawing_wand, num_elements, coordinates); efree(coordinates); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::polyline(array coordinates) Draws a polyline using the current stroke, stroke width, and fill color or texture, using the specified array of coordinates. */ PHP_METHOD(GmagickDraw, polyline) { zval *coordinate_array; php_gmagickdraw_object *internd; PointInfo *coordinates; int num_elements = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &coordinate_array) == FAILURE) { return; } coordinates = get_pointinfo_array(coordinate_array, &num_elements TSRMLS_CC); if (coordinates == (PointInfo *)NULL) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Unable to read coordinate array", 2); } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPolyline(internd->drawing_wand, num_elements, coordinates); efree(coordinates); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::rectangle(float x1, float y1, float x2, float y2) Draws a rectangle given two coordinates and using the current stroke, stroke width, and fill settings. */ PHP_METHOD(GmagickDraw, rectangle) { double x1, y1, x2, y2; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &x1, &y1, &x2, &y2) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawRectangle(internd->drawing_wand, x1, y1, x2, y2); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::rotate(float degrees) Applies the specified rotation to the current coordinate space. */ PHP_METHOD(GmagickDraw, rotate) { php_gmagickdraw_object *internd; double degrees; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", °rees) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawRotate(internd->drawing_wand, degrees); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::roundRectangle(float x1, float y1, float x2, float y2, float rx, float ry) Draws a rounted rectangle given two coordinates, x & y corner radiuses and using the current stroke, stroke width, and fill settings. */ PHP_METHOD(GmagickDraw, roundrectangle) { double x1, y1, x2, y2, rx, ry; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddddd", &x1, &y1, &x2, &y2, &rx, &ry) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawRoundRectangle(internd->drawing_wand, x1, y1, x2, y2, rx, ry); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::scale(float x, float y) Adjusts the scaling factor to apply in the horizontal and vertical directions to the current coordinate space. */ PHP_METHOD(GmagickDraw, scale) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawScale(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* {{{ proto GmagickDraw GmagickDraw::setFillColor(GmagickPixel|string color) Sets the fill color to be used for drawing filled objects. */ PHP_METHOD(GmagickDraw, setfillcolor) { zval *param; php_gmagickdraw_object *internd; php_gmagickpixel_object *internp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 2); DrawSetFillColor(internd->drawing_wand, internp->pixel_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFillOpacity(float fillOpacity) Sets the opacity to use when drawing using the fill color or fill texture. Fully opaque is 1.0. */ PHP_METHOD(GmagickDraw, setfillopacity) { php_gmagickdraw_object *internd; double fillOpacity; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &fillOpacity) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFillOpacity(internd->drawing_wand, fillOpacity); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFont(string font_name) Sets the fully-sepecified font to use when annotating with text. */ PHP_METHOD(GmagickDraw, setfont) { php_gmagickdraw_object *internd; char *font, *absolute; size_t font_len; int error = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &font, &font_len) == FAILURE) { return; } /* Check that no empty string is passed */ if (font_len == 0) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Can not set empty font", 2); } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); /* And if it wasn't */ if (!check_configured_font(font, font_len TSRMLS_CC)) { if (!(absolute = expand_filepath(font, NULL TSRMLS_CC))) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Unable to set font", 2); } /* Do a safe-mode check for the font */ GMAGICK_SAFE_MODE_CHECK(absolute, error); GMAGICKDRAW_CHECK_READ_OR_WRITE_ERROR(internd, absolute, error, GMAGICK_FREE_FILENAME); if (VCWD_ACCESS(absolute, F_OK|R_OK)) { zend_throw_exception_ex(php_gmagickdraw_exception_class_entry, 2 TSRMLS_CC, "The given font is not found in the GraphicsMagick configuration and the file (%s) is not accessible", absolute); efree(absolute); return; } DrawSetFont(internd->drawing_wand, absolute); efree(absolute); } else { DrawSetFont(internd->drawing_wand, font); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFontSize(float pointsize) Sets the font pointsize to use when annotating with text. */ PHP_METHOD(GmagickDraw, setfontsize) { php_gmagickdraw_object *internd; double font_size; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &font_size) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFontSize(internd->drawing_wand, font_size); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFontStyle(int style) Sets the font style to use when annotating with text. The AnyStyle enumeration acts as a wild-card "don't care" option. */ PHP_METHOD(GmagickDraw, setfontstyle) { php_gmagickdraw_object *internd; zend_long style_id = AnyStyle; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &style_id) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFontStyle(internd->drawing_wand, style_id); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFontWeight(int font_weight) Sets the font weight to use when annotating with text. */ PHP_METHOD(GmagickDraw, setfontweight) { php_gmagickdraw_object *internd; zend_long weight; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &weight) == FAILURE) { return; } if (weight >= 100 && weight <= 900) { internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFontWeight(internd->drawing_wand, weight); GMAGICK_CHAIN_METHOD; } else { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Font weight valid range is 100-900", 2); } } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeOpacity(float stroke_opacity) Specifies the opacity of stroked object outlines. */ PHP_METHOD(GmagickDraw, setstrokeopacity) { php_gmagickdraw_object *internd; double opacity; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &opacity) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeOpacity(internd->drawing_wand, opacity); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setTextDecoration(int decoration) Specifies a decoration to be applied when annotating with text. */ PHP_METHOD(GmagickDraw, settextdecoration) { php_gmagickdraw_object *internd; zend_long decoration; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &decoration) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetTextDecoration(internd->drawing_wand, decoration); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{ proto GmagickDraw GmagickDraw::setGravity(int GRAVITY) Sets the gravity value */ PHP_METHOD(GmagickDraw, setgravity) { php_gmagickdraw_object *internd; zend_long gravity; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gravity) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetGravity(internd->drawing_wand, gravity); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{ proto int GmagickDraw::getGravity() Gets the gravity value */ PHP_METHOD(GmagickDraw, getgravity) { php_gmagickdraw_object *internd; ZEND_PARSE_PARAMETERS_NONE(); internd = Z_GMAGICKDRAW_OBJ_P(getThis()); RETVAL_LONG(DrawGetGravity(internd->drawing_wand)); } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setTextEncoding(string encoding) Specifies specifies the code set to use for text annotations. The only character encoding which may be specified at this time is "UTF-8" for representing Unicode as a sequence of bytes. Specify an empty string to set text encoding to the system's default. Successful text annotation using Unicode may require fonts designed to support Unicode. */ PHP_METHOD(GmagickDraw, settextencoding) { php_gmagickdraw_object *internd; char *encoding; size_t encoding_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &encoding, &encoding_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetTextEncoding(internd->drawing_wand, encoding); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeAntialias(bool stroke_antialias) Controls whether stroked outlines are antialiased. Stroked outlines are antialiased by default. When antialiasing is disabled stroked pixels are thresholded to determine if the stroke color or underlying canvas color should be used. */ PHP_METHOD(GmagickDraw, setstrokeantialias) { php_gmagickdraw_object *internd; zend_bool antialias; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &antialias) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeAntialias(internd->drawing_wand, antialias); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeDashOffset(float dash_offset) Specifies the offset into the dash pattern to start the dash. */ PHP_METHOD(GmagickDraw, setstrokedashoffset) { php_gmagickdraw_object *internd; double offset; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &offset) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeDashOffset(internd->drawing_wand, offset); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeLineCap(int linecap) Specifies the shape to be used at the end of open subpaths when they are stroked. Values of LineCap are UndefinedCap, ButtCap, RoundCap, and SquareCap. */ PHP_METHOD(GmagickDraw, setstrokelinecap) { php_gmagickdraw_object *internd; zend_long line_cap; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &line_cap) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeLineCap(internd->drawing_wand, line_cap); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeLineJoin(int linejoin) Specifies the shape to be used at the corners of paths (or other vector shapes) when they are stroked. Values of LineJoin are UndefinedJoin, MiterJoin, RoundJoin, and BevelJoin. */ PHP_METHOD(GmagickDraw, setstrokelinejoin) { php_gmagickdraw_object *internd; zend_long line_join; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &line_join) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeLineJoin(internd->drawing_wand, line_join); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeMiterLimit(int miterlimit) Specifies the miter limit. When two line segments meet at a sharp angle and miter joins have been specified for 'lineJoin', it is possible for the miter to extend far beyond the thickness of the line stroking the path. The miterLimit' imposes a limit on the ratio of the miter length to the 'lineWidth'. */ PHP_METHOD(GmagickDraw, setstrokemiterlimit) { php_gmagickdraw_object *internd; zend_long miter_limit; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &miter_limit) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeMiterLimit(internd->drawing_wand, miter_limit); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool GmagickDraw::getStrokeAntialias() Returns the current stroke antialias setting. Stroked outlines are antialiased by default. When antialiasing is disabled stroked pixels are thresholded to determine if the stroke color or underlying canvas color should be used. */ PHP_METHOD(GmagickDraw, getstrokeantialias) { php_gmagickdraw_object *internd; MagickBool status; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); status = DrawGetStrokeAntialias(internd->drawing_wand); if (status == MagickFalse) { RETURN_FALSE; } else { RETURN_TRUE; } } /* }}} */ /* {{{ proto float GmagickDraw::getStrokeDashOffset() Returns the offset into the dash pattern to start the dash. */ PHP_METHOD(GmagickDraw, getstrokedashoffset) { php_gmagickdraw_object *internd; double offset; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); offset = DrawGetStrokeDashOffset(internd->drawing_wand); RETVAL_DOUBLE(offset); } /* }}} */ /* {{{ proto int GmagickDraw::getStrokeLineCap() Returns the shape to be used at the end of open subpaths when they are stroked. Values of LineCap are UndefinedCap, ButtCap, RoundCap, and SquareCap. */ PHP_METHOD(GmagickDraw, getstrokelinecap) { php_gmagickdraw_object *internd; long line_cap; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); line_cap = DrawGetStrokeLineCap(internd->drawing_wand); RETVAL_LONG(line_cap); } /* }}} */ /* {{{ proto int GmagickDraw::getStrokeLineJoin() Returns the shape to be used at the corners of paths (or other vector shapes) when they are stroked. Values of LineJoin are UndefinedJoin, MiterJoin, RoundJoin, and BevelJoin. */ PHP_METHOD(GmagickDraw, getstrokelinejoin) { php_gmagickdraw_object *internd; long line_join; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); line_join = DrawGetStrokeLineJoin(internd->drawing_wand); RETVAL_LONG(line_join); } /* }}} */ /* {{{ proto int GmagickDraw::getStrokeMiterLimit() Returns the miter limit. When two line segments meet at a sharp angle and miter joins have been specified for 'lineJoin', it is possible for the miter to extend far beyond the thickness of the line stroking the path. The miterLimit' imposes a limit on the ratio of the miter length to the 'lineWidth'. */ PHP_METHOD(GmagickDraw, getstrokemiterlimit) { php_gmagickdraw_object *internd; unsigned long miter_limit; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); miter_limit = DrawGetStrokeMiterLimit(internd->drawing_wand); RETVAL_LONG(miter_limit); } /* }}} */ #if GMAGICK_LIB_MASK >= 1003000 /* {{{ proto array GmagickDraw::getStrokeDashArray() Returns an array representing the pattern of dashes and gaps used to stroke paths (see DrawSetStrokeDashArray). The array must be freed once it is no longer required by the user. */ PHP_METHOD(GmagickDraw, getstrokedasharray) { php_gmagickdraw_object *internd; double *stroke_array; unsigned long num_elements, i; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); stroke_array = DrawGetStrokeDashArray(internd->drawing_wand, &num_elements); array_init(return_value); for (i = 0; i < num_elements ; i++) { add_next_index_double(return_value, stroke_array[i]); } GMAGICK_FREE_MEMORY(double *, stroke_array); return; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokeDashArray(array dashArray) Specifies the pattern of dashes and gaps used to stroke paths. The strokeDashArray represents an array of numbers that specify the lengths of alternating dashes and gaps in pixels. If an odd number of values is provided, then the list of values is repeated to yield an even number of values. To remove an existing dash array, pass a zero number_elements argument and null dash_array. A typical strokeDashArray_ array might contain the members 5 3 2. */ PHP_METHOD(GmagickDraw, setstrokedasharray) { zval *param_array; double *double_array; long elements; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", ¶m_array) == FAILURE) { return; } double_array = php_gmagick_zval_to_double_array(param_array, &elements TSRMLS_CC); if (!double_array) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Cannot read stroke dash array parameter", 2); return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokeDashArray(internd->drawing_wand, elements, double_array); efree(double_array); GMAGICK_CHAIN_METHOD; } /* }}} */ #endif //GMAGICK_LIB_MASK >= 1003000 /* {{{ proto GmagickDraw GmagickDraw::circle(float ox, float oy, float px, float py) Draws a circle on the image. */ PHP_METHOD(GmagickDraw, circle) { double ox, oy, px, py; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &ox, &oy, &px, &py) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawCircle(internd->drawing_wand, ox, oy, px, py); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto string|bool GmagickDraw::getClipPath() Obtains the current clipping path ID. The value returned must be deallocated by the user when it is no longer needed. */ PHP_METHOD(GmagickDraw, getclippath) { php_gmagickdraw_object *internd; char *clip_path; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; clip_path = DrawGetClipPath(internd->drawing_wand); if (!clip_path) { RETURN_FALSE; } else { ZVAL_STRING(return_value, clip_path); MagickRelinquishMemory(clip_path); return; } } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setClipPath(string clip_mask) Associates a named clipping path with the image. Only the areas drawn on by the clipping path will be modified as long as it remains in effect. */ PHP_METHOD(GmagickDraw, setclippath) { php_gmagickdraw_object *internd; char *clip_mask; size_t clip_mask_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &clip_mask, &clip_mask_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetClipPath(internd->drawing_wand, clip_mask); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int GmagickDraw::getClipRule() Returns the current polygon fill rule to be used by the clipping path. */ PHP_METHOD(GmagickDraw, getcliprule) { php_gmagickdraw_object *internd; long clip_rule; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; clip_rule = DrawGetClipRule(internd->drawing_wand); RETVAL_LONG(clip_rule); } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setClipRule(int fill_rule) Set the polygon fill rule to be used by the clipping path. */ PHP_METHOD(GmagickDraw, setcliprule) { php_gmagickdraw_object *internd; zend_long fill_rule; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &fill_rule) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetClipRule(internd->drawing_wand, fill_rule); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int GmagickDraw::getClipUnits() Returns the interpretation of clip path units. */ PHP_METHOD(GmagickDraw, getclipunits) { php_gmagickdraw_object *internd; long units; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; units = DrawGetClipUnits(internd->drawing_wand); RETVAL_LONG(units); } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setClipUnits(int clip_units) Sets the interpretation of clip path units. */ PHP_METHOD(GmagickDraw, setclipunits) { php_gmagickdraw_object *internd; zend_long units; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &units) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetClipUnits(internd->drawing_wand, units); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::color(float x, float y, int paintMethod) Draws color on image using the current fill color, starting at specified position, and using specified paint method. The available paint methods are: */ PHP_METHOD(GmagickDraw, color) { php_gmagickdraw_object *internd; double x, y; long paint_method; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ddl", &x, &y, &paint_method) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawColor(internd->drawing_wand, x, y, paint_method); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::comment(string comment) Adds a comment to a vector output stream. */ PHP_METHOD(GmagickDraw, comment) { php_gmagickdraw_object *internd; char *comment; size_t comment_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &comment, &comment_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawComment(internd->drawing_wand, comment); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFillPatternURL(string fill_url) Sets the URL to use as a fill pattern for filling objects. Only local URLs ("#identifier") are supported at this time. These local URLs are normally created by defining a named fill pattern with DrawPushPattern/DrawPopPattern. */ PHP_METHOD(GmagickDraw, setfillpatternurl) { php_gmagickdraw_object *internd; char *url; size_t url_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &url, &url_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFillPatternURL(internd->drawing_wand, url); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int GmagickDraw::getFillRule() Returns the fill rule used while drawing polygons. */ PHP_METHOD(GmagickDraw, getfillrule) { php_gmagickdraw_object *internd; long fill_rule; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; fill_rule = DrawGetFillRule(internd->drawing_wand); RETVAL_LONG(fill_rule); } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setFillRule(int fill_rule) Sets the fill rule to use while drawing polygons. */ PHP_METHOD(GmagickDraw, setfillrule) { php_gmagickdraw_object *internd; zend_long fill_rule; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &fill_rule) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFillRule(internd->drawing_wand, fill_rule); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto string|bool GmagickDraw::getFontFamily() Returns the font family to use when annotating with text. The value returned must be freed by the user when it is no longer needed. */ PHP_METHOD(GmagickDraw, getfontfamily) { php_gmagickdraw_object *internd; char *font_family; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; font_family = DrawGetFontFamily(internd->drawing_wand); if (!font_family) { RETURN_FALSE; } else { ZVAL_STRING(return_value, font_family); GMAGICK_FREE_MEMORY(char*, font_family); return; } } /* }}} */ static zend_bool php_gmagick_check_font(char *font, int font_len TSRMLS_DC) { zend_bool retval = 0; char **fonts; unsigned long i = 0; size_t num_fonts = 0; /* Check that user is only able to set a proper font */ fonts = MagickQueryFonts("*", &num_fonts); for(i = 0 ; i < num_fonts ; i++) { /* Let's see if the font is among configured fonts */ if (strncasecmp(fonts[i], font, font_len) == 0) { retval = 1; break; } } GMAGICK_FREE_MEMORY(char**, fonts); return retval; } /* {{{ proto GmagickDraw GmagickDraw::setFontFamily(string font_family) Sets the font family to use when annotating with text. */ PHP_METHOD(GmagickDraw, setfontfamily) { php_gmagickdraw_object *internd; char *font_family; size_t font_family_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &font_family, &font_family_len) == FAILURE) { return; } /* Check that no empty string is passed */ if (font_family_len == 0) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Can not set empty font family", 2 TSRMLS_CC); return; } if (!php_gmagick_check_font(font_family, font_family_len TSRMLS_CC )) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Unable to set font family; parameter not found in the list of configured fonts", 2 TSRMLS_CC); return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetFontFamily(internd->drawing_wand, font_family); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int GmagickDraw::getFontStretch() Gets the font stretch to use when annotating with text */ PHP_METHOD(GmagickDraw, getfontstretch) { php_gmagickdraw_object *internd; internd = Z_GMAGICKDRAW_OBJ_P(getThis());; RETVAL_LONG(DrawGetFontStretch(internd->drawing_wand)); } /* }}} */ /* {{{ proto bool GmagickDraw::setFontStretch(int fontStretch) Sets the font stretch to use when annotating with text. The AnyStretch enumeration acts as a wild-card "don't care" option. */ PHP_METHOD(GmagickDraw, setfontstretch) { php_gmagickdraw_object *internd; zend_long stretch; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &stretch) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawSetFontStretch(internd->drawing_wand, stretch); RETURN_TRUE; } /* }}} */ // TODO - DrawComposite expects an 'Image' not a 'MagickWand'. The image is in wand->image // but that is internal to GraphicsMagick. // ///* {{{ proto bool GmagickDraw::composite(int compose, float x, float y, float width, float height, MagickWand magick_wand) // Composites an image onto the current image, using the specified composition operator, specified position, and at the specified size. //*/ // PHP_METHOD(GmagickDraw, composite) // { // php_gmagickdraw_object *internd; // php_gmagick_object *other_image; // zval *magick_obj; // long compose; // double x, y, width, height; // // /* Parse parameters given to function */ // if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lddddO", &compose, &x, &y, &width, &height, &magick_obj, php_gmagick_sc_entry) == FAILURE) { // return; // } // // other_image = Z_GMAGICK_OBJ_P(magick_obj); // // if (php_gmagick_ensure_not_empty(other_image->magick_wand) == 0) // return; // // internd = Z_GMAGICKDRAW_OBJ_P(getThis()); // DrawComposite(internd->drawing_wand, compose, x, y, width, height, other_image->magick_wand->image); // // RETURN_TRUE; // RETURN_FALSE; //} /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathClose() Adds a path element to the current path which closes the current subpath by drawing a straight line from the current point to the current subpath's most recent starting point (usually, the most recent moveto point). */ PHP_METHOD(GmagickDraw, pathclose) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPathClose(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToAbsolute(float x1, float y1, float x2, float y2, float x, float y) Draws a cubic Bezier curve from the current point to (x,y) using (x1,y1) as the control point at the beginning of the curve and (x2,y2) as the control point at the end of the curve using absolute coordinates. At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetoabsolute) { php_gmagickdraw_object *internd; double x1, y1, x2, y2, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddddd", &x1, &y1, &x2, &y2, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToAbsolute(internd->drawing_wand, x1, y1, x2, y2, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToRelative(float x1, float y1, float x2, float y2, float x, float y) Draws a cubic Bezier curve from the current point to (x,y) using (x1,y1) as the control point at the beginning of the curve and (x2,y2) as the control point at the end of the curve using relative coordinates. At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetorelative) { php_gmagickdraw_object *internd; double x1, y1, x2, y2, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddddd", &x1, &y1, &x2, &y2, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToRelative(internd->drawing_wand, x1, y1, x2, y2, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToQuadraticBezierAbsolute(float x1, float y1, float x, float y) Draws a quadratic Bezier curve from the current point to (x,y) using (x1,y1) as the control point using absolute coordinates. At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetoquadraticbezierabsolute) { php_gmagickdraw_object *internd; double x1, y1, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &x1, &y1, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToQuadraticBezierAbsolute(internd->drawing_wand, x1, y1, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToQuadraticBezierRelative(float x1, float y1, float x, float y) Draws a quadratic Bezier curve from the current point to (x,y) using (x1,y1) as the control point using relative coordinates. At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetoquadraticbezierrelative) { php_gmagickdraw_object *internd; double x1, y1, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &x1, &y1, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToQuadraticBezierRelative(internd->drawing_wand, x1, y1, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToQuadraticBezierSmoothAbsolute(float x, float y) Draws a quadratic Bezier curve (using relative coordinates) from the current point to (x,y). The control point is assumed to be the reflection of the control point on the previous command relative to the current point. (If there is no previous command or if the previous command was not a DrawPathCurveToQuadraticBezierAbsolute, DrawPathCurveToQuadraticBezierRelative, DrawPathCurveToQuadraticBezierSmoothAbsolut or DrawPathCurveToQuadraticBezierSmoothRelative, assume the control point is coincident with the current point.). At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetoquadraticbeziersmoothabsolute) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToQuadraticBezierSmoothAbsolute(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToQuadraticBezierSmoothRelative(float x, float y) Draws a quadratic Bezier curve (using relative coordinates) from the current point to (x, y). The control point is assumed to be the reflection of the control point on the previous command relative to the current point. (If there is no previous command or if the previous command was not a DrawPathCurveToQuadraticBezierAbsolute, DrawPathCurveToQuadraticBezierRelative, DrawPathCurveToQuadraticBezierSmoothAbsolut or DrawPathCurveToQuadraticBezierSmoothRelative, assume the control point is coincident with the current point). At the end of the command, the new current point becomes the final (x, y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetoquadraticbeziersmoothrelative) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToQuadraticBezierSmoothRelative(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToSmoothAbsolute(float x2, float y2, float x, float y) Draws a cubic Bezier curve from the current point to (x,y) using absolute coordinates. The first control point is assumed to be the reflection of the second control point on the previous command relative to the current point. (If there is no previous command or if the previous command was not an DrawPathCurveToAbsolute, DrawPathCurveToRelative, DrawPathCurveToSmoothAbsolute or DrawPathCurveToSmoothRelative, assume the first control point is coincident with the current point.) (x2,y2) is the second control point (i.e., the control point at the end of the curve). At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetosmoothabsolute) { php_gmagickdraw_object *internd; double x1, y1, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &x1, &y1, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToSmoothAbsolute(internd->drawing_wand, x1, y1, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathCurveToSmoothRelative(float x2, float y2, float x, float y) Draws a cubic Bezier curve from the current point to (x,y) using relative coordinates. The first control point is assumed to be the reflection of the second control point on the previous command relative to the current point. (If there is no previous command or if the previous command was not an DrawPathCurveToAbsolute, DrawPathCurveToRelative, DrawPathCurveToSmoothAbsolute or DrawPathCurveToSmoothRelative, assume the first control point is coincident with the current point.) (x2,y2) is the second control point (i.e., the control point at the end of the curve). At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybezier. */ PHP_METHOD(GmagickDraw, pathcurvetosmoothrelative) { php_gmagickdraw_object *internd; double x1, y1, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &x1, &y1, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathCurveToSmoothRelative(internd->drawing_wand, x1, y1, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathEllipticArcAbsolute(float rx, float ry, float x_axis_rotation, bool large_arc_flag, bool sweep_flag, float x, float y) Draws an elliptical arc from the current point to (x, y) using absolute coordinates. The size and orientation of the ellipse are defined by two radii (rx, ry) and an xAxisRotation, which indicates how the ellipse as a whole is rotated relative to the current coordinate system. The center (cx, cy) of the ellipse is calculated automatically to satisfy the constraints imposed by the other parameters. largeArcFlag and sweepFlag contribute to the automatic calculations and help determine how the arc is drawn. If largeArcFlag is true then draw the larger of the available arcs. If sweepFlag is true, then draw the arc matching a clock-wise rotation. */ PHP_METHOD(GmagickDraw, pathellipticarcabsolute) { php_gmagickdraw_object *internd; double rx, ry, x_axis_rotation, x, y; zend_bool large_arc, sweep; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddbbdd", &rx, &ry, &x_axis_rotation, &large_arc, &sweep, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathEllipticArcAbsolute(internd->drawing_wand, rx, ry, x_axis_rotation, large_arc, sweep, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathEllipticArcRelative(float rx, float ry, float x_axis_rotation, bool large_arc_flag, bool sweep_flag, float x, float y) Draws an elliptical arc from the current point to (x, y) using relative coordinates. The size and orientation of the ellipse are defined by two radii (rx, ry) and an xAxisRotation, which indicates how the ellipse as a whole is rotated relative to the current coordinate system. The center (cx, cy) of the ellipse is calculated automatically to satisfy the constraints imposed by the other parameters. largeArcFlag and sweepFlag contribute to the automatic calculations and help determine how the arc is drawn. If largeArcFlag is true then draw the larger of the available arcs. If sweepFlag is true, then draw the arc matching a clock-wise rotation. */ PHP_METHOD(GmagickDraw, pathellipticarcrelative) { php_gmagickdraw_object *internd; double rx, ry, x_axis_rotation, x, y; zend_bool large_arc, sweep; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddbbdd", &rx, &ry, &x_axis_rotation, &large_arc, &sweep, &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathEllipticArcRelative(internd->drawing_wand, rx, ry, x_axis_rotation, large_arc, sweep, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathMoveToAbsolute(float x, float y) Starts a new sub-path at the given coordinate using absolute coordinates. The current point then becomes the specified coordinate. */ PHP_METHOD(GmagickDraw, pathmovetoabsolute) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathMoveToAbsolute(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathMoveToRelative(float x, float y) Starts a new sub-path at the given coordinate using relative coordinates. The current point then becomes the specified coordinate. */ PHP_METHOD(GmagickDraw, pathmovetorelative) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathMoveToRelative(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathLineToAbsolute(float x, float y) Draws a line path from the current point to the given coordinate using absolute coordinates. The coordinate then becomes the new current point. */ PHP_METHOD(GmagickDraw, pathlinetoabsolute) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathLineToAbsolute(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathLineToRelative(float x, float y) Draws a line path from the current point to the given coordinate using relative coordinates. The coordinate then becomes the new current point. */ PHP_METHOD(GmagickDraw, pathlinetorelative) { php_gmagickdraw_object *internd; double x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathLineToRelative(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathLineToHorizontalAbsolute(float x) Draws a horizontal line path from the current point to the target point using absolute coordinates. The target point then becomes the new current point. */ PHP_METHOD(GmagickDraw, pathlinetohorizontalabsolute) { php_gmagickdraw_object *internd; double y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathLineToHorizontalAbsolute(internd->drawing_wand, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathLineToHorizontalRelative(float x) Draws a horizontal line path from the current point to the target point using relative coordinates. The target point then becomes the new current point. */ PHP_METHOD(GmagickDraw, pathlinetohorizontalrelative) { php_gmagickdraw_object *internd; double x; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &x) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathLineToHorizontalRelative(internd->drawing_wand, x); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathLineToVerticalAbsolute(float y) Draws a vertical line path from the current point to the target point using absolute coordinates. The target point then becomes the new current point. */ PHP_METHOD(GmagickDraw, pathlinetoverticalabsolute) { php_gmagickdraw_object *internd; double y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathLineToVerticalAbsolute(internd->drawing_wand, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathLineToVerticalRelative(float y) Draws a vertical line path from the current point to the target point using relative coordinates. The target point then becomes the new current point. */ PHP_METHOD(GmagickDraw, pathlinetoverticalrelative) { php_gmagickdraw_object *internd; double y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPathLineToVerticalRelative(internd->drawing_wand, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathStart() Declares the start of a path drawing list which is terminated by a matching DrawPathFinish() command. All other DrawPath commands must be enclosed between a and a DrawPathFinish() command. This is because path drawing commands are subordinate commands and they do not function by themselves. */ PHP_METHOD(GmagickDraw, pathstart) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPathStart(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pathFinish() Terminates the current path. */ PHP_METHOD(GmagickDraw, pathfinish) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPathFinish(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::popClipPath() Terminates a clip path definition. */ PHP_METHOD(GmagickDraw, popclippath) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPopClipPath(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::popDefs() Terminates a definition list */ PHP_METHOD(GmagickDraw, popdefs) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPopDefs(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::popPattern() Terminates a pattern definition. */ PHP_METHOD(GmagickDraw, poppattern) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPopPattern(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pushClipPath(string clip_mask_id) Starts a clip path definition which is comprized of any number of drawing commands and terminated by a DrawPopClipPath() command. */ PHP_METHOD(GmagickDraw, pushclippath) { php_gmagickdraw_object *internd; char *clip_mask; size_t clip_mask_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &clip_mask, &clip_mask_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPushClipPath(internd->drawing_wand, clip_mask); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pushDefs() Indicates that commands up to a terminating DrawPopDefs() command create named elements (e.g. clip-paths, textures, etc.) which may safely be processed earlier for the sake of efficiency. */ PHP_METHOD(GmagickDraw, pushdefs) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPushDefs(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pushPattern(string pattern_id, float x, float y, float width, float height) Indicates that subsequent commands up to a DrawPopPattern() command comprise the definition of a named pattern. The pattern space is assigned top left corner coordinates, a width and height, and becomes its own drawing space. Anything which can be drawn may be used in a pattern definition. Named patterns may be used as stroke or brush definitions. */ PHP_METHOD(GmagickDraw, pushpattern) { php_gmagickdraw_object *internd; char *pattern_id; size_t pattern_id_len; double x, y, width, height; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sdddd", &pattern_id, &pattern_id_len, &x, &y, &width, &height) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawPushPattern(internd->drawing_wand, pattern_id, x, y, width, height); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::skewX(float degrees) Skews the current coordinate system in the horizontal direction. */ PHP_METHOD(GmagickDraw, skewx) { double degrees; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", °rees) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawSkewX(internd->drawing_wand, degrees); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::skewY(float degrees) Skews the current coordinate system in the vertical direction. */ PHP_METHOD(GmagickDraw, skewy) { double degrees; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", °rees) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawSkewY(internd->drawing_wand, degrees); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setStrokePatternURL(string stroke_url) Sets the pattern used for stroking object outlines. */ PHP_METHOD(GmagickDraw, setstrokepatternurl) { php_gmagickdraw_object *internd; char *url; size_t url_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &url, &url_len) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); DrawSetStrokePatternURL(internd->drawing_wand, url); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool GmagickDraw::getTextAntialias() Returns the current text antialias setting, which determines whether text is antialiased. Text is antialiased by default. */ PHP_METHOD(GmagickDraw, gettextantialias) { php_gmagickdraw_object *internd; unsigned int text_anti_alias; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis()); text_anti_alias = DrawGetTextAntialias(internd->drawing_wand); RETURN_BOOL(text_anti_alias); } /* }}} */ /* {{{ proto bool GmagickDraw::setAntialias(bool anti_alias) Returns the antialias property associated with the wand. */ PHP_METHOD(GmagickDraw, settextantialias) { php_gmagickdraw_object *internd; zend_bool antialias; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &antialias) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawSetTextAntialias(internd->drawing_wand, antialias); RETURN_TRUE; } /* }}} */ /* {{{ proto GmagickPixel GmagickDraw::getTextUnderColor() Returns the color of a background rectangle to place under text annotations. */ PHP_METHOD(GmagickDraw, gettextundercolor) { php_gmagickpixel_object *internp; php_gmagickdraw_object *internd; PixelWand *tmp_wand; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; tmp_wand = NewPixelWand(); if (!tmp_wand) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "Failed to allocate space for new PixelWand", 2 TSRMLS_CC); return; } DrawGetTextUnderColor(internd->drawing_wand, tmp_wand); object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setTextUnderColor(GmagickPixel|string color) Specifies the color of a background rectangle to place under text annotations. */ PHP_METHOD(GmagickDraw, settextundercolor) { zval *param; php_gmagickdraw_object *internd; php_gmagickpixel_object *internp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); DrawSetTextUnderColor(internd->drawing_wand, internp->pixel_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::translate(float x, float y) Applies a translation to the current coordinate system which moves the coordinate system origin to the specified coordinate. */ PHP_METHOD(GmagickDraw, translate) { double x, y; php_gmagickdraw_object *internd; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawTranslate(internd->drawing_wand, x, y); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::setViewbox(float x1, float y1, float x2, float y2 ) Sets the overall canvas size to be recorded with the drawing vector data. Usually this will be specified using the same size as the canvas image. When the vector data is saved to SVG or MVG formats, the viewbox is use to specify the size of the canvas image that a viewer will render the vector data on. */ PHP_METHOD(GmagickDraw, setviewbox) { php_gmagickdraw_object *internd; zend_long x1, y1, x2, y2; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &x1, &y1, &x2, &y2) == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawSetViewbox(internd->drawing_wand, x1, y1, x2, y2); GMAGICK_CHAIN_METHOD; } /* {{{ proto GmagickDraw GmagickDraw::popGraphicContext() Destroys the current DrawingWand in the stack, and returns to the previously pushed DrawingWand. Multiple DrawingWands may exist. It is an error to attempt to pop more DrawingWands than have been pushed, and it is proper form to pop all DrawingWands which have been pushed. */ PHP_METHOD(GmagickDraw, popGraphicContext) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPopGraphicContext(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickDraw GmagickDraw::pushGraphicContext() Clones the current DrawingWand to create a new DrawingWand, which is then added to the DrawingWand stack. The original drawing DrawingWand(s) may be returned to by invoking PopDrawingWand(). The DrawingWands are stored on a DrawingWand stack. For every Pop there must have already been an equivalent Push. */ PHP_METHOD(GmagickDraw, pushGraphicContext) { php_gmagickdraw_object *internd; if (zend_parse_parameters_none() == FAILURE) { return; } internd = Z_GMAGICKDRAW_OBJ_P(getThis());; DrawPushGraphicContext(internd->drawing_wand); GMAGICK_CHAIN_METHOD; } /* }}} */ gmagick-2.0.6RC1/gmagick_helpers.c0000644000175000017500000010161314011267775015457 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #include "php_gmagick.h" #include "php_gmagick_macros.h" #include "php_gmagick_helpers.h" /* {{{ void php_gmagick_initialize_constants() */ void php_gmagick_initialize_constants() { TSRMLS_FETCH(); /* Constants defined in php_gmagick.h */ GMAGICK_REGISTER_CONST_LONG("COLOR_BLACK", GMAGICK_COLOR_BLACK); GMAGICK_REGISTER_CONST_LONG("COLOR_BLUE", GMAGICK_COLOR_BLUE); GMAGICK_REGISTER_CONST_LONG("COLOR_CYAN", GMAGICK_COLOR_CYAN); GMAGICK_REGISTER_CONST_LONG("COLOR_GREEN", GMAGICK_COLOR_GREEN); GMAGICK_REGISTER_CONST_LONG("COLOR_RED", GMAGICK_COLOR_RED); GMAGICK_REGISTER_CONST_LONG("COLOR_YELLOW", GMAGICK_COLOR_YELLOW); GMAGICK_REGISTER_CONST_LONG("COLOR_MAGENTA", GMAGICK_COLOR_MAGENTA); GMAGICK_REGISTER_CONST_LONG("COLOR_OPACITY", GMAGICK_COLOR_OPACITY); GMAGICK_REGISTER_CONST_LONG("COLOR_ALPHA", GMAGICK_COLOR_ALPHA); GMAGICK_REGISTER_CONST_LONG("COLOR_FUZZ", GMAGICK_COLOR_FUZZ); /* Returning the version as a constant string */ GMAGICK_REGISTER_CONST_LONG("GMAGICK_EXTNUM", PHP_GMAGICK_EXTNUM); /* GraphicsMagick defined constants */ GMAGICK_REGISTER_CONST_LONG("COMPOSITE_DEFAULT", OverCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_UNDEFINED", UndefinedCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_NO", NoCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_ADD", AddCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_ATOP", AtopCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_BUMPMAP", BumpmapCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_CLEAR", ClearCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COLORIZE", ColorizeCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYBLACK", CopyBlackCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYBLUE", CopyBlueCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPY", CopyCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYCYAN", CopyCyanCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYGREEN", CopyGreenCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYMAGENTA", CopyMagentaCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYOPACITY", CopyOpacityCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYRED", CopyRedCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COPYYELLOW", CopyYellowCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_DARKEN", DarkenCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_DIFFERENCE", DifferenceCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_DISPLACE", DisplaceCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_DISSOLVE", DissolveCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_HUE", HueCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_IN", InCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_LIGHTEN", LightenCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_LUMINIZE", LuminizeCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_MINUS", MinusCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_MODULATE", ModulateCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_MULTIPLY", MultiplyCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_OUT", OutCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_OVER", OverCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_OVERLAY", OverlayCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_PLUS", PlusCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_REPLACE", ReplaceCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_SATURATE", SaturateCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_SCREEN", ScreenCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_SUBTRACT", SubtractCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_THRESHOLD", ThresholdCompositeOp); GMAGICK_REGISTER_CONST_LONG("COMPOSITE_XOR", XorCompositeOp); #if defined(DivideCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_DIVIDE", DivideCompositeOp); #endif #if defined(HardLightCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_HARDLIGHT", HardLightCompositeOp); #endif #if defined(ExclusionCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_EXCLUSION", ExclusionCompositeOp); #endif #if defined(ColorDodgeCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COLORDODGE", ColorDodgeCompositeOp); #endif #if defined(ColorBurnCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_COLORBURN", ColorBurnCompositeOp); #endif #if defined(SoftLightCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_SOFTLIGHT", SoftLightCompositeOp); #endif #if defined(LinearBurnCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_LINEARBURN", LinearBurnCompositeOp); #endif #if defined(LinearDodgeCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_LINEARDODGE", LinearDodgeCompositeOp); #endif #if defined(LinearLightCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_LINEARLIGHT", LinearLightCompositeOp); #endif #if defined(VividLightCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_VIVIDLIGHT", VividLightCompositeOp); #endif #if defined(PinLightCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_PINLIGHT", PinLightCompositeOp); #endif #if defined(HardMixCompositeOp) GMAGICK_REGISTER_CONST_LONG("COMPOSITE_HARDMIX", HardMixCompositeOp); #endif GMAGICK_REGISTER_CONST_LONG("MONTAGEMODE_FRAME", FrameMode); GMAGICK_REGISTER_CONST_LONG("MONTAGEMODE_UNFRAME", UnframeMode); GMAGICK_REGISTER_CONST_LONG("MONTAGEMODE_CONCATENATE", ConcatenateMode); GMAGICK_REGISTER_CONST_LONG("STYLE_NORMAL", NormalStyle ); GMAGICK_REGISTER_CONST_LONG("STYLE_ITALIC", ItalicStyle ); GMAGICK_REGISTER_CONST_LONG("STYLE_OBLIQUE", ObliqueStyle ); GMAGICK_REGISTER_CONST_LONG("STYLE_ANY", AnyStyle ); GMAGICK_REGISTER_CONST_LONG("FILTER_UNDEFINED", UndefinedFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_POINT", PointFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_BOX", BoxFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_TRIANGLE", TriangleFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_HERMITE", HermiteFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_HANNING", HanningFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_HAMMING", HammingFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_BLACKMAN", BlackmanFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_GAUSSIAN", GaussianFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_QUADRATIC", QuadraticFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_CUBIC", CubicFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_CATROM", CatromFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_MITCHELL", MitchellFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_LANCZOS", LanczosFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_BESSEL", BesselFilter ); GMAGICK_REGISTER_CONST_LONG("FILTER_SINC", SincFilter ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_UNDEFINED", UndefinedType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_BILEVEL", BilevelType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_GRAYSCALE", GrayscaleType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_GRAYSCALEMATTE", GrayscaleMatteType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_PALETTE", PaletteType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_PALETTEMATTE", PaletteMatteType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_TRUECOLOR", TrueColorType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_TRUECOLORMATTE", TrueColorMatteType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_COLORSEPARATION", ColorSeparationType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_COLORSEPARATIONMATTE", ColorSeparationMatteType ); GMAGICK_REGISTER_CONST_LONG("IMGTYPE_OPTIMIZE", OptimizeType ); GMAGICK_REGISTER_CONST_LONG("RESOLUTION_UNDEFINED", UndefinedResolution ); GMAGICK_REGISTER_CONST_LONG("RESOLUTION_PIXELSPERINCH", PixelsPerInchResolution ); GMAGICK_REGISTER_CONST_LONG("RESOLUTION_PIXELSPERCENTIMETER", PixelsPerCentimeterResolution); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_UNDEFINED", UndefinedCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_NO", NoCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_BZIP", BZipCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_FAX", FaxCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_GROUP4", Group4Compression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_JPEG", JPEGCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_LOSSLESSJPEG", LosslessJPEGCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_LZW", LZWCompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_RLE", RLECompression); GMAGICK_REGISTER_CONST_LONG("COMPRESSION_ZIP", ZipCompression); #if defined(Group3Compression) GMAGICK_REGISTER_CONST_LONG("COMPRESSION_GROUP3", Group3Compression); #endif #if defined(LZMACompression) GMAGICK_REGISTER_CONST_LONG("COMPRESSION_LZMA", LZMACompression); #endif #if defined(JPEG2000Compression) GMAGICK_REGISTER_CONST_LONG("COMPRESSION_JPEG2000", JPEG2000Compression); #endif #if defined(JBIG1Compression) GMAGICK_REGISTER_CONST_LONG("COMPRESSION_JBIG1", JBIG1Compression); #endif #if defined(JBIG2Compression) GMAGICK_REGISTER_CONST_LONG("COMPRESSION_JBIG2", JBIG2Compression); #endif GMAGICK_REGISTER_CONST_LONG("INTERLACE_UNDEFINED", UndefinedInterlace); GMAGICK_REGISTER_CONST_LONG("INTERLACE_NO", NoInterlace); //Don't interlace image (RGBRGBRGBRGBRGBRGB...) GMAGICK_REGISTER_CONST_LONG("INTERLACE_NONE", NoInterlace); //Don't interlace image (RGBRGBRGBRGBRGBRGB...) GMAGICK_REGISTER_CONST_LONG("INTERLACE_LINE", LineInterlace); //Use scanline interlacing (RRR...GGG...BBB...RRR...GGG...BBB...) GMAGICK_REGISTER_CONST_LONG("INTERLACE_PLANE", PlaneInterlace);//Use plane interlacing (RRRRRR...GGGGGG...BBBBBB...) GMAGICK_REGISTER_CONST_LONG("INTERLACE_PARTITION", PartitionInterlace);//Similar to plane interlacing except that the different planes are saved to individual files (e.g. image.R, image.G, and image.B) GMAGICK_REGISTER_CONST_LONG("PAINT_POINT", PointMethod); GMAGICK_REGISTER_CONST_LONG("PAINT_REPLACE", ReplaceMethod); GMAGICK_REGISTER_CONST_LONG("PAINT_FLOODFILL", FloodfillMethod); GMAGICK_REGISTER_CONST_LONG("PAINT_FILLTOBORDER", FillToBorderMethod); GMAGICK_REGISTER_CONST_LONG("PAINT_RESET", ResetMethod); GMAGICK_REGISTER_CONST_LONG("GRAVITY_NORTHWEST", NorthWestGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_NORTH", NorthGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_NORTHEAST", NorthEastGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_WEST", WestGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_CENTER", CenterGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_EAST", EastGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_SOUTHWEST", SouthWestGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_SOUTH", SouthGravity); GMAGICK_REGISTER_CONST_LONG("GRAVITY_SOUTHEAST", SouthEastGravity); GMAGICK_REGISTER_CONST_LONG("STRETCH_NORMAL", NormalStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_ULTRACONDENSED", UltraCondensedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_CONDENSED", CondensedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_SEMICONDENSED", SemiCondensedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_SEMIEXPANDED", SemiExpandedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_EXPANDED", ExpandedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_EXTRAEXPANDED", ExtraExpandedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_ULTRAEXPANDED", UltraExpandedStretch); GMAGICK_REGISTER_CONST_LONG("STRETCH_ANY", AnyStretch); #if defined(ExtraCondensedStretch) GMAGICK_REGISTER_CONST_LONG("STRETCH_EXTRACONDENSED", ExtraCondensedStretch); #endif GMAGICK_REGISTER_CONST_LONG("ALIGN_UNDEFINED", UndefinedAlign); GMAGICK_REGISTER_CONST_LONG("ALIGN_LEFT", LeftAlign); GMAGICK_REGISTER_CONST_LONG("ALIGN_CENTER", CenterAlign); GMAGICK_REGISTER_CONST_LONG("ALIGN_RIGHT", RightAlign); GMAGICK_REGISTER_CONST_LONG("DECORATION_NO", NoDecoration); GMAGICK_REGISTER_CONST_LONG("DECORATION_UNDERLINE", UnderlineDecoration); GMAGICK_REGISTER_CONST_LONG("DECORATION_OVERLINE", OverlineDecoration); GMAGICK_REGISTER_CONST_LONG("DECORATION_LINETROUGH", LineThroughDecoration); GMAGICK_REGISTER_CONST_LONG("NOISE_UNIFORM", UniformNoise); GMAGICK_REGISTER_CONST_LONG("NOISE_GAUSSIAN", GaussianNoise); GMAGICK_REGISTER_CONST_LONG("NOISE_MULTIPLICATIVEGAUSSIAN", MultiplicativeGaussianNoise); GMAGICK_REGISTER_CONST_LONG("NOISE_IMPULSE", ImpulseNoise); GMAGICK_REGISTER_CONST_LONG("NOISE_LAPLACIAN", LaplacianNoise ); GMAGICK_REGISTER_CONST_LONG("NOISE_POISSON", PoissonNoise); #if defined(RandomNoise) GMAGICK_REGISTER_CONST_LONG("NOISE_RANDOM", RandomNoise); #endif GMAGICK_REGISTER_CONST_LONG("CHANNEL_UNDEFINED", UndefinedChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_RED", RedChannel); #if defined(GrayChannel) GMAGICK_REGISTER_CONST_LONG("CHANNEL_GRAY", GrayChannel); #endif GMAGICK_REGISTER_CONST_LONG("CHANNEL_CYAN", CyanChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_GREEN", GreenChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_MAGENTA", MagentaChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_BLUE", BlueChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_YELLOW", YellowChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_OPACITY", OpacityChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_MATTE", MatteChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_BLACK", BlackChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_INDEX", IndexChannel); GMAGICK_REGISTER_CONST_LONG("CHANNEL_ALL", AllChannels); #ifdef DefaultChannels GMAGICK_REGISTER_CONST_LONG("CHANNEL_DEFAULT", DefaultChannels); #endif GMAGICK_REGISTER_CONST_LONG("METRIC_UNDEFINED", UndefinedMetric); GMAGICK_REGISTER_CONST_LONG("METRIC_MEANABSOLUTEERROR", MeanAbsoluteErrorMetric); GMAGICK_REGISTER_CONST_LONG("METRIC_MEANSQUAREERROR", MeanSquaredErrorMetric); GMAGICK_REGISTER_CONST_LONG("METRIC_PEAKABSOLUTEERROR", PeakAbsoluteErrorMetric); GMAGICK_REGISTER_CONST_LONG("METRIC_PEAKSIGNALTONOISERATIO", PeakSignalToNoiseRatioMetric); GMAGICK_REGISTER_CONST_LONG("METRIC_ROOTMEANSQUAREDERROR", RootMeanSquaredErrorMetric); GMAGICK_REGISTER_CONST_LONG("PIXEL_CHAR", CharPixel); GMAGICK_REGISTER_CONST_LONG("PIXEL_DOUBLE", DoublePixel); GMAGICK_REGISTER_CONST_LONG("PIXEL_FLOAT", FloatPixel); GMAGICK_REGISTER_CONST_LONG("PIXEL_INTEGER", IntegerPixel); GMAGICK_REGISTER_CONST_LONG("PIXEL_LONG", LongPixel); GMAGICK_REGISTER_CONST_LONG("PIXEL_SHORT", ShortPixel); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_UNDEFINED", UndefinedColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_RGB", RGBColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_GRAY", GRAYColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_TRANSPARENT", TransparentColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_OHTA", OHTAColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_LAB", LABColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_XYZ", XYZColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_YCBCR", YCbCrColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_YCC", YCCColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_YIQ", YIQColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_YPBPR", YPbPrColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_YUV", YUVColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_CMYK", CMYKColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_SRGB", sRGBColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_HSL", HSLColorspace); GMAGICK_REGISTER_CONST_LONG("COLORSPACE_HWB", HWBColorspace); #if defined(Rec601LumaColorspace) GMAGICK_REGISTER_CONST_LONG("COLORSPACE_REC601LUMA", Rec601LumaColorspace); #endif #if defined(Rec709LumaColorspace) GMAGICK_REGISTER_CONST_LONG("COLORSPACE_REC709LUMA", Rec709LumaColorspace); #endif #if defined(CineonLogRGBColorspace) GMAGICK_REGISTER_CONST_LONG("COLORSPACE_CINEONLOGRGB", CineonLogRGBColorspace); #endif #if defined(Rec601YCbCrColorspace) GMAGICK_REGISTER_CONST_LONG("COLORSPACE_REC601YCBCR", Rec601YCbCrColorspace); #endif #if defined(Rec709YCbCrColorspace) GMAGICK_REGISTER_CONST_LONG("COLORSPACE_REC709YCBCR", Rec709YCbCrColorspace); #endif GMAGICK_REGISTER_CONST_LONG("VIRTUALPIXELMETHOD_UNDEFINED", UndefinedVirtualPixelMethod); GMAGICK_REGISTER_CONST_LONG("VIRTUALPIXELMETHOD_CONSTANT", ConstantVirtualPixelMethod); /* deprecated */ GMAGICK_REGISTER_CONST_LONG("VIRTUALPIXELMETHOD_EDGE", EdgeVirtualPixelMethod); GMAGICK_REGISTER_CONST_LONG("VIRTUALPIXELMETHOD_MIRROR", MirrorVirtualPixelMethod); GMAGICK_REGISTER_CONST_LONG("VIRTUALPIXELMETHOD_TILE", TileVirtualPixelMethod); GMAGICK_REGISTER_CONST_LONG("PREVIEW_UNDEFINED", UndefinedPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_ROTATE", RotatePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SHEAR", ShearPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_ROLL", RollPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_HUE", HuePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SATURATION", SaturationPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_BRIGHTNESS", BrightnessPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_GAMMA", GammaPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SPIFF", SpiffPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_DULL", DullPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_GRAYSCALE", GrayscalePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_QUANTIZE", QuantizePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_DESPECKLE", DespecklePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_REDUCENOISE", ReduceNoisePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_ADDNOISE", AddNoisePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SHARPEN", SharpenPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_BLUR", BlurPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_THRESHOLD", ThresholdPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_EDGEDETECT", EdgeDetectPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SPREAD", SpreadPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SOLARIZE", SolarizePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SHADE", ShadePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_RAISE", RaisePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SEGMENT", SegmentPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_SWIRL", SwirlPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_IMPLODE", ImplodePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_WAVE", WavePreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_OILPAINT", OilPaintPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_CHARCOALDRAWING", CharcoalDrawingPreview); GMAGICK_REGISTER_CONST_LONG("PREVIEW_JPEG", JPEGPreview); GMAGICK_REGISTER_CONST_LONG("RENDERINGINTENT_UNDEFINED", UndefinedIntent); GMAGICK_REGISTER_CONST_LONG("RENDERINGINTENT_SATURATION", SaturationIntent); GMAGICK_REGISTER_CONST_LONG("RENDERINGINTENT_PERCEPTUAL", PerceptualIntent); GMAGICK_REGISTER_CONST_LONG("RENDERINGINTENT_ABSOLUTE", AbsoluteIntent); GMAGICK_REGISTER_CONST_LONG("RENDERINGINTENT_RELATIVE", RelativeIntent); GMAGICK_REGISTER_CONST_LONG("FILLRULE_UNDEFINED", UndefinedRule); GMAGICK_REGISTER_CONST_LONG("FILLRULE_EVENODD", EvenOddRule); GMAGICK_REGISTER_CONST_LONG("FILLRULE_NONZERO", NonZeroRule); GMAGICK_REGISTER_CONST_LONG("PATHUNITS_USERSPACE", UserSpace); GMAGICK_REGISTER_CONST_LONG("PATHUNITS_USERSPACEONUSE", UserSpaceOnUse); GMAGICK_REGISTER_CONST_LONG("PATHUNITS_OBJECTBOUNDINGBOX", ObjectBoundingBox); GMAGICK_REGISTER_CONST_LONG("LINECAP_UNDEFINED", UndefinedCap); GMAGICK_REGISTER_CONST_LONG("LINECAP_BUTT", ButtCap); GMAGICK_REGISTER_CONST_LONG("LINECAP_ROUND", RoundCap); GMAGICK_REGISTER_CONST_LONG("LINECAP_SQUARE", SquareCap); GMAGICK_REGISTER_CONST_LONG("LINEJOIN_UNDEFINED", UndefinedJoin); GMAGICK_REGISTER_CONST_LONG("LINEJOIN_MITER", MiterJoin); GMAGICK_REGISTER_CONST_LONG("LINEJOIN_ROUND", RoundJoin); GMAGICK_REGISTER_CONST_LONG("LINEJOIN_BEVEL", BevelJoin); GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_UNDEFINED", UndefinedResource); GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_AREA", AreaResource); GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_DISK", DiskResource); GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_FILE", FileResource); GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_MAP", MapResource); GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_MEMORY", MemoryResource); #if defined(PixelsResource) GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_PIXELS", PixelsResource); #endif #if defined(ThreadsResource) GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_THREADS", ThreadsResource); #endif #if defined(WidthResource) GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_WIDTH", WidthResource); #endif #if defined(HeightResource) GMAGICK_REGISTER_CONST_LONG("RESOURCETYPE_HEIGHT", HeightResource); #endif GMAGICK_REGISTER_CONST_LONG("DISPOSE_UNDEFINED", UndefinedDispose); GMAGICK_REGISTER_CONST_LONG("DISPOSE_NONE", NoneDispose); GMAGICK_REGISTER_CONST_LONG("DISPOSE_BACKGROUND", BackgroundDispose); GMAGICK_REGISTER_CONST_LONG("DISPOSE_PREVIOUS", PreviousDispose); #if defined(UndefinedOrientation) && defined(LeftBottomOrientation) GMAGICK_REGISTER_CONST_LONG("ORIENTATION_UNDEFINED", UndefinedOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_TOPLEFT", TopLeftOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_TOPRIGHT", TopRightOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_BOTTOMRIGHT", BottomRightOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_BOTTOMLEFT", BottomLeftOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_LEFTTOP", LeftTopOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_RIGHTTOP", RightTopOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_RIGHTBOTTOM", RightBottomOrientation); GMAGICK_REGISTER_CONST_LONG("ORIENTATION_LEFTBOTTOM", LeftBottomOrientation); #endif #if defined(QuantumDepth) GMAGICK_REGISTER_CONST_LONG("QUANTUM_DEPTH", QuantumDepth); #if QuantumDepth == 32 //Avoid overflowing on 32 bit systess GMAGICK_REGISTER_CONST_LONG("QUANTUM", 0xffffffff); #else GMAGICK_REGISTER_CONST_LONG("QUANTUM", ((2 << QuantumDepth) - 1)); #endif #endif /* from magick/version.h */ GMAGICK_REGISTER_CONST_STRING("VERSION_TXT", MagickLibVersionText); GMAGICK_REGISTER_CONST_LONG("VERSION_LIB", MagickLibVersion); /* from config */ GMAGICK_REGISTER_CONST_LONG("VERSION_NUM", GMAGICK_LIB_MASK); } /* }}} */ /* {{{ void *get_pointinfo_array(zval *coordinate_array, int *num_elements TSRMLS_DC) */ void *get_pointinfo_array(zval *coordinate_array, int *num_elements TSRMLS_DC) { PointInfo *coordinates; long elements_count, sub_elements_count, i; HashTable *coords; zval *current, *pz_x, *pz_y; HashTable *sub_array; *num_elements = 0; i = 0; coords = HASH_OF(coordinate_array); elements_count = zend_hash_num_elements(coords); if (elements_count < 1) { coordinates = (PointInfo *)NULL; return coordinates; } coordinates = (PointInfo *)emalloc(sizeof(PointInfo) * elements_count); ZEND_HASH_FOREACH_VAL(coords, current) { ZVAL_DEREF(current); /* If its something than array lets error here */ if(current == NULL || Z_TYPE_P(current) != IS_ARRAY) { efree(coordinates); coordinates = (PointInfo *)NULL; return coordinates; } /* Subarray should have two elements. X and Y */ sub_array = HASH_OF(current); sub_elements_count = zend_hash_num_elements(sub_array); /* Exactly two elements */ if (sub_elements_count != 2) { efree(coordinates); coordinates = (PointInfo *)NULL; return coordinates; } /* Get X */ pz_x = zend_hash_str_find(sub_array, "x", strlen("x")); ZVAL_DEREF(pz_x); if(Z_TYPE_P(pz_x) != IS_DOUBLE && Z_TYPE_P(pz_x) != IS_LONG) { efree(coordinates); coordinates = (PointInfo *)NULL; return coordinates; } /* Get Y */ pz_y = zend_hash_str_find(sub_array, "y", strlen("y")); ZVAL_DEREF(pz_y); if(Z_TYPE_P(pz_y) != IS_DOUBLE && Z_TYPE_P(pz_y) != IS_LONG) { efree(coordinates); coordinates = (PointInfo *)NULL; return coordinates; } /* Assign X and Y */ if (Z_TYPE_P(pz_x) == IS_LONG) { coordinates[i].x = (double)Z_LVAL_P(pz_x); } else { coordinates[i].x = Z_DVAL_P(pz_x); } if (Z_TYPE_P(pz_y) == IS_LONG) { coordinates[i].y = (double)Z_LVAL_P(pz_y); } else { coordinates[i].y = Z_DVAL_P(pz_y); } i++; } ZEND_HASH_FOREACH_END(); *num_elements = elements_count; return coordinates; } /* }}} */ /* {{{ check_configured_font(char *font, int font_len TSRMLS_DC) */ int check_configured_font(char *font, int font_len TSRMLS_DC) { int retval = 0; char **fonts; unsigned long num_fonts = 0, i = 0; /* Check that user is only able to set a proper font */ fonts = (char **) MagickQueryFonts("*", &num_fonts); for(i = 0 ; i < num_fonts ; i++) { /* Let's see if the font is among configured fonts */ if (strncmp(fonts[i], font, font_len) == 0) { retval = 1; break; } } GMAGICK_FREE_MEMORY(char **, fonts); return retval; } /* }}} */ /* {{{ get_double_array_from_zval(zval *param_array, long *num_elements TSRMLS_DC) */ double *get_double_array_from_zval(zval *param_array, long *num_elements TSRMLS_DC) { zval *current; HashTable *ht; double *double_array; long elements_count, i; *num_elements = 0; i = 0; ht = HASH_OF(param_array); elements_count = zend_hash_num_elements(ht); if (elements_count == 0) { double_array = (double *)NULL; return double_array; } double_array = (double *)emalloc(sizeof(double) * elements_count); ZEND_HASH_FOREACH_VAL(ht, current) { ZVAL_DEREF(current); if(Z_TYPE_P(current) == IS_LONG) { double_array[i] = (double)Z_LVAL_P(current); } else if (Z_TYPE_P(current) == IS_DOUBLE) { double_array[i] = Z_DVAL_P(current); } else { efree(double_array); double_array = (double *)NULL; return double_array; } i++; } ZEND_HASH_FOREACH_END(); *num_elements = elements_count; return double_array; } /* {{{ count_occurences_of(char needle, char *haystack TSRMLS_DC) */ int count_occurences_of(char needle, char *haystack TSRMLS_DC) { int occurances = 0; if (haystack == (char *)NULL) { return 0; } while (*haystack != '\0') { if (*(haystack++) == needle) { occurances++; } } return occurances; } /* This is not universally safe to use, but is safe enough for values that will be encountered for image dimensions. */ static inline double gm_round_helper_class(double value) { if (value >= 0.0) { return floor(value + 0.5); } else { return ceil(value - 0.5); } } static void s_calculate_crop( long orig_width, long orig_height, long desired_width, long desired_height, long *new_width, long *new_height, long *offset_x, long *offset_y, zend_bool legacy ) { double ratio_x, ratio_y; long temp_new_width, temp_new_height; ratio_x = ((double) desired_width / (double) orig_width); ratio_y = ((double) desired_height / (double) orig_height); if (ratio_x > ratio_y) { temp_new_width = desired_width; if (legacy) { temp_new_height = (long)(ratio_x * (double)orig_height); } else { temp_new_height = gm_round_helper_class(ratio_x * (double)orig_height); } } else { temp_new_height = desired_height; if (legacy) { temp_new_width = (long)(ratio_y * (double)orig_width); } else { temp_new_width = gm_round_helper_class(ratio_y * (double)orig_width); } } *new_width = temp_new_width; *new_height = temp_new_height; *offset_x = (long) ((temp_new_width - desired_width) / 2); *offset_y = (long) ((temp_new_height - desired_height) / 2); } /* {{{ zend_bool crop_thumbnail_image(MagickWand *magick_wand, long desired_width, long desired_height TSRMLS_DC) */ zend_bool crop_thumbnail_image(MagickWand *magick_wand, long desired_width, long desired_height, zend_bool legacy TSRMLS_DC) { long offset_x = 0, offset_y = 0, new_width, new_height; long orig_width = MagickGetImageWidth(magick_wand); long orig_height = MagickGetImageHeight(magick_wand); /* Already at the size, just strip profiles */ if ((orig_width == desired_width) && (orig_height == desired_height)) { if (!MagickStripImage(magick_wand)) { return 0; } return 1; } s_calculate_crop( orig_width, orig_height, desired_width, desired_height, &new_width, &new_height, &offset_x, &offset_y, legacy ); if (MagickResizeImage(magick_wand, new_width, new_height, UndefinedFilter, 0.5) == MagickFalse) { return 0; } /* all done here */ if ((new_width == desired_width) && (new_height == desired_height)) { return 1; } if (MagickCropImage(magick_wand, desired_width, desired_height, offset_x, offset_y) == MagickFalse) { return 0; } return 1; } /** zend_bool php_gmagick_thumbnail_dimensions(MagickWand *magick_wand, zend_bool bestfit, long desired_width, long desired_height, long *new_width, long *new_height) */ zend_bool php_gmagick_thumbnail_dimensions(MagickWand *magick_wand, zend_bool bestfit, zend_long desired_width, zend_long desired_height, zend_long *new_width, zend_long *new_height, zend_bool legacy) { zend_long orig_width, orig_height; orig_width = MagickGetImageWidth(magick_wand); orig_height = MagickGetImageHeight(magick_wand); if ((orig_width == desired_width) && (orig_height == desired_height)) { *new_width = desired_width; *new_height = desired_height; return 1; } if (bestfit) { double ratio_x, ratio_y; if (desired_width <= 0 || desired_height <= 0) { return 0; } ratio_x = (double)desired_width / (double)orig_width; ratio_y = (double)desired_height / (double)orig_height; if (ratio_x < ratio_y) { *new_width = desired_width; if (legacy) { *new_height = ratio_x * (double)orig_height; } else { *new_height = gm_round_helper_class(ratio_x * ((double) orig_height)); } } else { *new_height = desired_height; if (legacy) { *new_width = ratio_y * (double)orig_width; } else { *new_width = gm_round_helper_class(ratio_y * ((double) orig_width)); } } *new_width = (*new_width < 1) ? 1 : *new_width; *new_height = (*new_height < 1) ? 1 : *new_height; } else { double ratio; if (desired_width <= 0 && desired_height <= 0) { return 0; } if (desired_width <= 0 || desired_height <= 0) { if (desired_width <= 0) { ratio = (double)orig_height / (double)desired_height; if (legacy) { *new_width = orig_width / ratio; } else { *new_width = gm_round_helper_class(((double) orig_width) / ratio); } *new_height = desired_height; } else { ratio = (double)orig_width / (double)desired_width; if (legacy) { *new_height = orig_height / ratio; } else { *new_height = gm_round_helper_class(((double) orig_height) / ratio); } *new_width = desired_width; } } else { *new_width = desired_width; *new_height = desired_height; } } return 1; } /** zend_bool php_gmagick_ensure_not_empty(MagickWand *magick_wand, zend_bool bestfit, long desired_width, long desired_height, long *new_width, long *new_height) */ zend_bool php_gmagick_ensure_not_empty(MagickWand *magick_wand) { if (MagickGetNumberImages(magick_wand) == 0) { TSRMLS_FETCH (); GMAGICK_THROW_GMAGICK_EXCEPTION_EX(magick_wand, "Can not process empty Gmagick object"); return 0; } return 1; } /** double *php_gmagick_zval_to_double_array(zval *param_array, long *num_elements TSRMLS_DC) */ double *php_gmagick_zval_to_double_array(zval *param_array, long *num_elements TSRMLS_DC) { zval *current; HashTable *ht; double *double_array; long elements_count, i = 0; ht = HASH_OF(param_array); *num_elements = elements_count = zend_hash_num_elements(ht); if (elements_count == 0) { return NULL; } /* Number of elements + 1 for final 0 */ double_array = (double *)emalloc(sizeof(double) * (elements_count+1)); ZEND_HASH_FOREACH_VAL(ht, current) { double_array[i] = zval_get_double(current); i++; } ZEND_HASH_FOREACH_END(); double_array[elements_count] = 0.0; return double_array; } zend_bool php_gmagick_stream_handler(php_gmagick_object *intern, php_stream *stream, GmagickOperationType type TSRMLS_DC) { FILE *fp; unsigned int status; GMAGICK_INIT_ERROR_HANDLING; GMAGICK_SET_ERROR_HANDLING_THROW; if (php_stream_can_cast(stream, PHP_STREAM_AS_STDIO | PHP_STREAM_CAST_INTERNAL) == FAILURE || php_stream_cast(stream, PHP_STREAM_AS_STDIO | PHP_STREAM_CAST_INTERNAL, (void*)&fp, 0) == FAILURE) { GMAGICK_RESTORE_ERROR_HANDLING; return 0; } GMAGICK_RESTORE_ERROR_HANDLING; /* php_stream_cast returns warning on some streams but still does not return FAILURE */ if (EG(exception)) { return 0; } switch (type) { case GmagickWriteImageFile: status = MagickWriteImageFile(intern->magick_wand, fp); break; case GmagickWriteImagesFile: //Adjoin needs passing. status = MagickWriteImagesFile(intern->magick_wand, fp, 0); break; case GmagickReadImageFile: status = MagickReadImageFile(intern->magick_wand, fp); break; default: return 0; break; } if (status == MagickFalse) { return 0; } return 1; } gmagick-2.0.6RC1/gmagick_methods.c0000644000175000017500000047244014011267775015471 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #include "php_gmagick.h" #include "php_gmagick_macros.h" #include "php_gmagick_helpers.h" #if GMAGICK_LIB_MASK >= 1004000 #if PHP_VERSION_ID < 50399 static MagickBool SafeModeMonitor(const ConfirmAccessMode mode, const char *path, ExceptionInfo *exception) { ARG_NOT_USED(exception); #if defined(CHECKUID_CHECK_FILE_AND_DIR) if (PG(safe_mode) && (!php_checkuid_ex(path, NULL, CHECKUID_CHECK_FILE_AND_DIR, CHECKUID_NO_ERRORS))) { exception = "SafeModeFail"; return MagickFail; } #endif return MagickPass; } static MagickBool OpenBaseDirMonitor(const ConfirmAccessMode mode, const char *path, ExceptionInfo *exception) { ARG_NOT_USED(exception); if (php_check_open_basedir_ex(path, 0 TSRMLS_CC)) { return MagickFail; } return MagickPass; } #endif //#if PHP_VERSION_ID < 50399 #endif //#if GMAGICK_LIB_MASK >= 1004000 /* {{{ Gmagick Gmagick::read(string filename) Reads image */ PHP_METHOD(Gmagick, readimage) { php_gmagick_object *intern; char *filename = NULL; size_t filename_len; if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &filename, &filename_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); #if GMAGICK_LIB_MASK >= 1004000 && PHP_VERSION_ID <= 50399 GMAGICK_SAFEMODE_OPENBASEDIR_CONFIRMACCESS(filename); #else GMAGICK_SAFEMODE_OPENBASEDIR_CHECK(filename); #endif if (MagickReadImage(intern->magick_wand, filename) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to read the image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ Gmagick Gmagick::__construct([string filename]) Constructs a new Gmagick object */ PHP_METHOD(Gmagick, __construct) { php_gmagick_object *intern; char *filename = NULL; size_t filename_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &filename, &filename_len) == FAILURE) { return; } if (!filename) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); #if GMAGICK_LIB_MASK >= 1004000 && PHP_VERSION_ID <= 50399 GMAGICK_SAFEMODE_OPENBASEDIR_CONFIRMACCESS(filename); #else GMAGICK_SAFEMODE_OPENBASEDIR_CHECK(filename); #endif if (MagickReadImage(intern->magick_wand, filename) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to read the image"); } return; } /* }}} */ /* {{{ proto Gmagick Gmagick::annotateImage(GmagickDraw drawing_wand, float x, float y, float angle, string text) Annotates an image with text. */ PHP_METHOD(Gmagick, annotateimage) { php_gmagick_object *intern; MagickBool status; php_gmagickdraw_object *internd; double x, y, angle; char *text; size_t text_len; zval *objvar; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Oddds", &objvar, php_gmagickdraw_sc_entry, &x, &y, &angle, &text, &text_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); internd = Z_GMAGICKDRAW_OBJ_P(objvar); status = MagickAnnotateImage(intern->magick_wand, internd->drawing_wand, x, y, angle, text); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to annotate image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::blurImage(float radius, float sigma ) Adds blur filter to image. Optional third parameter to blur a specific channel. */ PHP_METHOD(Gmagick, blurimage) { double radius, sigma; php_gmagick_object *intern; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &radius, &sigma) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickBlurImage(intern->magick_wand, radius, sigma); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to blur image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ Gmagick Gmagick::write(string filename[, boolean all_frames]) Writes the current image sequence to a file */ PHP_METHOD(Gmagick, writeimage) { MagickBool status; php_gmagick_object *intern; char *filename = NULL; size_t filename_len; zend_bool all_frames = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &filename, &filename_len, &all_frames) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); if (!filename) { filename = MagickGetImageFilename(intern->magick_wand); if (!filename) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "No image filename specified"); } filename_len = strlen(filename); } if (!filename_len) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to write the image. Empty filename string provided"); } if (all_frames) { status = MagickWriteImages(intern->magick_wand, filename, MagickTrue); } else { status = MagickWriteImage(intern->magick_wand, filename); } if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to write the image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::thumbnail(int width, int height[, bool fit[, bool legacy = false]]) Scales an image to the desired dimensions. If legacy is true, uses the incorrect behaviour that was present until Gmagick 2.0.1. If false (default) it uses the correct behaviour. */ PHP_METHOD(Gmagick, thumbnailimage) { zend_long columns, rows, width, height; php_gmagick_object *intern; zend_bool fit = 0; zend_bool legacy = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|bb", &columns, &rows, &fit, &legacy) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); if (MagickStripImage(intern->magick_wand) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to strip image"); } if (!php_gmagick_thumbnail_dimensions(intern->magick_wand, fit, columns, rows, &width, &height, legacy)) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to calculate image dimensions"); } if (MagickResizeImage(intern->magick_wand, width, height, UndefinedFilter, 0.5) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to thumbnail image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::resize(int width, int height, int filter, float blur[, bool fit = false[, bool legacy = false]]) Scales an image to the desired dimensions If legacy is true, uses the incorrect behaviour that was present until Gmagick 2.0.1. If false (default) it uses the correct behaviour. */ PHP_METHOD(Gmagick, resizeimage) { double blur; zend_long width, height, new_width, new_height, filter = 0; php_gmagick_object *intern; zend_bool fit = 0; zend_bool legacy = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llld|bb", &width, &height, &filter, &blur, &fit, &legacy) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); if (!php_gmagick_thumbnail_dimensions(intern->magick_wand, fit, width, height, &new_width, &new_height, legacy)) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to calculate image dimensions"); } /* No magick is going to happen */ if (MagickResizeImage(intern->magick_wand, new_width, new_height, filter, blur) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to resize image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::clear() Removes all images from object */ PHP_METHOD(Gmagick, clear) { php_gmagick_object *intern; int i, image_count; zend_bool failure = 0; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); image_count = MagickGetNumberImages(intern->magick_wand); for (i = 0; i < image_count; i++) { if (MagickRemoveImage(intern->magick_wand) == MagickFalse) { failure = 1; } } if (failure) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Failed to remove all images"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::crop(int width, int height, int x, int y) Crops image */ PHP_METHOD(Gmagick, cropimage) { php_gmagick_object *intern; long x, y, width, height; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &width, &height, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); if (MagickCropImage(intern->magick_wand, width, height, x, y) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Failed to crop the image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::cropthumbnailimage(int columns, int rows[, bool legacy]) Creates a crop thumbnail. If legacy is true, uses the incorrect behaviour that was present until Gmagick 2.0.1. If false (default) it uses the correct behaviour. */ PHP_METHOD(Gmagick, cropthumbnailimage) { zend_long crop_width, crop_height; zend_bool legacy = 0; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|b", &crop_width, &crop_height, &legacy) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); if (!crop_thumbnail_image(intern->magick_wand, crop_width, crop_height, legacy TSRMLS_CC)) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to crop-thumbnail image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::coalesceImages() Composites a set of images while respecting any page offsets and disposal methods. GIF, MIFF, and MNG animation sequences typically start with an image background and each subsequent image varies in size and offset. returns a new sequence where each image in the sequence is the same size as the first and composited with the next image in the sequence. */ PHP_METHOD(Gmagick, coalesceimages) { MagickWand *tmp_wand; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickCoalesceImages(intern->magick_wand); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Coalesce image failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::composite(Gmagick source, int compose, int x, int y) Crops image */ PHP_METHOD(Gmagick, compositeimage) { zval *source_obj; php_gmagick_object *source, *intern; zend_long x, y, compose; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Olll", &source_obj, php_gmagick_sc_entry, &compose, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); source = Z_GMAGICK_OBJ_P(source_obj); /* Causes a bug with some GraphicsMagick versions where the exception is not cleared. This would cause all subsequent operations to fail. if (MagickGetNumberImages(source->magick_wand) == 0) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "The source object must contain an image"); } */ if (MagickCompositeImage(intern->magick_wand, source->magick_wand, compose, x, y) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Failed to composite the image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::drawImage(GmagickDraw drawing_wand) Renders the GmagickDrawing object on the current image. */ PHP_METHOD(Gmagick, drawimage) { zval *objvar; php_gmagick_object *intern; MagickBool status; php_gmagickdraw_object *internd; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &objvar, php_gmagickdraw_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); internd = Z_GMAGICKDRAW_OBJ_P(objvar); status = MagickDrawImage(intern->magick_wand, internd->drawing_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to draw image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick GMAGICK::addImage(GMAGICK source ) Adds new image to GMAGICK object from the current position of the source object. */ PHP_METHOD(Gmagick, addimage) { php_gmagick_object *intern, *intern_add; zval *add_obj; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &add_obj, php_gmagick_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); intern_add = Z_GMAGICK_OBJ_P(add_obj); GMAGICK_CHECK_NOT_EMPTY(intern_add->magick_wand, 1, 1); status = MagickAddImage(intern->magick_wand, intern_add->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to add image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick GMAGICK::addNoiseImage(int noise_type[, int channel]) Adds random noise to the image. Channel parameter is ignored in ImageMagick below 6.2.8 */ PHP_METHOD(Gmagick, addnoiseimage) { php_gmagick_object *intern; MagickBool status; zend_long noise; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &noise) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickAddNoiseImage(intern->magick_wand, noise); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to add image noise"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::borderImage(GmagickPixel bordercolor, int width, int height) Surrounds the image with a border of the color defined by the bordercolor pixel wand. */ PHP_METHOD(Gmagick, borderimage) { zval *param; php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; zend_long width, height; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zll", ¶m, &width, &height) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); status = MagickBorderImage(intern->magick_wand, internp->pixel_wand, width, height); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to border image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::thresholdImage(float threshold[, int channel] ) Changes the value of individual pixels based on the intensity of each pixel compared to threshold. The result is a high-contrast, two color image. */ PHP_METHOD(Gmagick, thresholdimage) { php_gmagick_object *intern; double threshold; MagickBool status; zend_long channel = DefaultChannels; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|l", &threshold, &channel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickThresholdImageChannel(intern->magick_wand, channel, threshold); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to threshold image"); } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::charcoalImage(float radius, float sigma) Simulates a charcoal drawing. */ PHP_METHOD(Gmagick, charcoalimage) { double sigma, radius; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &radius, &sigma) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickCharcoalImage(intern->magick_wand, sigma, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to charcoal image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::chopImage(int width, int height, int x, int y) Removes a region of an image and collapses the image to occupy the removed portion */ PHP_METHOD(Gmagick, chopimage) { php_gmagick_object *intern; zend_long width, height, x, y; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &width, &height, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickChopImage(intern->magick_wand, width, height, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to chop image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::commentImage(string comment) Adds a comment to your image. */ PHP_METHOD(Gmagick, commentimage) { php_gmagick_object *intern; char *comment; size_t comment_len; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &comment, &comment_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickCommentImage(intern->magick_wand, comment); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to comment image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::current() Returns reference to the current Gmagick object with image pointer at the correct sequence. */ PHP_METHOD(Gmagick, current) { RETURN_ZVAL(getThis(), 1, 0); } /* }}} */ /* {{{ proto Gmagick Gmagick::cycleColormapImage(int displace) Displaces an image's colormap by a given number of positions. If you cycle the colormap a number of times you can produce a psychodelic effect. */ PHP_METHOD(Gmagick, cyclecolormapimage) { php_gmagick_object *intern; zend_long displace; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &displace) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickCycleColormapImage(intern->magick_wand, displace); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to cycle image colormap"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::deconstructImages() Compares each image with the next in a sequence and returns the maximum bounding region of any pixel differences it discovers. */ PHP_METHOD(Gmagick, deconstructimages) { MagickWand *tmp_wand; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickDeconstructImages(intern->magick_wand); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Deconstruct image failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::despeckleImage() Reduces the speckle noise in an image while perserving the edges of the original image. */ PHP_METHOD(Gmagick, despeckleimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickDespeckleImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to despeckle image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::destroy() Destroys the Gmagick object */ PHP_METHOD(Gmagick, destroy) { php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); if (intern->magick_wand == (MagickWand *)NULL) { RETURN_FALSE; } DestroyMagickWand(intern->magick_wand); intern->magick_wand = NewMagickWand(); RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::edgeImage(float radius) Enhance edges within the image with a convolution filter of the given radius. Use a radius of 0 and Edge() selects a suitable radius for you. */ PHP_METHOD(Gmagick, edgeimage) { php_gmagick_object *intern; double radius; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &radius) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickEdgeImage(intern->magick_wand, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to edge image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::embossImage(float radius, float sigma) Returns a grayscale image with a three-dimensional effect. We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, radius should be larger than sigma. Use a radius of 0 and it will choose a suitable radius for you. */ PHP_METHOD(Gmagick, embossimage) { php_gmagick_object *intern; double radius, sigma; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &radius, &sigma) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickEmbossImage(intern->magick_wand, radius, sigma); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to emboss image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::enhanceImage() Applies a digital filter that improves the quality of a noisy image. */ PHP_METHOD(Gmagick, enhanceimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickEnhanceImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to enchance image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::equalizeImage() Equalizes the image histogram. */ PHP_METHOD(Gmagick, equalizeimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickEqualizeImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to equalize image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::flipImage() Creates a vertical mirror image by reflecting the pixels around the central x-axis. */ PHP_METHOD(Gmagick, flipimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickFlipImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to flip image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::flopImage() Creates a horizontal mirror image by reflecting the pixels around the central y-axis. */ PHP_METHOD(Gmagick, flopimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickFlopImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to flop image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::frameImage(GmagickPixel matte_color, int width, int height, int inner_bevel, int outer_bevel) Adds a simulated three-dimensional border around the image */ PHP_METHOD(Gmagick, frameimage) { zval *param; php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; zend_long width, height, inner_bevel, outer_bevel; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zllll", ¶m, &width, &height, &inner_bevel, &outer_bevel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); status = MagickFrameImage(intern->magick_wand, internp->pixel_wand, width, height, inner_bevel, outer_bevel); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to frame image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::gammaImage(float gamma[, int channel]) Gamma-corrects an image. The same image viewed on different devices will have perceptual differences in the way the image's intensities are represented on the screen. Specify individual gamma levels for the red, green, and blue channels, or adjust all three with the gamma parameter. Values typically range from 0.8 to 2.3. */ PHP_METHOD(Gmagick, gammaimage) { php_gmagick_object *intern; MagickBool status; double gamma; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &gamma) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGammaImage(intern->magick_wand, gamma); //TODO - read channels. //status = MagickGammaImageChannel(intern->magick_wand, channel, gamma); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to gamma image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto string Gmagick::getCopyright() Returns the ImageMagick API copyright as a string constant. */ PHP_METHOD(Gmagick, getcopyright) { char *copyright; ZEND_PARSE_PARAMETERS_NONE(); copyright = (char *)MagickGetCopyright(); ZVAL_STRING(return_value, copyright); /* GMAGICK_FREE_MEMORY(char *, copyright); */ return; } /* }}} */ /* {{{ proto string Gmagick::getFilename() Returns the filename associated with an image sequence. */ PHP_METHOD(Gmagick, getfilename) { php_gmagick_object *intern; char *filename; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); filename = (char *)MagickGetFilename(intern->magick_wand); if (filename) { ZVAL_STRING(return_value, filename); GMAGICK_FREE_MEMORY(char *, filename); } return; } /* }}} */ /* {{{ proto GmagickPixel Gmagick::getImageBackgroundColor() Returns the image background color. */ PHP_METHOD(Gmagick, getimagebackgroundcolor) { php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; PixelWand *tmp_wand; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = NewPixelWand(); status = MagickGetImageBackgroundColor(intern->magick_wand, tmp_wand); if (tmp_wand == (PixelWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image background color"); } if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image background color"); } object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ /* {{{ proto string Gmagick::getImageBlob() Returns the current image sequence as a string */ PHP_METHOD(Gmagick, getimageblob) { php_gmagick_object *intern; unsigned char *image_contents; size_t image_size; char *buffer; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_HAS_FORMAT(buffer, intern->magick_wand, 1); MagickResetIterator(intern->magick_wand); image_contents = MagickWriteImageBlob(intern->magick_wand, &image_size); if (!image_contents) { return; } ZVAL_STRINGL(return_value, (char *)image_contents, image_size); GMAGICK_FREE_MEMORY(unsigned char *, image_contents); return; } /* }}} */ /* {{{ proto string Gmagick::getImagesBlob() Returns all image sequences as a string */ PHP_METHOD(Gmagick, getimagesblob) { php_gmagick_object *intern; unsigned char *image_contents; size_t image_size; char *buffer; size_t current; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); /* Get the current iterator position */ current = MagickGetImageIndex(intern->magick_wand); /* Reset the iterator */ MagickResetIterator(intern->magick_wand); /* Loop all images to make sure they have a format */ while (MagickNextImage(intern->magick_wand)) { GMAGICK_HAS_FORMAT(buffer, intern->magick_wand, 1); } /* Get the current iterator position */ status = MagickSetImageIndex(intern->magick_wand, current); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set the iterator index"); } image_contents = MagickWriteImageBlob(intern->magick_wand, &image_size); if (!image_contents) { RETURN_EMPTY_STRING(); } ZVAL_STRINGL(return_value, (char *)image_contents, image_size); GMAGICK_FREE_MEMORY(unsigned char *, image_contents); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageBackgroundColor(GmagickPixel background) Sets the image background color. */ PHP_METHOD(Gmagick, setimagebackgroundcolor) { zval *param; php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); status = MagickSetImageBackgroundColor(intern->magick_wand, internp->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image background color"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto array Gmagick::getImageBluePrimary(float x, float y) Returns the chromaticy blue primary point for the image. */ PHP_METHOD(Gmagick, getimageblueprimary) { php_gmagick_object *intern; MagickBool status; double x, y; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageBluePrimary(intern->magick_wand, &x, &y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image blue primary"); } array_init(return_value); add_assoc_double(return_value, "x", x); add_assoc_double(return_value, "y", y); return; } /* }}} */ /* {{{ proto GmagickPixel Gmagick::getImageBorderColor() Returns the image border color. */ PHP_METHOD(Gmagick, getimagebordercolor) { php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; PixelWand *tmp_wand; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = NewPixelWand(); status = MagickGetImageBorderColor(intern->magick_wand, tmp_wand); if (tmp_wand == (PixelWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image border color"); } if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image border color"); } object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ /* {{{ proto int Gmagick::getImageChannelDepth() Gets the depth for a particular image channel. */ PHP_METHOD(Gmagick, getimagechanneldepth) { php_gmagick_object *intern; zend_long channel_type, channel_depth; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &channel_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); channel_depth = MagickGetImageChannelDepth(intern->magick_wand, channel_type); RETVAL_LONG(channel_depth); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageBluePrimary(float x,float y) Sets the image chromaticity blue primary point */ PHP_METHOD(Gmagick, setimageblueprimary) { php_gmagick_object *intern; double x, y; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageBluePrimary(intern->magick_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image blue primary"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageBorderColor(GmagickPixel border) Sets the image border color */ PHP_METHOD(Gmagick, setimagebordercolor) { zval *param; php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); status = MagickSetImageBorderColor(intern->magick_wand, internp->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image border color"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageChannelDepth(int channel, int depth) Sets the depth of a particular image channel */ PHP_METHOD(Gmagick, setimagechanneldepth) { php_gmagick_object *intern; zend_long channel_type, depth; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &channel_type, &depth) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageChannelDepth(intern->magick_wand, channel_type, depth); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image channel depth"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageColorspace(int colorspace) Sets the image colorspace */ PHP_METHOD(Gmagick, setimagecolorspace) { php_gmagick_object *intern; zend_long colorspace; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &colorspace) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageColorspace(intern->magick_wand, colorspace); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image colorspace"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setInterlaceScheme(INTERLACETYPE interlace_scheme) Sets the image interlace scheme. */ PHP_METHOD(Gmagick, setinterlacescheme) { php_gmagick_object *intern; zend_long schema; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &schema) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetInterlaceScheme(intern->magick_wand, schema); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set interlace scheme"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int Gmagick::getImageColorspace() Gets the image colorspace. */ PHP_METHOD(Gmagick, getimagecolorspace) { php_gmagick_object *intern; long colorSpace; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); colorSpace = MagickGetImageColorspace(intern->magick_wand); RETVAL_LONG(colorSpace); } /* }}} */ /* {{{ proto int Gmagick::getImageColors() Gets the number of unique colors in the image. */ PHP_METHOD(Gmagick, getimagecolors) { php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); ZVAL_LONG(return_value, (long)MagickGetImageColors(intern->magick_wand)); return; } /* }}} */ /* {{{ proto int Gmagick::getImageCompose() Returns the composite operator associated with the image. */ PHP_METHOD(Gmagick, getimagecompose) { php_gmagick_object *intern; long composite; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); composite = MagickGetImageCompose(intern->magick_wand); RETVAL_LONG(composite); } /* }}} */ /* {{{ proto int Gmagick::getImageDelay() Gets the image delay. */ PHP_METHOD(Gmagick, getimagedelay) { php_gmagick_object *intern; long delay; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); delay = MagickGetImageDelay(intern->magick_wand); RETVAL_LONG(delay); } /* }}} */ /* {{{ proto int Gmagick::getImageDepth() Gets the image depth. */ PHP_METHOD(Gmagick, getimagedepth) { php_gmagick_object *intern; long depth; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); depth = MagickGetImageDepth(intern->magick_wand); RETVAL_LONG(depth); } /* }}} */ /* {{{ proto int Gmagick::getNumberImages() Returns the number of images associated with Gmagick object. */ PHP_METHOD(Gmagick, getnumberimages) { php_gmagick_object *intern; unsigned long num_images; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); num_images = MagickGetNumberImages(intern->magick_wand); RETVAL_LONG(num_images); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageCompose(int compose) Sets the image composite operator, useful for specifying how to composite the image thumbnail when using the Gmagick::montageImage() method. */ PHP_METHOD(Gmagick, setimagecompose) { php_gmagick_object *intern; zend_long compose; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &compose) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageCompose(intern->magick_wand, compose); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image composite operator"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageCompression(int compression) Sets the image compression. */ PHP_METHOD(Gmagick, setimagecompression) { php_gmagick_object *intern; zend_long compression; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &compression) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); if (php_gmagick_ensure_not_empty (intern->magick_wand) == 0) { return; } status = MagickSetImageCompression(intern->magick_wand, compression); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image compression"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int Gmagick::getImageCompression Gets the image compression */ PHP_METHOD(Gmagick, getimagecompression) { php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); RETVAL_LONG(MagickGetImageCompression(intern->magick_wand)); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageDelay(int delay) Sets the image delay. */ PHP_METHOD(Gmagick, setimagedelay) { php_gmagick_object *intern; zend_long delay; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &delay) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageDelay(intern->magick_wand, delay); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image delay"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageDepth(int depth) Sets the image depth. */ PHP_METHOD(Gmagick, setimagedepth) { php_gmagick_object *intern; zend_long depth; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &depth) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageDepth(intern->magick_wand, depth); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image depth"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int Gmagick::getImageDispose() Gets the image disposal method. */ PHP_METHOD(Gmagick, getimagedispose) { php_gmagick_object *intern; long dispose; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); dispose = MagickGetImageDispose(intern->magick_wand); RETVAL_LONG(dispose); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageDispose(int dispose) Sets the image disposal method */ PHP_METHOD(Gmagick, setimagedispose) { php_gmagick_object *intern; zend_long dispose; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dispose) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageDispose(intern->magick_wand, dispose); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image dispose"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setFilename(string filename) Sets the filename before you read or write an image file. */ PHP_METHOD(Gmagick, setfilename) { php_gmagick_object *intern; char *filename; size_t filename_len; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetFilename(intern->magick_wand, filename); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set filename"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::getImage() Returns a new Gmagick object with the current image sequence. */ PHP_METHOD(Gmagick, getimage) { MagickWand *tmp_wand; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickGetImage(intern->magick_wand); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Get image failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto bool Gmagick::setImage(Gmagick replace ) Replaces the current sequence */ PHP_METHOD(Gmagick, setimage) { zval *objvar; MagickBool status; php_gmagick_object *intern, *replace; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &objvar, php_gmagick_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); replace = Z_GMAGICK_OBJ_P(objvar); GMAGICK_CHECK_NOT_EMPTY(replace->magick_wand, 1, 1); status = MagickSetImage(intern->magick_wand, replace->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set the image"); } RETURN_TRUE; } /* }}} */ /* {{{ proto array Gmagick::getImageExtrema() Gets the extrema for the image. Returns an associative array with the keys "min" and "max". */ PHP_METHOD(Gmagick, getimageextrema) { php_gmagick_object *intern; unsigned long min, max; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageExtrema(intern->magick_wand, &min, &max); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image extrema"); } array_init(return_value); add_assoc_long(return_value, "min", min); add_assoc_long(return_value, "max", max); return; } /* }}} */ /* {{{ proto string Gmagick::getImageFilename() Returns the filename of a particular image in a sequence */ PHP_METHOD(Gmagick, getimagefilename) { php_gmagick_object *intern; char *filename; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); filename = MagickGetImageFilename(intern->magick_wand); if (filename == (char *)NULL) { return; } ZVAL_STRING(return_value, filename); GMAGICK_FREE_MEMORY(char *, filename); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageFilename(string filename) Sets the filename of a particular image in a sequence. */ PHP_METHOD(Gmagick, setimagefilename) { php_gmagick_object *intern; char *filename; size_t filename_len; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageFilename(intern->magick_wand, filename); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image filename"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto string Gmagick::getImageFormat() Returns the format of a particular image in a sequence. */ PHP_METHOD(Gmagick, getimageformat) { php_gmagick_object *intern; char *format; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); format = MagickGetImageFormat(intern->magick_wand); if (!format) { return; } ZVAL_STRING(return_value, format); GMAGICK_FREE_MEMORY(char *, format); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageFormat(string format) Sets the format of a particular image in a sequence. */ PHP_METHOD(Gmagick, setimageformat) { char *format; size_t format_len; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &format, &format_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageFormat(intern->magick_wand, format); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image format"); } GMAGICK_CHAIN_METHOD; } /* }}} */ #if GMAGICK_LIB_MASK >= 1003007 /* {{{ proto Gmagick Gmagick::setCompressionQuality(int quality) Sets the compression quality factor (0-100). The GraphicsMagick default value is 75. */ PHP_METHOD(Gmagick, setcompressionquality) { php_gmagick_object *intern; zend_long compression_quality; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &compression_quality) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetCompressionQuality(intern->magick_wand, compression_quality); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set compression quality"); } GMAGICK_CHAIN_METHOD; } /* }}} */ #endif /* {{{ proto float Gmagick::getImageGamma() Gets the image gamma. */ PHP_METHOD(Gmagick, getimagegamma) { php_gmagick_object *intern; double gamma; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); gamma = MagickGetImageGamma(intern->magick_wand); RETVAL_DOUBLE(gamma); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageGamma(float gamma) Sets the image gamma. */ PHP_METHOD(Gmagick, setimagegamma) { php_gmagick_object *intern; double gamma; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &gamma) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageGamma(intern->magick_wand, gamma); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image gamma"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto array Gmagick::getImageGreenPrimary() Returns the chromaticy green primary point. Returns an array with the keys "x" and "y". */ PHP_METHOD(Gmagick, getimagegreenprimary) { php_gmagick_object *intern; double x, y; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageGreenPrimary(intern->magick_wand, &x, &y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image green primary"); } array_init(return_value); add_assoc_double(return_value, "x", x); add_assoc_double(return_value, "y", y); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageGreenPrimary(float x, float y) Sets the image chromaticity green primary point */ PHP_METHOD(Gmagick, setimagegreenprimary) { php_gmagick_object *intern; double x, y; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageGreenPrimary(intern->magick_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image green primary"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int Gmagick::getImageHeight() Returns the image height. */ PHP_METHOD(Gmagick, getimageheight) { php_gmagick_object *intern; long height; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); height = MagickGetImageHeight(intern->magick_wand); RETVAL_LONG(height); } /* }}} */ /* {{{ proto array Gmagick::getImageHistogram() Returns the image histogram as an array of GmagickPixel objects. */ PHP_METHOD(Gmagick, getimagehistogram) { php_gmagick_object *intern; php_gmagickpixel_object *internp; PixelWand **wand_array; unsigned long colors = 0; unsigned long i; zval tmp_pixelwand; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); wand_array = MagickGetImageHistogram(intern->magick_wand, &colors); array_init(return_value); for (i = 0; i < colors; i++) { object_init_ex(&tmp_pixelwand, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(&tmp_pixelwand); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, wand_array[i]); add_next_index_zval(return_value, &tmp_pixelwand); } GMAGICK_FREE_MEMORY(PixelWand **, wand_array); return; } /* }}} */ /* {{{ proto int Gmagick::getImageIndex() Returns the index of the current active image, within the Gmagick object. */ PHP_METHOD(Gmagick, getimageindex) { MagickBool status; php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickGetImageIndex(intern->magick_wand); ZVAL_LONG(return_value, (long)status); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageIndex(int index) Returns the index of the current active image, within the Gmagick object. */ PHP_METHOD(Gmagick, setimageindex) { zend_long index; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetImageIndex(intern->magick_wand, index); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image index"); } intern->next_out_of_bound = 0; GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int Gmagick::getImageInterlaceScheme() Gets the image interlace scheme. */ PHP_METHOD(Gmagick, getimageinterlacescheme) { php_gmagick_object *intern; long interlace; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); interlace = MagickGetImageInterlaceScheme(intern->magick_wand); RETVAL_LONG(interlace); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageInterlaceScheme(int interlace_scheme) Sets the image interlace scheme */ PHP_METHOD(Gmagick, setimageinterlacescheme) { php_gmagick_object *intern; zend_long interlace; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &interlace) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageInterlaceScheme(intern->magick_wand, interlace); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image interlace scheme"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int Gmagick::getImageIterations() Gets the image iterations. */ PHP_METHOD(Gmagick, getimageiterations) { php_gmagick_object *intern; long iterations; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); iterations = MagickGetImageIterations(intern->magick_wand); RETVAL_LONG(iterations); } /* }}} */ /* {{{ proto array Gmagick::getImageGeometry() Returns the width and height as an associative array. */ PHP_METHOD(Gmagick, getimagegeometry) { long width,height; php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); width = MagickGetImageWidth(intern->magick_wand); height = MagickGetImageHeight(intern->magick_wand); array_init(return_value); add_assoc_long(return_value, "width", width); add_assoc_long(return_value, "height", height); return; } /* }}} */ /* {{{ proto GmagickPixel Gmagick::getImageMatteColor() Returns the image matte color. */ PHP_METHOD(Gmagick, getimagemattecolor) { php_gmagick_object *intern; php_gmagickpixel_object *internp; MagickBool status; PixelWand *tmp_wand; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = NewPixelWand(); status = MagickGetImageMatteColor(intern->magick_wand, tmp_wand); if (tmp_wand == (PixelWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image matte color"); } if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable get image matter color"); } object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ #if GMAGICK_LIB_MASK >= 1005000 /* {{{ proto int Gmagick::getImageMatte() Returns true if the image has a matte channel otherwise false */ PHP_METHOD(Gmagick, getimagematte) { php_gmagick_object *intern; long matte; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); matte = MagickGetImageMatte(intern->magick_wand); RETVAL_LONG(matte); } /* }}} */ #endif #ifdef GMAGICK_HAVE_SET_IMAGE_PAGE /* {{{ proto array Gmagick::getImagePage() Returns the page geometry associated with the image in an array with the keys "width", "height", "x", and "y". */ PHP_METHOD(Gmagick, getimagepage) { php_gmagick_object *intern; MagickBool status; unsigned long width, height; long x, y; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); if (php_gmagick_ensure_not_empty (intern->magick_wand) == 0) return; status = MagickGetImagePage(intern->magick_wand, &width, &height, &x, &y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image page"); return; } array_init(return_value); add_assoc_long(return_value, "width", width); add_assoc_long(return_value, "height", height); add_assoc_long(return_value, "x", x); add_assoc_long(return_value, "y", y); return; } /* }}} */ #endif // GMAGICK_HAVE_SET_IMAGE_PAGE /* {{{ proto string Gmagick::getImageProfile(string name) Returns the named image profile. */ PHP_METHOD(Gmagick, getimageprofile) { php_gmagick_object *intern; char *profile, *name; size_t name_len; unsigned long length; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); profile = (char *)MagickGetImageProfile(intern->magick_wand, name, &length); if (profile != (char *)NULL) { ZVAL_STRINGL(return_value, profile, length); GMAGICK_FREE_MEMORY(char *, profile); return; } GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "Can not get image profile", 1); } /* }}} */ /* {{{ proto array Gmagick::getImageRedPrimary() Returns the chromaticy red primary point as an array with the keys "x" and "y". */ PHP_METHOD(Gmagick, getimageredprimary) { php_gmagick_object *intern; MagickBool status; double x, y; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageRedPrimary(intern->magick_wand, &x, &y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image red primary"); } array_init(return_value); add_assoc_double(return_value, "x", x); add_assoc_double(return_value, "y", y); return; } /* }}} */ /* {{{ proto int Gmagick::getImageRenderingIntent() Gets the image rendering intent. */ PHP_METHOD(Gmagick, getimagerenderingintent) { php_gmagick_object *intern; long renderingIntent; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); renderingIntent = MagickGetImageRenderingIntent(intern->magick_wand); RETVAL_LONG(renderingIntent); } /* }}} */ /* {{{ proto array Gmagick::getImageResolution() Gets the image X and Y resolution. */ PHP_METHOD(Gmagick, getimageresolution) { php_gmagick_object *intern; MagickBool status; double x, y; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageResolution(intern->magick_wand, &x, &y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image resolution"); } array_init(return_value); add_assoc_double(return_value, "x", x); add_assoc_double(return_value, "y", y); return; } /* }}} */ /* {{{ proto int Gmagick::getImageScene() Gets the image scene. */ PHP_METHOD(Gmagick, getimagescene) { php_gmagick_object *intern; unsigned long scene; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); scene = MagickGetImageScene(intern->magick_wand); RETVAL_LONG(scene); } /* }}} */ /* {{{ proto string Gmagick::getImageSignature() Generates an SHA-256 message digest for the image pixel stream. */ PHP_METHOD(Gmagick, getimagesignature) { php_gmagick_object *intern; char *signature; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); signature = MagickGetImageSignature(intern->magick_wand); ZVAL_STRING(return_value, signature); GMAGICK_FREE_MEMORY(char *, signature); return; } /* }}} */ /* {{{ proto int Gmagick::getImageType() Gets the potential image type: */ PHP_METHOD(Gmagick, getimagetype) { php_gmagick_object *intern; long imageType; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); imageType = MagickGetImageType(intern->magick_wand); RETVAL_LONG(imageType); } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageIterations(int iterations) Sets the image iterations. */ PHP_METHOD(Gmagick, setimageiterations) { php_gmagick_object *intern; zend_long iterations; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &iterations) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageIterations(intern->magick_wand, iterations); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image iterations"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageProfile(string name, string profile) Adds a named profile to the Gmagick object */ PHP_METHOD(Gmagick, setimageprofile) { php_gmagick_object *intern; char *name; unsigned char*profile; size_t profile_len, name_len; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &profile, &profile_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageProfile(intern->magick_wand, name, profile, profile_len); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image profile"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageRedPrimary(float x,float y) Sets the image chromaticity red primary point. */ PHP_METHOD(Gmagick, setimageredprimary) { php_gmagick_object *intern; double x, y; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageRedPrimary(intern->magick_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image red primary"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageRenderingIntent(int rendering_intent) Sets the image rendering intent. */ PHP_METHOD(Gmagick, setimagerenderingintent) { php_gmagick_object *intern; zend_long rendering_intent; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &rendering_intent) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageRenderingIntent(intern->magick_wand, rendering_intent); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image rendering intent"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageResolution(float x_resolution,const float y_resolution) Sets the image resolution. */ PHP_METHOD(Gmagick, setimageresolution) { php_gmagick_object *intern; double x_res, y_res; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x_res, &y_res) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageResolution(intern->magick_wand, x_res, y_res); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image resolution"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageScene(int scene) Sets the image scene. */ PHP_METHOD(Gmagick, setimagescene) { php_gmagick_object *intern; zend_long scene; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &scene) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageScene(intern->magick_wand, scene); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image scene"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageType(int image_type) Sets the image type. */ PHP_METHOD(Gmagick, setimagetype) { php_gmagick_object *intern; zend_long image_type; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &image_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageType(intern->magick_wand, image_type); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image type"); } GMAGICK_CHAIN_METHOD; } /* }}} */ #ifdef GMAGICK_HAVE_SET_IMAGE_PAGE /* {{{ proto bool Imagick::setImagePage(int width, int height, int x, int y) Sets the page geometry of the image. */ PHP_METHOD(Gmagick, setimagepage) { php_gmagick_object *intern; zend_long width, height, x, y; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &width, &height, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImagePage(intern->magick_wand, width, height, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image page"); } RETURN_TRUE; } /* }}} */ #endif //GMAGICK_HAVE_SET_IMAGE_PAGE /* {{{ proto int Gmagick::getImageUnits() Gets the image units of resolution. */ PHP_METHOD(Gmagick, getimageunits) { php_gmagick_object *intern; long resolutionType; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); resolutionType = MagickGetImageUnits(intern->magick_wand); RETVAL_LONG(resolutionType); } /* }}} */ /* {{{ proto array Gmagick::getImageWhitePoint() Returns the chromaticy white point as an associative array with the keys "x" and "y". */ PHP_METHOD(Gmagick, getimagewhitepoint) { php_gmagick_object *intern; MagickBool status; double x, y; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageWhitePoint(intern->magick_wand, &x, &y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image white point"); } array_init(return_value); add_assoc_double(return_value, "x", x); add_assoc_double(return_value, "y", y); return; } /* }}} */ /* {{{ proto int Gmagick::getImageWidth() Returns the image width. */ PHP_METHOD(Gmagick, getimagewidth) { php_gmagick_object *intern; unsigned long width; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); width = MagickGetImageWidth(intern->magick_wand); RETVAL_LONG(width); } /* }}} */ /* {{{ proto string Gmagick::getPackageName() Returns the ImageMagick package name as a string constant. */ PHP_METHOD(Gmagick, getpackagename) { char *package_name; ZEND_PARSE_PARAMETERS_NONE(); package_name = (char *)MagickGetPackageName(); ZVAL_STRING(return_value, package_name); /* GMAGICK_FREE_MEMORY(char *, packageName); */ return; } /* }}} */ /* {{{ proto array Gmagick::getQuantumDepth() Returns the ImageMagick quantum depth as a string constant. */ PHP_METHOD(Gmagick, getquantumdepth) { char *quantum_depth; unsigned long depth; ZEND_PARSE_PARAMETERS_NONE(); quantum_depth = (char *)MagickGetQuantumDepth(&depth); array_init(return_value); add_assoc_long(return_value, "quantumDepthLong", depth); add_assoc_string(return_value, "quantumDepthString", quantum_depth); return; } /* }}} */ /* {{{ proto string Gmagick::getReleaseDate() Returns the ImageMagick release date as a string constant. */ PHP_METHOD(Gmagick, getreleasedate) { char *release_date; ZEND_PARSE_PARAMETERS_NONE(); release_date = (char *)MagickGetReleaseDate(); ZVAL_STRING(return_value, release_date); /* GMAGICK_FREE_MEMORY(char *, releaseDate); */ return; } /* }}} */ /* {{{ proto int Gmagick::getResourceLimit(int type) Returns the specified resource limit in megabytes. */ PHP_METHOD(Gmagick, getresourcelimit) { zend_long resource_type; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &resource_type) == FAILURE) { return; } RETVAL_LONG(MagickGetResourceLimit(resource_type)); } /* }}} */ /* {{{ proto array Gmagick::getSamplingFactors() Gets the horizontal and vertical sampling factor. */ PHP_METHOD(Gmagick, getsamplingfactors) { php_gmagick_object *intern; double *sampling_factors; unsigned long number_factors = 0, i; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); sampling_factors = (double *)MagickGetSamplingFactors(intern->magick_wand, &number_factors); array_init(return_value); for (i = 0 ; i < number_factors; i++) { add_next_index_double(return_value, sampling_factors[i]); } return; } /* }}} */ /* {{{ proto array Gmagick::getSize() Returns the size associated with the Gmagick object as an array with the keys "columns" and "rows". */ PHP_METHOD(Gmagick, getsize) { php_gmagick_object *intern; unsigned long columns, rows; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickGetSize(intern->magick_wand, &columns, &rows); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get size"); } array_init(return_value); add_assoc_long(return_value, "columns", columns); add_assoc_long(return_value, "rows", rows); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageUnits(int units) Sets the image units of resolution. */ PHP_METHOD(Gmagick, setimageunits) { php_gmagick_object *intern; zend_long units; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &units) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageUnits(intern->magick_wand, units); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image units"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageWhitePoint(float x,float y) Sets the image chromaticity white point. */ PHP_METHOD(Gmagick, setimagewhitepoint) { php_gmagick_object *intern; double x, y; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageWhitePoint(intern->magick_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image white point"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setSamplingFactors(array factors) Sets the image sampling factors. */ PHP_METHOD(Gmagick, setsamplingfactors) { php_gmagick_object *intern; MagickBool status; zval *factors; double *double_array; long elements = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &factors) == FAILURE) { return; } double_array = get_double_array_from_zval(factors, &elements TSRMLS_CC); if (double_array == (double *)NULL) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "Can't read array", 1); } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetSamplingFactors(intern->magick_wand, elements, double_array); efree(double_array); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set sampling factors"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::setResourceLimit(RESOURCETYPE type, int limit) Sets the limit for a particular resource in megabytes. */ PHP_METHOD(Gmagick, setresourcelimit) { MagickBool status; zend_long type, limit; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &type, &limit) == FAILURE) { return; } status = MagickSetResourceLimit(type, limit); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "Unable to set resource limit", 1); } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::setSize(int columns, int rows) Sets the size of the Gmagick object. Set it before you read a raw image format such as RGB, GRAY, or CMYK. */ PHP_METHOD(Gmagick, setsize) { php_gmagick_object *intern; zend_long columns, rows; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &columns, &rows) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetSize(intern->magick_wand, columns, rows); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set size"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto array Gmagick::getVersion() Returns the ImageMagick API version as a string constant and as a number. */ PHP_METHOD(Gmagick, getversion) { char *version_string; unsigned long version_number; ZEND_PARSE_PARAMETERS_NONE(); version_string = (char *)MagickGetVersion(&version_number); array_init(return_value); add_assoc_long(return_value, "versionNumber", version_number); add_assoc_string(return_value, "versionString", version_string); /* GMAGICK_FREE_MEMORY(char *, versionString); */ return; } /* }}} */ /* {{{ proto bool Gmagick::hasNextImage() Returns true if the wand has more images when traversing the list in the forward direction */ PHP_METHOD(Gmagick, hasnextimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickHasNextImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::hasPreviousImage() Returns true if the wand has more images when traversing the list in the reverse direction */ PHP_METHOD(Gmagick, haspreviousimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickHasPreviousImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::implodeImage(float radius ) Creates a new image that is a copy of an existing one with the image pixels "implode" by the specified percentage. It allocates the memory necessary for the new Image structure and returns a pointer to the new image. */ PHP_METHOD(Gmagick, implodeimage) { php_gmagick_object *intern; double radius; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &radius) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickImplodeImage(intern->magick_wand, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to implode image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::labelImage(string label) Adds a label to your image. */ PHP_METHOD(Gmagick, labelimage) { char *label; size_t label_len; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &label, &label_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickLabelImage(intern->magick_wand, label); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to label image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::levelImage(float blackPoint, float gamma, float whitePoint[, int channel] ) Adjusts the levels of an image by scaling the colors falling between specified white and black points to the full available quantum range. The parameters provided represent the black, mid, and white points. The black point specifies the darkest color in the image. Colors darker than the black point are set to zero. Mid point specifies a gamma correction to apply to the image. White point specifies the lightest color in the image. Colors brighter than the white point are set to the maximum quantum value. */ PHP_METHOD(Gmagick, levelimage) { php_gmagick_object *intern; double black_point, gamma, white_point; MagickBool status; zend_long channel = DefaultChannels; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ddd|l", &black_point, &gamma, &white_point, &channel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); if (channel == DefaultChannels) { status = MagickLevelImage(intern->magick_wand, black_point, gamma, white_point); } else { status = MagickLevelImageChannel(intern->magick_wand, channel, black_point, gamma, white_point); } /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to level image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::magnifyImage() Is a convenience method that scales an image proportionally to twice its original size. */ PHP_METHOD(Gmagick, magnifyimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickMagnifyImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to magnify image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::cycleColormapImage(Gmagick map, bool dither) Replaces the colors of an image with the closest color from a reference image. */ PHP_METHOD(Gmagick, mapimage) { php_gmagick_object *intern, *intern_map; zval *map_obj; zend_bool dither; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Ob", &map_obj, php_gmagick_sc_entry, &dither) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); intern_map = Z_GMAGICK_OBJ_P(map_obj); status = MagickMapImage(intern->magick_wand, intern_map->magick_wand, dither); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to map image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::medianFilterImage(float radius) Applies a digital filter that improves the quality of a noisy image. Each pixel is replaced by the median in a set of neighboring pixels as defined by radius. */ PHP_METHOD(Gmagick, medianfilterimage) { php_gmagick_object *intern; double radius; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &radius) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickMedianFilterImage(intern->magick_wand, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to median filter image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::negateImage(bool gray[, int channel] ) Negates the colors in the reference image. The Grayscale option means that only grayscale values within the image are negated. */ PHP_METHOD(Gmagick, negateimage) { php_gmagick_object *intern; zend_bool gray; MagickBool status; zend_long channel = DefaultChannels; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b|l", &gray, &channel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickNegateImageChannel(intern->magick_wand, channel, gray); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to negate image"); } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::minifyImage() Is a convenience method that scales an image proportionally to one-half its original size */ PHP_METHOD(Gmagick, minifyimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickMinifyImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to minify image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::modulateImage(float brightness, float saturation, float hue) Lets you control the brightness, saturation, and hue of an image. Hue is the percentage of absolute rotation from the current position. For example 50 results in a counter-clockwise rotation of 90 degrees, 150 results in a clockwise rotation of 90 degrees, with 0 and 200 both resulting in a rotation of 180 degrees. */ PHP_METHOD(Gmagick, modulateimage) { php_gmagick_object *intern; MagickBool status; double brightness, saturation, hue; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ddd", &brightness, &saturation, &hue) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickModulateImage(intern->magick_wand, brightness, saturation, hue); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to modulate image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::motionBlurImage(float radius, float sigma, float angle) Simulates motion blur. We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, radius should be larger than sigma. Use a radius of 0 and MotionBlurImage() selects a suitable radius for you. Angle gives the angle of the blurring motion. */ PHP_METHOD(Gmagick, motionblurimage) { php_gmagick_object *intern; MagickBool status; double radius, sigma, angle; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ddd", &radius, &sigma, &angle) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickMotionBlurImage(intern->magick_wand, radius, sigma, angle); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to motion blur image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::nextImage() Associates the next image in the image list with an Gmagick object. */ PHP_METHOD(Gmagick, nextimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickNextImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { intern->next_out_of_bound = 1; RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::newImage(int cols, int rows, string color[, string format] ) Creates a new image of given size, background color and format */ PHP_METHOD(Gmagick, newimage) { php_gmagick_object *intern; zend_long columns, rows; char *param; size_t param_len = 0; char *format = NULL; size_t format_len = 0; char xc_str[MAX_BUFFER_SIZE]; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls|s", &columns, &rows, ¶m, ¶m_len, &format, &format_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); if (!param_len) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "The color must not be empty", 1); } snprintf(xc_str, MAX_BUFFER_SIZE, "xc:%s", param); if (MagickReadImage(intern->magick_wand, xc_str) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to create new image"); } if (MagickScaleImage(intern->magick_wand, columns, rows) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to create new image:size problem"); } if (format != NULL && format_len > 0) { if (MagickSetImageFormat(intern->magick_wand, format) == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to create new image:format problem"); } } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::normalizeImage() Enhances the contrast of a color image by adjusting the pixels color to span the entire range of colors available */ PHP_METHOD(Gmagick, normalizeimage) { MagickBool status; php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickNormalizeImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to normalize image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::oilPaintImage(float radius) Applies a special effect filter that simulates an oil painting. Each pixel is replaced by the most frequent color occurring in a circular region defined by radius. */ PHP_METHOD(Gmagick, oilpaintimage) { double radius; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &radius) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickOilPaintImage(intern->magick_wand, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to oilpaint image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::previousImage() Assocates the previous image in an image list with the Gmagick object. */ PHP_METHOD(Gmagick, previousimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickPreviousImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { RETURN_FALSE; } intern->next_out_of_bound = 0; RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::profileImage(string name,string profile) Adds or removes a ICC, IPTC, or generic profile from an image. If the profile is NULL, it is removed from the image otherwise added. Use a name of '*' and a profile of NULL to remove all profiles from the image. */ PHP_METHOD(Gmagick, profileimage) { php_gmagick_object *intern; char *name; unsigned char *profile; size_t name_len, profile_len; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &profile, &profile_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickProfileImage(intern->magick_wand, name, profile, profile_len); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to profile image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::quantizeImage(int numberColors, int colorspace, int treedepth, bool dither, bool measureError) Analyzes the colors within a reference image */ PHP_METHOD(Gmagick, quantizeimage) { php_gmagick_object *intern; zend_long number_colors, colorspace, tree_depth; zend_bool dither, measure_error; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllbb", &number_colors, &colorspace, &tree_depth, &dither, &measure_error) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickQuantizeImage(intern->magick_wand, number_colors, colorspace, tree_depth, dither, measure_error); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to quantize image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::quantizeImages(int number_colors, int colorspace, int treedepth, bool dither, bool measure_error) Analyzes the colors within a sequence of images */ PHP_METHOD(Gmagick, quantizeimages) { php_gmagick_object *intern; zend_long number_colors, colorspace, tree_depth; zend_bool dither, measure_error; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllbb", &number_colors, &colorspace, &tree_depth, &dither, &measure_error) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickQuantizeImages(intern->magick_wand, number_colors, colorspace, tree_depth, dither, measure_error); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to quantize images"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto array Gmagick::(GmagickDraw draw, string text) Returns a 7 element array representing the font metrics */ PHP_METHOD(Gmagick, queryfontmetrics) { zval *objvar; php_gmagick_object *intern; php_gmagickdraw_object *internd; char *text; size_t text_len; double *metrics; MagickWand *temp_wand = NULL; MagickWand *font_image_wand = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Os", &objvar, php_gmagickdraw_sc_entry, &text, &text_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); internd = Z_GMAGICKDRAW_OBJ_P(objvar); if (MagickGetNumberImages(intern->magick_wand) == 0) { temp_wand = NewMagickWand(); MagickReadImage(temp_wand, "XC:white"); MagickScaleImage(temp_wand, 1, 1); font_image_wand = temp_wand; } else { font_image_wand = intern->magick_wand; } metrics = MagickQueryFontMetrics(font_image_wand, internd->drawing_wand, text); if (temp_wand != NULL) { DestroyMagickWand(temp_wand); } if (metrics != (double *)NULL) { array_init(return_value); add_assoc_double(return_value, "characterWidth", metrics[0]); add_assoc_double(return_value, "characterHeight", metrics[1]); add_assoc_double(return_value, "ascender", metrics[2]); add_assoc_double(return_value, "descender", metrics[3]); add_assoc_double(return_value, "textWidth", metrics[4]); add_assoc_double(return_value, "textHeight", metrics[5]); add_assoc_double(return_value, "maximumHorizontalAdvance", metrics[6]); GMAGICK_FREE_MEMORY(double *, metrics); return; } else { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to query font metrics"); } } /* }}} */ /* {{{ proto array Gmagick::queryFonts([string pattern] ) Returns fonts supported by GraphicsMagick */ PHP_METHOD(Gmagick, queryfonts) { char **fonts; unsigned long num_fonts = 0, i; char *pattern = "*"; size_t pattern_len = 1; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &pattern, &pattern_len) == FAILURE) { return; } fonts = (char **) MagickQueryFonts(pattern, &num_fonts); array_init(return_value); for (i = 0 ; i < num_fonts ; i++) { add_next_index_string(return_value, fonts[i]); GMAGICK_FREE_MEMORY(char *, fonts[i]); } GMAGICK_FREE_MEMORY(char **, fonts); return; } /* }}} */ /* {{{ proto array Gmagick::queryFormats([string pattern] ) Returns formats supported by GraphicsMagick */ PHP_METHOD(Gmagick, queryformats) { char **supported_formats; unsigned long num_formats = 0, i; char *pattern = "*"; size_t pattern_len = 1; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &pattern, &pattern_len) == FAILURE) { return; } supported_formats = (char **) MagickQueryFormats(pattern, &num_formats); array_init(return_value); for (i = 0 ; i < num_formats ; i++) { add_next_index_string(return_value, supported_formats[i]); GMAGICK_FREE_MEMORY(char *, supported_formats[i]); } GMAGICK_FREE_MEMORY(char **, supported_formats); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::radialBlurImage(float angle[, int channel]) Radial blurs an image. */ PHP_METHOD(Gmagick, radialblurimage) { php_gmagick_object *intern; MagickBool status; double angle; zend_long channel = DefaultChannels; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|l", &angle, &channel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); // MagickRadialBlurImageChannel still not available in 1.4 #if GMAGICK_LIB_MASK >= 1005000 status = MagickRadialBlurImageChannel(intern->magick_wand, channel, angle); #else status = MagickRadialBlurImage(intern->magick_wand, angle); #endif /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to radial blur image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::raiseImage(int width, int height, int x, int y, bool raise) Creates a simulated three-dimensional button-like effect by lightening and darkening the edges of the image. Members width and height of raise_info define the width of the vertical and horizontal edge of the effect. */ PHP_METHOD(Gmagick, raiseimage) { php_gmagick_object *intern; MagickBool status; zend_long width, height, x, y; zend_bool raise; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llllb", &width, &height, &x, &y, &raise) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickRaiseImage(intern->magick_wand, width, height, x, y, raise); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to raise image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::readImageBlob(string image ) Reads image from a binary string */ PHP_METHOD(Gmagick, readimageblob) { unsigned char *image_string; char *filename = NULL; long filename_len; size_t image_string_len; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &image_string, &image_string_len, &filename, &filename_len) == FAILURE) { return; } if (image_string_len == 0) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "Zero size image string passed", 1); } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickReadImageBlob(intern->magick_wand, image_string, image_string_len); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to read image blob"); } /* Even if filename is null we need to give a name here. Otherwise segfaults will happen */ if (!filename) filename = ""; MagickSetImageFilename(intern->magick_wand, filename); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::readImageFile(resource filehandle[, string $filename=null]) Reads image from open filehandle */ PHP_METHOD(Gmagick, readimagefile) { FILE *fp; char *filename = NULL; size_t filename_len; MagickBool status; php_gmagick_object *intern; zval *zstream; php_stream *stream = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s!", &zstream, &filename, &filename_len) == FAILURE) { return; } php_stream_from_zval(stream, zstream); if (php_stream_can_cast(stream, PHP_STREAM_AS_STDIO | PHP_STREAM_CAST_INTERNAL) == FAILURE) { RETURN_FALSE; } if (php_stream_cast(stream, PHP_STREAM_AS_STDIO | PHP_STREAM_CAST_INTERNAL, (void*)&fp, 0) == FAILURE) { RETURN_FALSE; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickReadImageFile(intern->magick_wand, fp); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to read image from filepointer"); } MagickSetImageFilename(intern->magick_wand, filename); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::reduceNoiseImage(float radius) Smooths the contours of an image */ PHP_METHOD(Gmagick, reducenoiseimage) { php_gmagick_object *intern; double radius; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &radius) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickReduceNoiseImage(intern->magick_wand, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to reduce image noise"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::removeImage() Removes an image from the image list. */ PHP_METHOD(Gmagick, removeimage) { MagickBool status; php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickRemoveImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to remove image"); } intern->next_out_of_bound = 0; GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto string Gmagick::removeImageProfile(string name) Removes the named image profile and returns it */ PHP_METHOD(Gmagick, removeimageprofile) { php_gmagick_object *intern; char *name; unsigned char *profile; size_t name_len; unsigned long profile_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); profile = MagickRemoveImageProfile(intern->magick_wand, name, &profile_len); if (profile == (unsigned char *)NULL) { GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "The image profile does not exist", 1); } ZVAL_STRING(return_value, (char *)profile); GMAGICK_FREE_MEMORY(unsigned char *, profile); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::resampleImage(float x_resolution, float y_resolution, int filter, float blur) Resample image to desired resolution. */ PHP_METHOD(Gmagick, resampleimage) { double xRes, yRes, blur; zend_long filter = 0; php_gmagick_object *intern; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ddld", &xRes, &yRes, &filter, &blur) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickResampleImage(intern->magick_wand, xRes, yRes, filter, blur); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to resample image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::rollImage(int x, int y) Offsets an image as defined by x and y. */ PHP_METHOD(Gmagick, rollimage) { zend_long x, y; php_gmagick_object *intern; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickRollImage(intern->magick_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to roll image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::rotateImage(GmagickPixel background, float degrees) Rotates an image the specified number of degrees. Empty triangles left over from rotating the image are filled with the background color. */ PHP_METHOD(Gmagick, rotateimage) { zval *param; php_gmagick_object *intern; php_gmagickpixel_object *internp; double degrees; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zd", ¶m, °rees) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); status = MagickRotateImage(intern->magick_wand, internp->pixel_wand, degrees); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to rotate image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::scaleImage(int cols, int rows[, bool fit[, bool legacy = false]] ) Scales the size of an image to the given dimensions. Passing zero as either of the arguments will preserve dimension while scaling. If legacy is true, uses the incorrect behaviour that was present until Gmagick 2.0.1. If false (default) it uses the correct behaviour. */ PHP_METHOD(Gmagick, scaleimage) { zend_long x, y, width, height; php_gmagick_object *intern; MagickBool status; zend_bool fit = 0; zend_bool legacy = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|bb", &x, &y, &fit, &legacy) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); if (!php_gmagick_thumbnail_dimensions(intern->magick_wand, fit, x, y, &width, &height, legacy)) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to calculate image dimensions"); } status = MagickScaleImage(intern->magick_wand, width, height); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to scale image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::separateImageChannel(int channel) Separates a channel from the image */ PHP_METHOD(Gmagick, separateimagechannel) { php_gmagick_object *intern; zend_long channel; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &channel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSeparateImageChannel(intern->magick_wand, channel); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to separate image channel"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::sharpenImage(float radius, float sigma) Sharpens an image. We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, the radius should be larger than sigma. Use a radius of 0 and selects a suitable radius for you. */ PHP_METHOD(Gmagick, sharpenimage) { double sigma, radius; MagickBool status; php_gmagick_object *intern; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &radius, &sigma) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSharpenImage(intern->magick_wand, radius, sigma); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to sharpen image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::shearImage(GmagickPixel background, float x_shear, float y_shear) Slides one edge of an image along the X or Y axis */ PHP_METHOD(Gmagick, shearimage) { zval *param; php_gmagick_object *intern; php_gmagickpixel_object *internp; double x_shear, y_shear; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zdd", ¶m, &x_shear, &y_shear) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, 1); status = MagickShearImage(intern->magick_wand, internp->pixel_wand, x_shear, y_shear); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to shear image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::solarizeImage(float threshold) Applies a special effect to the image, similar to the effect achieved in a photo darkroom by selectively exposing areas of photo sensitive paper to light. Threshold ranges from 0 to QuantumRange and is a measure of the extent of the solarization. */ PHP_METHOD(Gmagick, solarizeimage) { php_gmagick_object *intern; MagickBool status; zend_long threshold; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &threshold) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSolarizeImage(intern->magick_wand, threshold); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to solarize image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::spreadImage(float radius ) Special effects method that randomly displaces each pixel in a block defined by the radius parameter. */ PHP_METHOD(Gmagick, spreadimage) { double radius; php_gmagick_object *intern; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &radius) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSpreadImage(intern->magick_wand, radius); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to spread image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::stripImage() Strips an image of all profiles and comments. */ PHP_METHOD(Gmagick, stripimage) { php_gmagick_object *intern; MagickBool status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickStripImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to strip image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::swirlImage(float degrees ) Swirls the pixels about the center of the image, where degrees indicates the sweep of the arc through which each pixel is moved. You get a more dramatic effect as the degrees move from 1 to 360. */ PHP_METHOD(Gmagick, swirlimage) { double degrees; php_gmagick_object *intern; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", °rees) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSwirlImage(intern->magick_wand, degrees); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to swirl image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::textureImage(Gmagick texture_wand) Repeatedly tiles the texture image across and down the image canvas. */ PHP_METHOD(Gmagick, textureimage) { MagickWand *tmp_wand; zval *magick_object; php_gmagick_object *intern, *intern_second, *intern_return; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &magick_object, php_gmagick_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); intern_second = Z_GMAGICK_OBJ_P(magick_object); GMAGICK_CHECK_NOT_EMPTY(intern_second->magick_wand, 1, 1); tmp_wand = MagickTextureImage(intern->magick_wand, intern_second->magick_wand); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Texture image failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::trimImage(double fuzz) Remove edges that are the background color from the image. */ PHP_METHOD(Gmagick, trimimage) { double fuzz; php_gmagick_object *intern; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &fuzz) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickTrimImage(intern->magick_wand, fuzz); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to trim image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto string Gmagick::__toString() Returns the current image as string */ PHP_METHOD(Gmagick, __tostring) { php_gmagick_object *intern; unsigned char *image; char *buffer; size_t image_size; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); if(MagickGetNumberImages(intern->magick_wand) == 0) { ZVAL_STRING(return_value, ""); return; } buffer = MagickGetImageFormat(intern->magick_wand); if(!buffer) { ZVAL_STRING(return_value, ""); return; } else { GMAGICK_FREE_MEMORY(char *, buffer); } image = MagickWriteImageBlob(intern->magick_wand, &image_size); ZVAL_STRINGL(return_value, (char *)image, image_size); GMAGICK_FREE_MEMORY(unsigned char *, image); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::flattenImages() Merges a sequence of images. This is useful for combining Photoshop layers into a single image. */ PHP_METHOD(Gmagick, flattenimages) { php_gmagick_object *intern, *intern_return; MagickWand *tmp_wand; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); MagickResetIterator(intern->magick_wand); tmp_wand = MagickFlattenImages(intern->magick_wand); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Flatten images failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::sampleImage(int cols, int rows[, bool fit[, bool legacy = false]] ) Sample the size of an image to the given dimensions. Passing zero as either of the arguments will preserve dimension while scaling. If legacy is true, uses the incorrect behaviour that was present until Gmagick 2.0.1. If false (default) it uses the correct behaviour. */ PHP_METHOD(Gmagick, sampleimage) { zend_long x, y, width, height; php_gmagick_object *intern; MagickBool status; zend_bool fit = 0; zend_bool legacy = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|bb", &x, &y, &fit, &legacy) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); if (!php_gmagick_thumbnail_dimensions(intern->magick_wand, fit, x, y, &width, &height, legacy)) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to calculate image dimensions"); } status = MagickSampleImage(intern->magick_wand, width, height); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to sample image"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::cloneImage() makes an exact copy of the specified wand. */ PHP_METHOD(Gmagick, cloneimage) { MagickWand *tmp_wand; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = CloneMagickWand(intern->magick_wand); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Clone image failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::appendImages() append a set of images */ PHP_METHOD(Gmagick, appendimages) { MagickWand *tmp_wand; zend_bool stack = 0; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickAppendImages(intern->magick_wand, stack); if (tmp_wand == (MagickWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Append images failed"); } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto bool Gmagick::unsharpMaskImage(float radius, float sigma, float amount, float threshold) We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, radius should be larger than sigma. Use a radius of 0 and Gmagick::UnsharpMaskImage() selects a suitable radius for you. */ PHP_METHOD(Gmagick, unsharpmaskimage) { php_gmagick_object *intern; double radius, sigma, amount, threshold; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dddd", &radius, &sigma, &amount, &threshold) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); if (php_gmagick_ensure_not_empty (intern->magick_wand) == 0) return; status = MagickUnsharpMaskImage(intern->magick_wand, radius, sigma, amount, threshold); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to unsharp mask image"); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::setResolution(float x_resolution, float y_resolution, float amount, float threshold) Sets the image resolution */ PHP_METHOD(Gmagick, setresolution) { php_gmagick_object *intern; MagickBool status; double x_resolution, y_resolution; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &x_resolution, &y_resolution) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetResolution(intern->magick_wand, x_resolution, y_resolution); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set resolution"); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::adaptiveThresholdImage(int width, int height, int offset) Selects an individual threshold for each pixel based on the range of intensity values in its local neighborhood. This allows for thresholding of an image whose global intensity histogram doesn't contain distinctive peaks. */ PHP_METHOD(Gmagick, adaptivethresholdimage) { php_gmagick_object *intern; long width, height, offset; unsigned int status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &width, &height, &offset) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickAdaptiveThresholdImage(intern->magick_wand, width, height, offset); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to adaptive threshold image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::affineTransformImage(GmagickDraw drawing_wand) Transforms an image as dictated by the affine matrix of the drawing wand. */ PHP_METHOD(Gmagick, affinetransformimage) { zval *objvar; php_gmagick_object *intern; php_gmagickdraw_object *internd; unsigned int status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &objvar, php_gmagickdraw_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); internd = Z_GMAGICKDRAW_OBJ_P(objvar); status = MagickAffineTransformImage(intern->magick_wand, internd->drawing_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to affine transform image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::averageImages() Average a set of images. */ PHP_METHOD(Gmagick, averageimages) { MagickWand *tmp_wand; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickAverageImages(intern->magick_wand); if (tmp_wand == NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Averaging images failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto bool Gmagick::blackThresholdImage(GmagickPixel threshold) Is like MagickThresholdImage() but forces all pixels below the threshold into black while leaving all pixels above the threshold unchanged. */ PHP_METHOD(Gmagick, blackthresholdimage) { php_gmagick_object *intern; zval *param; unsigned int status; //PixelWand *color_wand; php_gmagickpixel_object *color; //zend_bool allocated; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, color, GMAGICK_CLASS); status = MagickBlackThresholdImage(intern->magick_wand, color->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to black threshold image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::colordecisionlist(string color_correction_collection) Set whether antialiasing should be used for operations. On by default. */ PHP_METHOD(Gmagick, colordecisionlist) { php_gmagick_object *intern; unsigned int status; char *color_correction_collection; int ccc_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &color_correction_collection, &ccc_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickCdlImage(intern->magick_wand, color_correction_collection); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to colorDecisionListImage" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::clipImage() Clips along the first path from the 8BIM profile, if present. */ PHP_METHOD(Gmagick, clipimage) { php_gmagick_object *intern; unsigned int status; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickClipImage(intern->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to clip image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::clipPathImage(string pathname, bool inside) Clips along the named paths from the 8BIM profile, if present. Later operations take effect inside the path. Id may be a number if preceded with #, to work on a numbered path, e.g., "#1" to use the first path. */ PHP_METHOD(Gmagick, clippathimage) { php_gmagick_object *intern; char *clip_path; size_t clip_path_len; zend_bool inside; unsigned int status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sb", &clip_path, &clip_path_len, &inside) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickClipPathImage(intern->magick_wand, clip_path, inside); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to clip path image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::colorFloodfillImage(GmagickPixel fill, double fuzz, GmagickPixel bordercolor, int x, int y) Changes the color value of any pixel that matches target and is an immediate neighbor. */ PHP_METHOD(Gmagick, colorfloodfillimage) { php_gmagick_object *intern; zval *fill_param, *border_param; long x, y; double fuzz; unsigned int status; //PixelWand *fill_wand, *border_wand; php_gmagickpixel_object *fill; php_gmagickpixel_object *border; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zdzll", &fill_param, &fuzz, &border_param, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(fill_param, fill, GMAGICK_CLASS); GMAGICK_CAST_PARAMETER_TO_COLOR(border_param, border, GMAGICK_CLASS); status = MagickColorFloodfillImage(intern->magick_wand, fill->pixel_wand, fuzz, border->pixel_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to color floodfill image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::colorizeImage(GmagickPixel colorize, GmagickPixel opacity) Blends the fill color with each pixel in the image. The 'opacity' color is a per channel strength factor for how strongly the color should be applied. If legacy is true, the behaviour of this function is incorrect, but consistent with how it behaved before Gmagick version 3.4.0 */ PHP_METHOD(Gmagick, colorizeimage) { php_gmagick_object *intern; zval *color_param, *opacity_param; unsigned int status; php_gmagickpixel_object *color; php_gmagickpixel_object *opacity; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &color_param, &opacity_param) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(color_param, color, GMAGICK_CLASS); GMAGICK_CAST_PARAMETER_TO_COLOR(opacity_param, opacity, GMAGICK_CLASS); status = MagickColorizeImage(intern->magick_wand, color->pixel_wand, opacity->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to colorize image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto array Gmagick::compareImageChannels(Gmagick reference, int channel, int metric) Compares one or more image channels of an image to a reconstructed image and returns the difference image. */ PHP_METHOD(Gmagick, compareimagechannels) { MagickWand *tmp_wand; zval *objvar; php_gmagick_object *intern, *intern_second, *intern_return; long channel_type, metric_type; double distortion; #ifdef ZEND_ENGINE_3 zval new_wand; #else zval *new_wand; #endif zval *pNewWand; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Oll", &objvar, php_gmagick_sc_entry, &channel_type, &metric_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); intern_second = Z_GMAGICK_OBJ_P(objvar); if (php_gmagick_ensure_not_empty (intern_second->magick_wand) == 0) return; tmp_wand = MagickCompareImageChannels(intern->magick_wand, intern_second->magick_wand, channel_type, metric_type, &distortion); if (!tmp_wand) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Compare image channels failed" TSRMLS_CC); return; } #ifdef ZEND_ENGINE_3 pNewWand = &new_wand; #else MAKE_STD_ZVAL(new_wand); pNewWand = new_wand; #endif array_init(return_value); object_init_ex(pNewWand, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(pNewWand); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); add_next_index_zval(return_value, pNewWand); add_next_index_double(return_value, distortion); return; } /* }}} */ /* {{{ proto array Gmagick::compareImages(Gmagick reference, int metric) Compares one or more images and returns the difference image. */ PHP_METHOD(Gmagick, compareimages) { MagickWand *tmp_wand; zval *objvar; php_gmagick_object *intern, *intern_second, *intern_return; long metric_type; double distortion; #ifdef ZEND_ENGINE_3 zval new_wand; #else zval *new_wand; #endif zval *pNewWand; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Ol", &objvar, php_gmagick_sc_entry, &metric_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); intern_second = Z_GMAGICK_OBJ_P(objvar); if (php_gmagick_ensure_not_empty (intern_second->magick_wand) == 0) return; #ifdef ZEND_ENGINE_3 pNewWand = &new_wand; #else MAKE_STD_ZVAL(new_wand); pNewWand = new_wand; #endif array_init(return_value); tmp_wand = MagickCompareImages(intern->magick_wand, intern_second->magick_wand, metric_type, &distortion); if (!tmp_wand) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Compare images failed" TSRMLS_CC); return; } object_init_ex(pNewWand, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(pNewWand); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); add_next_index_zval(return_value, pNewWand); add_next_index_double(return_value, distortion); return; } /* }}} */ /* {{{ proto bool Gmagick::contrastImage(bool sharpen) Enhances the intensity differences between the lighter and darker elements of the image. Set sharpen to a value other than 0 to increase the image contrast otherwise the contrast is reduced. */ PHP_METHOD(Gmagick, contrastimage) { php_gmagick_object *intern; unsigned int status; zend_bool contrast; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &contrast) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickContrastImage(intern->magick_wand, contrast); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to contrast image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::convolveImage(array kernel) Applies a custom convolution kernel to the image. */ PHP_METHOD(Gmagick, convolveimage) { php_gmagick_object *intern; unsigned int status; zval *kernel_array; double *kernel; unsigned long order = 0; long num_elements = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &kernel_array) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); kernel = php_gmagick_zval_to_double_array(kernel_array, &num_elements TSRMLS_CC); if (!kernel) { zend_throw_exception(php_gmagick_exception_class_entry, "Unable to read matrix array", 1 TSRMLS_CC); return; } order = (unsigned long) sqrt(num_elements); status = MagickConvolveImage(intern->magick_wand, order, kernel); efree(kernel); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to convolve image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::extentImage(int width, int height, int x, int y ) Sets the image size */ PHP_METHOD(Gmagick, extentimage) { php_gmagick_object *intern; unsigned int status; long width, height, x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &width, &height, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickExtentImage(intern->magick_wand, width, height, x, y); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to extent image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto string Gmagick::getImageAttribute(string key ) Returns a named attribute */ PHP_METHOD(Gmagick, getimageattribute) { php_gmagick_object *intern; char *key, *attribute; size_t key_len; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &key, &key_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); attribute = MagickGetImageAttribute(intern->magick_wand, key); if (!attribute) { RETURN_FALSE; } ZVAL_STRING(return_value, attribute); GMAGICK_FREE_MEMORY(char *, attribute); return; } /* }}} */ /* {{{ proto array Gmagick::getImageChannelExtrema(int channel) Gets the extrema for one or more image channels. Return value is an associative array with the keys "minima" and "maxima". */ PHP_METHOD(Gmagick, getimagechannelextrema) { php_gmagick_object *intern; long channel_type; size_t minima, maxima; unsigned int status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &channel_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageChannelExtrema(intern->magick_wand, channel_type, &minima, &maxima); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image channel extrema" TSRMLS_CC); return; } array_init(return_value); add_assoc_long(return_value, "minima", minima); add_assoc_long(return_value, "maxima", maxima); return; } /* }}} */ /* {{{ proto array Gmagick::getImageChannelMean(int channel) Gets the mean and standard deviation of one or more image channels. Return value is an associative array with the keys "mean" and "standardDeviation". */ PHP_METHOD(Gmagick, getimagechannelmean) { php_gmagick_object *intern; long channel_type; double mean, standard_deviation; unsigned int status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &channel_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageChannelMean(intern->magick_wand, channel_type, &mean, &standard_deviation); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image channel mean" TSRMLS_CC); return; } array_init(return_value); add_assoc_double(return_value, "mean", mean); add_assoc_double(return_value, "standardDeviation", standard_deviation); return; } /* }}} */ /* {{{ proto GmagickPixel Gmagick::getImageColormapColor(int index) Returns the color of the specified colormap index. */ PHP_METHOD(Gmagick, getimagecolormapcolor) { php_gmagick_object *intern; php_gmagickpixel_object *internp; unsigned int status; PixelWand *tmp_wand; long index; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = NewPixelWand(); status = MagickGetImageColormapColor(intern->magick_wand, index , tmp_wand); if (tmp_wand == (PixelWand *)NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image colormap color" TSRMLS_CC); return; } if (status == MagickFalse) { DestroyPixelWand(tmp_wand); GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to get image colormap color" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagickpixel_sc_entry); internp = Z_GMAGICKPIXEL_OBJ_P(return_value); GMAGICKPIXEL_REPLACE_PIXELWAND(internp, tmp_wand); return; } /* }}} */ #ifdef HAVE_GMAGICK_SET_IMAGE_GRAVITY /* {{{ proto int Gmagick::getImageGravity() Gets the image gravity */ PHP_METHOD(Gmagick, getimagegravity) { php_gmagick_object *intern; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); RETVAL_LONG(MagickGetImageGravity(intern->magick_wand)); } /* }}} */ #endif /* {{{ proto int Gmagick::getImageVirtualPixelMethod() Returns the virtual pixel method for the sepcified image. */ PHP_METHOD(Gmagick, getimagevirtualpixelmethod) { php_gmagick_object *intern; long pixelMethod; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); pixelMethod = MagickGetImageVirtualPixelMethod(intern->magick_wand); RETVAL_LONG(pixelMethod); } /* }}} */ /* {{{ proto bool Gmagick::haldClutImage(Gmagick hald[, int CHANNEL]) Replaces colors in the image from a Hald color lookup table */ PHP_METHOD(Gmagick, haldclutimage) { zval *objvar; unsigned int status; php_gmagick_object *intern, *hald; //long channel = DefaultChannels; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &objvar, php_gmagick_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); hald = Z_GMAGICK_OBJ_P(objvar); if (php_gmagick_ensure_not_empty (hald->magick_wand) == 0) return; //status = MagickHaldClutImageChannel(intern->magick_wand, channel, hald->magick_wand); status = MagickHaldClutImage(intern->magick_wand, hald->magick_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to hald clut image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::matteFloodfillImage(float alpha,float fuzz,GmagickPixel bordercolor, int x, int y) Changes the transparency value of any pixel that matches target and is an immediate neighbor */ PHP_METHOD(Gmagick, mattefloodfillimage) { php_gmagick_object *intern; zval *param; long x, y; double alpha, fuzz; unsigned int status; //PixelWand *color_wand; php_gmagickpixel_object *color; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ddzll", &alpha, &fuzz, ¶m, &x, &y) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, color, GMAGICK_CLASS); status = MagickMatteFloodfillImage(intern->magick_wand, alpha, fuzz, color->pixel_wand, x, y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to matte floodfill image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::montageImage(GmagickDraw drawing_wand, string tile_geometry, string thumbnail_geometry, int mode, string frame) Creates a composite image by combining several separate images. The images are tiled on the composite image with the name of the image optionally appearing just below the individual tile. */ PHP_METHOD(Gmagick, montageimage) { MagickWand *tmp_wand; zval *objvar; php_gmagick_object *intern, *intern_return; php_gmagickdraw_object *internd; char *tile_geometry, *thumbnail_geometry, *frame; size_t tile_geometry_len, thumbnail_geometry_len, frame_len; long montage_mode = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Ossls", &objvar, php_gmagickdraw_sc_entry, &tile_geometry, &tile_geometry_len, &thumbnail_geometry, &thumbnail_geometry_len, &montage_mode, &frame, &frame_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); internd = Z_GMAGICKDRAW_OBJ_P(objvar); tmp_wand = MagickMontageImage(intern->magick_wand, internd->drawing_wand, tile_geometry, thumbnail_geometry, montage_mode, frame); if (tmp_wand == NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Montage image failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::morphImages(int number_frames) Method morphs a set of images. Both the image pixels and size are linearly interpolated to give the appearance of a meta-morphosis from one image to the next. */ PHP_METHOD(Gmagick, morphimages) { MagickWand *tmp_wand; php_gmagick_object *intern, *intern_return; long frames; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &frames) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickMorphImages(intern->magick_wand, frames); if (!tmp_wand) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Morphing images failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::mosaicImages() Inlays an image sequence to form a single coherent picture. It returns a wand with each image in the sequence composited at the location defined by the page offset of the image. */ PHP_METHOD(Gmagick, mosaicimages) { MagickWand *tmp_wand = NULL; php_gmagick_object *intern, *intern_return; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); tmp_wand = MagickMosaicImages(intern->magick_wand); if (!tmp_wand) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Mosaic image failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ PHP_METHOD(Gmagick, setimageattribute) { php_gmagick_object *intern; char *key, *attribute; size_t key_len, attribute_len; unsigned int status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &key, &key_len, &attribute, &attribute_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageAttribute(intern->magick_wand, key, attribute); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image attribute" TSRMLS_CC); return; } RETURN_TRUE; } /* {{{ proto bool Gmagick::setImageColormapColor(int index, GmagickPixel color) Sets the color of the specified colormap index */ PHP_METHOD(Gmagick, setimagecolormapcolor) { php_gmagick_object *intern; zval *param; long index; unsigned int status; //PixelWand *color_wand; php_gmagickpixel_object *color; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz", &index, ¶m) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, color, GMAGICK_CLASS); status = MagickSetImageColormapColor(intern->magick_wand, index, color->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image color map color" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ #ifdef HAVE_GMAGICK_SET_IMAGE_GRAVITY /* {{{ proto bool Gmagick::setImageGravity(int GRAVITY) Sets the image gravity */ PHP_METHOD(Gmagick, setimagegravity) { php_gmagick_object *intern; unsigned int status; long gravity; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gravity) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageGravity(intern->magick_wand, gravity); if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image gravity" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ #endif /* {{{ proto bool Gmagick::setImageMatteColor(GmagickPixel matte) Sets the image matte color. */ PHP_METHOD(Gmagick, setimagemattecolor) { zval *param; php_gmagick_object *intern; unsigned int status; php_gmagickpixel_object *color; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, color, GMAGICK_CLASS); status = MagickSetImageMatteColor(intern->magick_wand, color->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image matte color" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::setImageVirtualPixelMethod(int method) Sets the image virtual pixel method. */ PHP_METHOD(Gmagick, setimagevirtualpixelmethod) { php_gmagick_object *intern; long virtual_pixel; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &virtual_pixel) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); MagickSetImageVirtualPixelMethod(intern->magick_wand, virtual_pixel); RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::shaveImage(int columns, int rows) Shaves pixels from the image edges. It allocates the memory necessary for the new Image structure and returns a pointer to the new image. */ PHP_METHOD(Gmagick, shaveimage) { php_gmagick_object *intern; long columns, rows; unsigned int status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &columns, &rows) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickShaveImage(intern->magick_wand, columns, rows); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to shave image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto Gmagick Gmagick::steganoImage(Gmagick watermark_wand, int offset) Hides a digital watermark within the image. Recover the hidden watermark later to prove that the authenticity of an image. Offset defines the start position within the image to hide the watermark. */ PHP_METHOD(Gmagick, steganoimage) { zval *objvar; php_gmagick_object *intern, *intern_second, *intern_return; long offset; MagickWand *tmp_wand; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Ol", &objvar, php_gmagick_sc_entry, &offset) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); intern_second = Z_GMAGICK_OBJ_P(objvar); if (php_gmagick_ensure_not_empty (intern_second->magick_wand) == 0) return; tmp_wand = MagickSteganoImage(intern->magick_wand, intern_second->magick_wand, offset); if (!tmp_wand) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Stegano image failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::stereoImage(Gmagick offset_wand) Composites two images and produces a single image that is the composite of a left and right image of a stereo pair */ PHP_METHOD(Gmagick, stereoimage) { MagickWand *tmp_wand; zval *magick_object; php_gmagick_object *intern, *intern_second, *intern_return; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &magick_object, php_gmagick_sc_entry) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); intern_second = Z_GMAGICK_OBJ_P(magick_object); if (php_gmagick_ensure_not_empty (intern_second->magick_wand) == 0) return; tmp_wand = MagickStereoImage(intern->magick_wand, intern_second->magick_wand); if (tmp_wand == NULL) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Stereo image failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, tmp_wand); return; } /* }}} */ /* {{{ proto Gmagick Gmagick::transformimage(string crop, string geometry ) Comfortability method for crop and resize */ PHP_METHOD(Gmagick, transformimage) { char *crop, *geometry; size_t crop_len, geometry_len; MagickWand *transformed; php_gmagick_object *intern, *intern_return; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &crop, &crop_len, &geometry, &geometry_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); transformed = MagickTransformImage(intern->magick_wand, crop, geometry); if (!transformed) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Transforming image failed" TSRMLS_CC); return; } object_init_ex(return_value, php_gmagick_sc_entry); intern_return = Z_GMAGICK_OBJ_P(return_value); GMAGICK_REPLACE_MAGICKWAND(intern_return, transformed); return; } /* }}} */ /* {{{ proto bool Gmagick::waveImage(float amplitude, float length ) Adds wave filter to the image. */ PHP_METHOD(Gmagick, waveimage) { double amplitude, wave_length; php_gmagick_object *intern; unsigned int status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dd", &litude, &wave_length) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickWaveImage(intern->magick_wand, amplitude, wave_length); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to wave image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::whiteThresholdImage(GmagickPixel threshold) Is like ThresholdImage() but force all pixels above the threshold into white while leaving all pixels below the threshold unchanged. */ PHP_METHOD(Gmagick, whitethresholdimage) { php_gmagick_object *intern; zval *param; unsigned int status; php_gmagickpixel_object *color; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", ¶m) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); GMAGICK_CAST_PARAMETER_TO_COLOR(param, color, GMAGICK_CLASS); status = MagickWhiteThresholdImage(intern->magick_wand, color->pixel_wand); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to white threshold image" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto array Gmagick::getimageboundingbox(float fuzz) MagickGetImageBoundingBox() obtains the crop bounding box required to remove a solid-color border from the image. Color quantums which differ less than the fuzz setting are considered to be the same. If a border is not detected, then the the original image dimensions are returned. The crop bounding box estimation uses the same algorithm as MagickTrimImage(). */ PHP_METHOD(Gmagick, getimageboundingbox) { php_gmagick_object *intern; double fuzz; MagickBool status; unsigned long width, height; long x, y; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &fuzz) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickGetImageBoundingBox(intern->magick_wand, fuzz, &width, &height, &x, &y); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image channel depth"); } array_init(return_value); add_assoc_double(return_value, "width", width); add_assoc_double(return_value, "height", height); add_assoc_double(return_value, "x", x); add_assoc_double(return_value, "y", y); } /* }}} */ /* {{{ proto float Gmagick::getimagefuzz() MagickGetImageFuzz() returns the color comparison fuzz factor. Colors closer than the fuzz factor are considered to be the same when comparing colors. Note that some other functions such as MagickColorFloodfillImage() implicitly set this value. */ PHP_METHOD(Gmagick, getimagefuzz) { php_gmagick_object *intern; double fuzz; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); fuzz = MagickGetImageFuzz(intern->magick_wand); RETURN_DOUBLE(fuzz); } /* }}} */ /* {{{ proto int Gmagick::getimagesavedtype() MagickGetImageSavedType() gets the image type that will be used when the image is saved. This may be different to the current image type, returned by MagickGetImageType(). IMGTYPE_* */ PHP_METHOD(Gmagick, getimagesavedtype) { php_gmagick_object *intern; ImageType type; ZEND_PARSE_PARAMETERS_NONE(); intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); type = MagickGetImageSavedType(intern->magick_wand); RETURN_LONG(type); } /* }}} */ #if !defined(MagickSetDepth) unsigned int MagickSetDepth(MagickWand *wand,const size_t depth); #endif //!defined(MagickSetDepth) /* {{{ proto Gmagick Gmagick::setDepth(int depth) MagickSetDepth() sets the sample depth to be used when reading from a raw image or a format which requires that the depth be specified in advance by the user. */ PHP_METHOD(Gmagick, setdepth) { php_gmagick_object *intern; long depth; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &depth) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetDepth(intern->magick_wand, depth); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set depth"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto Gmagick Gmagick::setImageFuzz(float fuzz) MagickSetImageFuzz() sets the color comparison fuzz factor. Colors closer than the fuzz factor are considered to be the same when comparing colors. Note that some other functions such as MagickColorFloodfillImage() implicitly set this value. */ PHP_METHOD(Gmagick, setimagefuzz) { php_gmagick_object *intern; double fuzz; MagickBool status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &fuzz) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); status = MagickSetImageFuzz(intern->magick_wand, fuzz); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set image channel depth"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto bool Gmagick::setimageoption(string format, string key, string value) MagickSetImageOption() associates one or options with a particular image format (.e.g MagickSetImageOption(wand,"jpeg","preserve-settings","true"). "jpeg","preserve-settings","true"). */ PHP_METHOD(Gmagick, setimageoption) { php_gmagick_object *intern; char *format, *key, *value; size_t format_len, key_len, value_len; unsigned int status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &format, &format_len, &key, &key_len, &value, &value_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetImageOption(intern->magick_wand, format, key, value); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set format" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::setimagesavedtype(int type) MagickSetImageSavedType() sets the image type that will be used when the image is saved. */ PHP_METHOD(Gmagick, setimagesavedtype) { php_gmagick_object *intern; long type; unsigned int status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &type) == FAILURE) { return; } //TODO - check type is known? intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetImageSavedType(intern->magick_wand, type); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set format" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::setFormat(string format) Sets the format of the Gmagick object. unsigned int MagickSetFormat( MagickWand *wand, const char *format ); MagickSetFormat() sets the file or blob format (e.g. "BMP") to be used when a file or blob is read. Usually this is not necessary because GraphicsMagick is able to auto-detect the format based on the file header (or the file extension), but some formats do not use a unique header or the selection may be ambigious. Use MagickSetImageFormat() to set the format to be used when a file or blob is to be written. */ PHP_METHOD(Gmagick, setformat) { php_gmagick_object *intern; char *format; size_t format_len; unsigned int status; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &format, &format_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetFormat(intern->magick_wand, format); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set format" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::setresolutionunits(int RESOLUTION_TYPE) MagickSetResolutionUnits() sets the resolution units of the magick wand. It should be used in conjunction with MagickSetResolution(). This method works both before and after an image has been read. Also see MagickSetImageUnits() which specifies the units which apply to the image resolution setting after an image has been read. */ PHP_METHOD(Gmagick, setresolutionunits) { php_gmagick_object *intern; unsigned int status; int resolution_type; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &resolution_type) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); status = MagickSetResolutionUnits(intern->magick_wand, resolution_type); /* No magick is going to happen */ if (status == MagickFalse) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to set resolution" TSRMLS_CC); return; } RETURN_TRUE; } /* }}} */ /* {{{ proto bool Gmagick::writeImageFile(resource $handle[, string $format]) Writes image to an open filehandle. Optional parameter format defines the format the file is stored with */ PHP_METHOD(Gmagick, writeimagefile) { php_gmagick_object *intern; zval *zstream; php_stream *stream; zend_bool result; char *format = NULL; size_t format_len; char *orig_name = NULL, *buffer; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s!", &zstream, &format, &format_len) == FAILURE) { return; } intern = Z_GMAGICK_OBJ_P(getThis()); GMAGICK_CHECK_NOT_EMPTY(intern->magick_wand, 1, 1); // Get the current name if (format) { orig_name = MagickGetImageFilename(intern->magick_wand); spprintf (&buffer, 0, "%s:", format); MagickSetImageFilename (intern->magick_wand, buffer); efree (buffer); } php_stream_from_zval(stream, zstream); result = php_gmagick_stream_handler(intern, stream, GmagickWriteImageFile TSRMLS_CC); /* Restore the original name after write */ if (orig_name) { MagickSetImageFilename(intern->magick_wand, orig_name); MagickRelinquishMemory(orig_name); } if (result == 0) { if (!EG(exception)) { GMAGICK_THROW_GMAGICK_EXCEPTION(intern->magick_wand, "Unable to write image to the filehandle" TSRMLS_CC); return; } return; } RETURN_TRUE; } /* }}} */ gmagick-2.0.6RC1/gmagickpixel_methods.c0000644000175000017500000002530414011267775016524 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #include "php_gmagick.h" #include "php_gmagick_macros.h" #include "php_gmagick_helpers.h" /* {{{ GmagickPixel GmagickPixel::__construct([string color]) Constructs a new GmagickPixel object */ PHP_METHOD(GmagickPixel, __construct) { php_gmagickpixel_object *internp; MagickBool status; // Graphicmagick's boolean type char *color_name = NULL; size_t color_name_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &color_name, &color_name_len) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); /* If color was given as parameter, set it here.*/ if (color_name != NULL && internp->pixel_wand != NULL) { status = PixelSetColor(internp->pixel_wand, color_name); if(status == MagickFalse) { GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(internp->pixel_wand, "Unable to construct GmagickPixel"); } } RETURN_TRUE; } /* }}} */ /* {{{ proto GmagickPixel GmagickPixel::setColor(string color) Sets the color of the pixel */ PHP_METHOD(GmagickPixel, setcolor) { php_gmagickpixel_object *internp; char *color_name; size_t color_name_len; MagickBool status; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &color_name, &color_name_len) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); status = PixelSetColor(internp->pixel_wand, color_name); if(status == MagickFalse) { GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(internp->pixel_wand, "Unable to set GmagickPixel color"); } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto GmagickPixel GmagickPixel::setColorCount(int colorCount) Sets the color count associated with this color. */ PHP_METHOD(GmagickPixel, setcolorcount) { php_gmagickpixel_object *internp; zend_long color_count; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &color_count) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); PixelSetColorCount(internp->pixel_wand, color_count); GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto array|string GmagickPixel::getColor([boolean as_array = false, normalise_array = false]) Returns the color of the pixel */ PHP_METHOD(GmagickPixel, getcolor) { php_gmagickpixel_object *internp; zend_bool as_array = 0, normalise_array = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|bb", &as_array, &normalise_array) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); if (!as_array) { char *buffer, *color_string; int len; color_string = PixelGetColorAsString(internp->pixel_wand); len = spprintf(&buffer, 50, "rgb(%s)", color_string); GMAGICK_FREE_MEMORY(char *, color_string); RETVAL_STRINGL(buffer, len); efree(buffer); return; } else { array_init(return_value); if (normalise_array == 1) { add_assoc_double(return_value, "r", PixelGetRed(internp->pixel_wand)); add_assoc_double(return_value, "g", PixelGetGreen(internp->pixel_wand)); add_assoc_double(return_value, "b", PixelGetBlue(internp->pixel_wand)); } else { double red, green, blue; red = PixelGetRed(internp->pixel_wand ) * 255; green = PixelGetGreen(internp->pixel_wand ) * 255; blue = PixelGetBlue(internp->pixel_wand ) * 255; add_assoc_long(return_value, "r", (int)(red > 0.0 ? red + 0.5 : red - 0.5)); add_assoc_long(return_value, "g", (int)(green > 0.0 ? green + 0.5 : green - 0.5)); add_assoc_long(return_value, "b", (int)(blue > 0.0 ? blue + 0.5 : blue - 0.5)); } return; } } /* }}} */ /* {{{ proto int GmagickPixel::getColorCount() Returns the color count associated with this color. */ PHP_METHOD(GmagickPixel, getcolorcount) { php_gmagickpixel_object *internp; zend_long color_count; ZEND_PARSE_PARAMETERS_NONE(); internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); color_count = PixelGetColorCount(internp->pixel_wand); RETVAL_LONG(color_count); } /* }}} */ /* {{{ proto float GmagickPixel::getColorValue(int color ) Gets the normalized color of the GmagickPixel. */ PHP_METHOD(GmagickPixel, getcolorvalue) { php_gmagickpixel_object *internp; zend_long color; double color_value = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &color) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); switch (color) { case GMAGICK_COLOR_BLACK: color_value = PixelGetBlack(internp->pixel_wand); break; case GMAGICK_COLOR_BLUE: color_value = PixelGetBlue(internp->pixel_wand); break; case GMAGICK_COLOR_CYAN: color_value = PixelGetCyan(internp->pixel_wand); break; case GMAGICK_COLOR_GREEN: color_value = PixelGetGreen(internp->pixel_wand); break; case GMAGICK_COLOR_RED: color_value = PixelGetRed(internp->pixel_wand); break; case GMAGICK_COLOR_YELLOW: color_value = PixelGetYellow(internp->pixel_wand); break; case GMAGICK_COLOR_MAGENTA: color_value = PixelGetMagenta(internp->pixel_wand); break; case GMAGICK_COLOR_OPACITY: color_value = PixelGetOpacity(internp->pixel_wand); break; default: GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(internp->pixel_wand, "Unknown color type"); break; } RETVAL_DOUBLE(color_value); } /* }}} */ /* {{{ proto GmagickPixel GmagickPixel::setColorValue(int color, float value ) Sets the normalized color of the GmagickPixel. */ PHP_METHOD(GmagickPixel, setcolorvalue) { php_gmagickpixel_object *internp; zend_long color; double color_value; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld", &color, &color_value) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); switch (color) { case GMAGICK_COLOR_BLACK: PixelSetBlack(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_BLUE: PixelSetBlue(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_CYAN: PixelSetCyan(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_GREEN: PixelSetGreen(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_RED: PixelSetRed(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_YELLOW: PixelSetYellow(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_MAGENTA: PixelSetMagenta(internp->pixel_wand, color_value); break; case GMAGICK_COLOR_OPACITY: PixelSetOpacity(internp->pixel_wand, color_value); break; default: GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(internp->pixel_wand, "Unknown color type"); break; } GMAGICK_CHAIN_METHOD; } /* }}} */ /* {{{ proto int GmagickPixel::getColorValueQuantum(int color ) Gets the quantum color of the GmagickPixel. */ PHP_METHOD(GmagickPixel, getcolorvaluequantum) { php_gmagickpixel_object *internp; zend_long color_quantum; Quantum color_value_quantum = 0; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &color_quantum) == FAILURE) { return; } internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); switch (color_quantum) { case GMAGICK_COLOR_BLACK: color_value_quantum = PixelGetBlackQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_BLUE: color_value_quantum = PixelGetBlueQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_CYAN: color_value_quantum = PixelGetCyanQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_GREEN: color_value_quantum = PixelGetGreenQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_RED: color_value_quantum = PixelGetRedQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_YELLOW: color_value_quantum = PixelGetYellowQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_MAGENTA: color_value_quantum = PixelGetMagentaQuantum(internp->pixel_wand); break; case GMAGICK_COLOR_OPACITY: color_value_quantum = PixelGetOpacityQuantum(internp->pixel_wand); break; default: zend_throw_exception_ex(php_gmagickpixel_exception_class_entry, 2 TSRMLS_CC, "Unknown color type: " ZEND_LONG_FMT, color_quantum); RETURN_NULL(); } RETVAL_LONG(color_value_quantum); } /* }}} */ /* {{{ proto GmagickPixel GmagickPixel::setColorValueQuantum(int color, float value) Sets the normalized color quantum of the GmagickPixel. */ PHP_METHOD(GmagickPixel, setcolorvaluequantum) { php_gmagickpixel_object *internp; zend_long color_quantum; double color_value_quantum_input; Quantum color_value_quantum; /* Parse parameters given to function */ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld", &color_quantum, &color_value_quantum_input) == FAILURE) { return; } // Possible truncation? color_value_quantum = color_value_quantum_input; internp = Z_GMAGICKPIXEL_OBJ_P(getThis()); switch (color_quantum) { case GMAGICK_COLOR_BLACK: PixelSetBlackQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_BLUE: PixelSetBlueQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_CYAN: PixelSetCyanQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_GREEN: PixelSetGreenQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_RED: PixelSetRedQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_YELLOW: PixelSetYellowQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_MAGENTA: PixelSetMagentaQuantum(internp->pixel_wand, color_value_quantum); break; case GMAGICK_COLOR_OPACITY: PixelSetOpacityQuantum(internp->pixel_wand, color_value_quantum); break; default: zend_throw_exception_ex(php_gmagickpixel_exception_class_entry, 2 TSRMLS_CC, "Unknown color type: " ZEND_LONG_FMT, color_quantum); RETURN_NULL(); } GMAGICK_CHAIN_METHOD; } /* }}} */ gmagick-2.0.6RC1/php_gmagick.h0000644000175000017500000004633214011267775014617 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #ifndef HAVE_PHP_GMAGICK_H #define HAVE_PHP_GMAGICK_H /* Define Extension Properties */ #define PHP_GMAGICK_EXTNAME "gmagick" #define PHP_GMAGICK_VERSION "2.0.6RC1" #define PHP_GMAGICK_EXTNUM 00001 #define MAX_BUFFER_SIZE 1024 /* Include GraphicsMagick header */ #include #include #if defined(PHP_WIN32) && !defined(ssize_t) /* XXX actually wand_api.h should be included after php.h, ssize_t were there with much more probability. */ # ifdef _WIN64 typedef __int64 ssize_t; # else typedef long ssize_t; # endif #endif #include /* Include some required php headers */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef ZTS #include "TSRM.h" #endif #include "php.h" #include "php_ini.h" #include "Zend/zend_exceptions.h" #include "Zend/zend_interfaces.h" #include "ext/standard/php_string.h" #include "ext/standard/info.h" #include "ext/standard/php_filestat.h" #if HAVE_OMP_PAUSE_RESOURCE_ALL #include #endif /* backward compat macros */ #ifndef TSRMLS_CC #define TSRMLS_FETCH() #define TSRMLS_CC #define TSRMLS_DC #define TSRMLS_D #define TSRMLS_C #endif #ifndef IS_MIXED # define IS_MIXED 0 #endif #ifndef ZEND_PARSE_PARAMETERS_NONE #define ZEND_PARSE_PARAMETERS_NONE() \ ZEND_PARSE_PARAMETERS_START(0, 0) \ ZEND_PARSE_PARAMETERS_END() #endif #ifndef ZEND_ARG_INFO_WITH_DEFAULT_VALUE #define ZEND_ARG_INFO_WITH_DEFAULT_VALUE(pass_by_ref, name, default_value) \ ZEND_ARG_INFO(pass_by_ref, name) #endif #if PHP_VERSION_ID < 70200 #undef ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX #define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) \ static const zend_internal_arg_info name[] = { \ { (const char*)(zend_uintptr_t)(required_num_args), ( #class_name ), 0, return_reference, allow_null, 0 }, #endif #ifndef ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX # define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) \ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) #endif #ifndef ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX # define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(name, return_reference, num_args, type) \ ZEND_BEGIN_ARG_INFO_EX(name, 0, return_reference, num_args) #endif #ifndef ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX # define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(name, return_reference, required_num_args, class_name, type) \ ZEND_BEGIN_ARG_INFO_EX(name, 0, return_reference, required_num_args) #endif #ifndef ZEND_ARG_TYPE_MASK # define ZEND_ARG_TYPE_MASK(pass_by_ref, name, type_mask, default_value) \ ZEND_ARG_TYPE_INFO(pass_by_ref, name, 0, 0) #endif #ifndef ZEND_ARG_OBJ_TYPE_MASK # define ZEND_ARG_OBJ_TYPE_MASK(pass_by_ref, name, class_name, type_mask, default_value) \ ZEND_ARG_TYPE_INFO(pass_by_ref, name, 0, 0) #endif #ifndef ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE # define ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(pass_by_ref, name, type_hint, allow_null, default_value) \ ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) #endif #if GMAGICK_LIB_MASK >= 1003018 #define GMAGICK_HAVE_SET_IMAGE_PAGE 1 #endif #if GMAGICK_LIB_MASK >= 1003020 #define HAVE_GMAGICK_SET_IMAGE_GRAVITY 1 #endif /* Objects */ typedef struct _php_gmagick_object { MagickWand *magick_wand; int next_out_of_bound; zend_object zo; } php_gmagick_object; /* Structure for GmagickDraw object. */ typedef struct _php_gmagickdraw_object { DrawingWand *drawing_wand; zend_object zo; } php_gmagickdraw_object; typedef struct _php_gmagickpixel_object { PixelWand *pixel_wand; zend_object zo; } php_gmagickpixel_object; /* Globals, needed for the ini settings */ ZEND_BEGIN_MODULE_GLOBALS(gmagick) zend_long shutdown_sleep_count; ZEND_END_MODULE_GLOBALS(gmagick) #ifdef ZTS # define GMAGICK_G(v) TSRMG(gmagick_globals_id, zend_gmagick_globals *, v) #else # define GMAGICK_G(v) (gmagick_globals.v) #endif ZEND_EXTERN_MODULE_GLOBALS(gmagick) extern zend_module_entry gmagick_module_entry; #define phpext_gmagick_ptr &gmagick_module_entry /* Colors */ #define GMAGICK_COLOR_BLACK 11 #define GMAGICK_COLOR_BLUE 12 #define GMAGICK_COLOR_CYAN 13 #define GMAGICK_COLOR_GREEN 14 #define GMAGICK_COLOR_RED 15 #define GMAGICK_COLOR_YELLOW 16 #define GMAGICK_COLOR_MAGENTA 17 #define GMAGICK_COLOR_OPACITY 18 #define GMAGICK_COLOR_ALPHA 19 #define GMAGICK_COLOR_FUZZ 20 /* Internal constants */ #define GMAGICK_READ_IMAGE 1 #define GMAGICK_WRITE_IMAGE 2 /* Class enum */ #define GMAGICK_CLASS 1 #define GMAGICKDRAW_CLASS 2 #define GMAGICKPIXEL_CLASS 3 /* Free filename constants */ #define GMAGICK_DONT_FREE_FILENAME 0 #define GMAGICK_FREE_FILENAME 1 /* Read / write constants */ #define GMAGICK_READ_WRITE_NO_ERROR 0 #define GMAGICK_READ_WRITE_SAFE_MODE_ERROR 1 #define GMAGICK_READ_WRITE_OPEN_BASEDIR_ERROR 2 #define GMAGICK_READ_WRITE_UNDERLYING_LIBRARY 3 #define GMAGICK_READ_WRITE_PERMISSION_DENIED 4 #define GMAGICK_READ_WRITE_FILENAME_TOO_LONG 5 #define GMAGICK_READ_WRITE_PATH_DOES_NOT_EXIST 6 #ifndef DefaultChannels # define DefaultChannels (AllChannels &~ OpacityChannel) #endif /* Class entries */ extern zend_class_entry *php_gmagick_sc_entry; extern zend_class_entry *php_gmagickdraw_sc_entry; extern zend_class_entry *php_gmagickpixel_sc_entry; extern zend_class_entry *php_gmagick_exception_class_entry; extern zend_class_entry *php_gmagickdraw_exception_class_entry; extern zend_class_entry *php_gmagickpixel_exception_class_entry; /* Forward declarations */ PHP_METHOD(gmagick, __construct); PHP_METHOD(gmagick, __tostring); PHP_METHOD(gmagick, readimage); PHP_METHOD(gmagick, writeimage); PHP_METHOD(gmagick, resizeimage); PHP_METHOD(gmagick, thumbnailimage); PHP_METHOD(gmagick, clear); PHP_METHOD(gmagick, cropimage); PHP_METHOD(gmagick, cropthumbnailimage); PHP_METHOD(gmagick, compositeimage); PHP_METHOD(gmagick, drawimage); PHP_METHOD(gmagick, addimage); PHP_METHOD(gmagick, addnoiseimage); PHP_METHOD(gmagick, annotateimage); PHP_METHOD(gmagick, blurimage); PHP_METHOD(gmagick, borderimage); PHP_METHOD(gmagick, thresholdimage); PHP_METHOD(gmagick, charcoalimage); PHP_METHOD(gmagick, chopimage); PHP_METHOD(gmagick, coalesceimages); PHP_METHOD(gmagick, commentimage); PHP_METHOD(gmagick, current); PHP_METHOD(gmagick, cyclecolormapimage); PHP_METHOD(gmagick, deconstructimages); PHP_METHOD(gmagick, despeckleimage); PHP_METHOD(gmagick, destroy); PHP_METHOD(gmagick, edgeimage); PHP_METHOD(gmagick, embossimage); PHP_METHOD(gmagick, enhanceimage); PHP_METHOD(gmagick, equalizeimage); PHP_METHOD(gmagick, flattenimages); PHP_METHOD(gmagick, flipimage); PHP_METHOD(gmagick, flopimage); PHP_METHOD(gmagick, frameimage); PHP_METHOD(gmagick, gammaimage); PHP_METHOD(gmagick, getcopyright); PHP_METHOD(gmagick, getfilename); PHP_METHOD(gmagick, getimagebackgroundcolor); PHP_METHOD(gmagick, getimageblob); PHP_METHOD(gmagick, getimagesblob); PHP_METHOD(gmagick, setimagebackgroundcolor); PHP_METHOD(gmagick, getimageblueprimary); PHP_METHOD(gmagick, getimagebordercolor); PHP_METHOD(gmagick, getimagechanneldepth); PHP_METHOD(gmagick, setimageblueprimary); PHP_METHOD(gmagick, setimagebordercolor); PHP_METHOD(gmagick, setimagechanneldepth); PHP_METHOD(gmagick, setimagecolorspace); PHP_METHOD(gmagick, setinterlacescheme); PHP_METHOD(gmagick, getimagecolorspace); PHP_METHOD(gmagick, getimagecolors); PHP_METHOD(gmagick, getimagecompose); PHP_METHOD(gmagick, getimagedelay); PHP_METHOD(gmagick, getimagedepth); PHP_METHOD(gmagick, getnumberimages); PHP_METHOD(gmagick, setimagecompose); PHP_METHOD(gmagick, setimagecompression); PHP_METHOD(gmagick, getimagecompression); PHP_METHOD(gmagick, setimagedelay); PHP_METHOD(gmagick, setimagedepth); PHP_METHOD(gmagick, getimagedispose); PHP_METHOD(gmagick, setimagedispose); PHP_METHOD(gmagick, setfilename); PHP_METHOD(gmagick, getimage); PHP_METHOD(gmagick, setimage); PHP_METHOD(gmagick, getimageextrema); PHP_METHOD(gmagick, getimagefilename); PHP_METHOD(gmagick, setimagefilename); PHP_METHOD(gmagick, getimageformat); PHP_METHOD(gmagick, setimageformat); #if GMAGICK_LIB_MASK >= 1003007 PHP_METHOD(gmagick, setcompressionquality); #endif PHP_METHOD(gmagick, getimagegamma); PHP_METHOD(gmagick, setimagegamma); PHP_METHOD(gmagick, getimagegreenprimary); PHP_METHOD(gmagick, setimagegreenprimary); PHP_METHOD(gmagick, getimageheight); PHP_METHOD(gmagick, getimagehistogram); PHP_METHOD(gmagick, getimageindex); PHP_METHOD(gmagick, setimageindex); PHP_METHOD(gmagick, getimageinterlacescheme); PHP_METHOD(gmagick, setimageinterlacescheme); PHP_METHOD(gmagick, getimageiterations); #if GMAGICK_LIB_MASK >= 1005000 PHP_METHOD(gmagick, getimagematte); #endif PHP_METHOD(gmagick, getimagegeometry); PHP_METHOD(gmagick, getimagemattecolor); #ifdef GMAGICK_HAVE_SET_IMAGE_PAGE PHP_METHOD(gmagick, getimagepage); #endif // GMAGICK_HAVE_SET_IMAGE_PAGE PHP_METHOD(gmagick, getimageprofile); PHP_METHOD(gmagick, getimageredprimary); PHP_METHOD(gmagick, getimagerenderingintent); PHP_METHOD(gmagick, getimageresolution); PHP_METHOD(gmagick, getimagescene); PHP_METHOD(gmagick, getimagesignature); PHP_METHOD(gmagick, getimagetype); PHP_METHOD(gmagick, setimageiterations); PHP_METHOD(gmagick, setimageprofile); PHP_METHOD(gmagick, setimageredprimary); PHP_METHOD(gmagick, setimagerenderingintent); PHP_METHOD(gmagick, setimageresolution); PHP_METHOD(gmagick, setresolution); PHP_METHOD(gmagick, setimagescene); PHP_METHOD(gmagick, setimagetype); #ifdef GMAGICK_HAVE_SET_IMAGE_PAGE PHP_METHOD(gmagick, setimagepage); #endif PHP_METHOD(gmagick, getimageunits); PHP_METHOD(gmagick, getimagewhitepoint); PHP_METHOD(gmagick, getimagewidth); PHP_METHOD(gmagick, getpackagename); PHP_METHOD(gmagick, getquantumdepth); PHP_METHOD(gmagick, getreleasedate); PHP_METHOD(gmagick, getresourcelimit); PHP_METHOD(gmagick, setresourcelimit); PHP_METHOD(gmagick, getsamplingfactors); PHP_METHOD(gmagick, getsize); PHP_METHOD(gmagick, setimageunits); PHP_METHOD(gmagick, setimagewhitepoint); PHP_METHOD(gmagick, setsamplingfactors); PHP_METHOD(gmagick, setsize); PHP_METHOD(gmagick, getversion); PHP_METHOD(gmagick, hasnextimage); PHP_METHOD(gmagick, haspreviousimage); PHP_METHOD(gmagick, implodeimage); PHP_METHOD(gmagick, levelimage); PHP_METHOD(gmagick, labelimage); PHP_METHOD(gmagick, magnifyimage); PHP_METHOD(gmagick, mapimage); PHP_METHOD(gmagick, medianfilterimage); PHP_METHOD(gmagick, negateimage); PHP_METHOD(gmagick, minifyimage); PHP_METHOD(gmagick, modulateimage); PHP_METHOD(gmagick, motionblurimage); PHP_METHOD(gmagick, nextimage); PHP_METHOD(gmagick, newimage); PHP_METHOD(gmagick, normalizeimage); PHP_METHOD(gmagick, oilpaintimage); PHP_METHOD(gmagick, previousimage); PHP_METHOD(gmagick, profileimage); PHP_METHOD(gmagick, quantizeimage); PHP_METHOD(gmagick, quantizeimages); PHP_METHOD(gmagick, queryfonts); PHP_METHOD(gmagick, queryfontmetrics); PHP_METHOD(gmagick, queryformats); PHP_METHOD(gmagick, radialblurimage); PHP_METHOD(gmagick, raiseimage); PHP_METHOD(gmagick, readimageblob); PHP_METHOD(gmagick, readimagefile); PHP_METHOD(gmagick, reducenoiseimage); PHP_METHOD(gmagick, removeimage); PHP_METHOD(gmagick, removeimageprofile); PHP_METHOD(gmagick, resampleimage); PHP_METHOD(gmagick, rollimage); PHP_METHOD(gmagick, rotateimage); PHP_METHOD(gmagick, scaleimage); PHP_METHOD(gmagick, separateimagechannel); PHP_METHOD(gmagick, sharpenimage); PHP_METHOD(gmagick, shearimage); PHP_METHOD(gmagick, solarizeimage); PHP_METHOD(gmagick, spreadimage); PHP_METHOD(gmagick, stripimage); PHP_METHOD(gmagick, swirlimage); PHP_METHOD(gmagick, trimimage); PHP_METHOD(gmagick, sampleimage); PHP_METHOD(gmagick, cloneimage); PHP_METHOD(gmagick, appendimages); PHP_METHOD(gmagick, unsharpmaskimage); PHP_METHOD(gmagick, adaptivethresholdimage); PHP_METHOD(gmagick, affinetransformimage); PHP_METHOD(gmagick, averageimages); PHP_METHOD(gmagick, blackthresholdimage); PHP_METHOD(gmagick, colordecisionlist); PHP_METHOD(gmagick, clipimage); PHP_METHOD(gmagick, clippathimage); PHP_METHOD(gmagick, colorfloodfillimage); PHP_METHOD(gmagick, colorizeimage); PHP_METHOD(gmagick, compareimagechannels); PHP_METHOD(gmagick, compareimages); PHP_METHOD(gmagick, contrastimage); PHP_METHOD(gmagick, convolveimage); PHP_METHOD(gmagick, extentimage); PHP_METHOD(gmagick, fximage); PHP_METHOD(gmagick, getimageattribute); PHP_METHOD(gmagick, getimagechannelextrema); PHP_METHOD(gmagick, getimagechannelmean); PHP_METHOD(gmagick, getimagecolormapcolor); #ifdef HAVE_GMAGICK_SET_IMAGE_GRAVITY PHP_METHOD(gmagick, getimagegravity); #endif // #ifdef HAVE_GMAGICK_SET_IMAGE_GRAVITY PHP_METHOD(gmagick, getimagevirtualpixelmethod); PHP_METHOD(gmagick, haldclutimage); PHP_METHOD(gmagick, mattefloodfillimage); PHP_METHOD(gmagick, montageimage); PHP_METHOD(gmagick, morphimages); PHP_METHOD(gmagick, mosaicimages); PHP_METHOD(gmagick, setimageattribute); PHP_METHOD(gmagick, setimagecolormapcolor); #ifdef HAVE_GMAGICK_SET_IMAGE_GRAVITY PHP_METHOD(gmagick, setimagegravity); #endif //HAVE_GMAGICK_SET_IMAGE_GRAVITY PHP_METHOD(gmagick, setimagemattecolor); PHP_METHOD(gmagick, setimagevirtualpixelmethod); PHP_METHOD(gmagick, shaveimage); PHP_METHOD(gmagick, steganoimage); PHP_METHOD(gmagick, stereoimage); PHP_METHOD(gmagick, waveimage); PHP_METHOD(gmagick, whitethresholdimage); PHP_METHOD(gmagick, getimageboundingbox); PHP_METHOD(gmagick, getimagefuzz); PHP_METHOD(gmagick, getimagesavedtype); PHP_METHOD(gmagick, setdepth); PHP_METHOD(gmagick, setformat); PHP_METHOD(gmagick, setimagefuzz); PHP_METHOD(gmagick, setimageoption); PHP_METHOD(gmagick, setimagesavedtype); PHP_METHOD(gmagick, setresolutionunits); PHP_METHOD(gmagick, setformat); PHP_METHOD(gmagick, writeimagefile); /* draw */ PHP_METHOD(gmagickdraw, setstrokecolor); PHP_METHOD(gmagickdraw, setstrokewidth); PHP_METHOD(gmagickdraw, setfillcolor); PHP_METHOD(gmagickdraw, setgravity); PHP_METHOD(gmagickdraw, getgravity); PHP_METHOD(gmagickdraw, ellipse); PHP_METHOD(gmagickdraw, annotate); PHP_METHOD(gmagickdraw, affine); PHP_METHOD(gmagickdraw, arc); PHP_METHOD(gmagickdraw, bezier); PHP_METHOD(gmagickdraw, getfillcolor); PHP_METHOD(gmagickdraw, getfillopacity); PHP_METHOD(gmagickdraw, getfont); PHP_METHOD(gmagickdraw, getfontsize); PHP_METHOD(gmagickdraw, getfontstyle); PHP_METHOD(gmagickdraw, getfontweight); PHP_METHOD(gmagickdraw, getstrokeopacity); PHP_METHOD(gmagickdraw, getstrokecolor); PHP_METHOD(gmagickdraw, getstrokewidth); PHP_METHOD(gmagickdraw, gettextdecoration); PHP_METHOD(gmagickdraw, gettextencoding); PHP_METHOD(gmagickdraw, line); PHP_METHOD(gmagickdraw, point); PHP_METHOD(gmagickdraw, polygon); PHP_METHOD(gmagickdraw, polyline); PHP_METHOD(gmagickdraw, rectangle); PHP_METHOD(gmagickdraw, rotate); PHP_METHOD(gmagickdraw, roundrectangle); PHP_METHOD(gmagickdraw, scale); PHP_METHOD(gmagickdraw, setfillopacity); PHP_METHOD(gmagickdraw, setfont); PHP_METHOD(gmagickdraw, setfontsize); PHP_METHOD(gmagickdraw, setfontstyle); PHP_METHOD(gmagickdraw, setfontweight); PHP_METHOD(gmagickdraw, setstrokeopacity); PHP_METHOD(gmagickdraw, settextdecoration); PHP_METHOD(gmagickdraw, settextencoding); PHP_METHOD(gmagickdraw, setstrokeantialias); PHP_METHOD(gmagickdraw, setstrokedashoffset); PHP_METHOD(gmagickdraw, setstrokelinecap); PHP_METHOD(gmagickdraw, setstrokelinejoin); PHP_METHOD(gmagickdraw, setstrokemiterlimit); PHP_METHOD(gmagickdraw, getstrokeantialias); PHP_METHOD(gmagickdraw, getstrokedashoffset); PHP_METHOD(gmagickdraw, getstrokelinecap); PHP_METHOD(gmagickdraw, getstrokelinejoin); PHP_METHOD(gmagickdraw, getstrokemiterlimit); #if GMAGICK_LIB_MASK >= 1003000 PHP_METHOD(gmagickdraw, setstrokedasharray); PHP_METHOD(gmagickdraw, getstrokedasharray); #endif PHP_METHOD(gmagickdraw, circle); PHP_METHOD(gmagickdraw, getclippath); PHP_METHOD(gmagickdraw, setclippath); PHP_METHOD(gmagickdraw, getcliprule); PHP_METHOD(gmagickdraw, setcliprule); PHP_METHOD(gmagickdraw, getclipunits); PHP_METHOD(gmagickdraw, setclipunits); PHP_METHOD(gmagickdraw, color); PHP_METHOD(gmagickdraw, comment); PHP_METHOD(gmagickdraw, setfillpatternurl); PHP_METHOD(gmagickdraw, getfillrule); PHP_METHOD(gmagickdraw, setfillrule); PHP_METHOD(gmagickdraw, getfontfamily); PHP_METHOD(gmagickdraw, setfontfamily); PHP_METHOD(gmagickdraw, getfontstretch); PHP_METHOD(gmagickdraw, setfontstretch); //PHP_METHOD(gmagickdraw, composite); PHP_METHOD(gmagickdraw, pathclose); PHP_METHOD(gmagickdraw, pathcurvetoabsolute); PHP_METHOD(gmagickdraw, pathcurvetorelative); PHP_METHOD(gmagickdraw, pathcurvetoquadraticbezierabsolute); PHP_METHOD(gmagickdraw, pathcurvetoquadraticbezierrelative); PHP_METHOD(gmagickdraw, pathcurvetoquadraticbeziersmoothabsolute); PHP_METHOD(gmagickdraw, pathcurvetoquadraticbeziersmoothrelative); PHP_METHOD(gmagickdraw, pathcurvetosmoothabsolute); PHP_METHOD(gmagickdraw, pathcurvetosmoothrelative); PHP_METHOD(gmagickdraw, pathellipticarcabsolute); PHP_METHOD(gmagickdraw, pathellipticarcrelative); PHP_METHOD(gmagickdraw, pathmovetoabsolute); PHP_METHOD(gmagickdraw, pathmovetorelative); PHP_METHOD(gmagickdraw, pathstart); PHP_METHOD(gmagickdraw, popclippath); PHP_METHOD(gmagickdraw, popdefs); PHP_METHOD(gmagickdraw, poppattern); PHP_METHOD(gmagickdraw, pushclippath); PHP_METHOD(gmagickdraw, pushdefs); PHP_METHOD(gmagickdraw, pushpattern); PHP_METHOD(gmagickdraw, skewx); PHP_METHOD(gmagickdraw, skewy); PHP_METHOD(gmagickdraw, setstrokepatternurl); PHP_METHOD(gmagickdraw, gettextantialias); PHP_METHOD(gmagickdraw, settextantialias); PHP_METHOD(gmagickdraw, gettextundercolor); PHP_METHOD(gmagickdraw, settextundercolor); PHP_METHOD(gmagickdraw, translate); PHP_METHOD(gmagickdraw, setviewbox); PHP_METHOD(gmagickdraw, pathfinish); PHP_METHOD(gmagickdraw, pathlinetoabsolute); PHP_METHOD(gmagickdraw, pathlinetorelative); PHP_METHOD(gmagickdraw, pathlinetohorizontalabsolute); PHP_METHOD(gmagickdraw, pathlinetohorizontalrelative); PHP_METHOD(gmagickdraw, pathlinetoverticalabsolute); PHP_METHOD(gmagickdraw, pathlinetoverticalrelative); PHP_METHOD(gmagickdraw, popGraphicContext); PHP_METHOD(gmagickdraw, pushGraphicContext); /* pixel */ PHP_METHOD(gmagickpixel, __construct); PHP_METHOD(gmagickpixel, setcolor); PHP_METHOD(gmagickpixel, getcolor); PHP_METHOD(gmagickpixel, getcolorcount); PHP_METHOD(gmagickpixel, setcolorcount); PHP_METHOD(gmagickpixel, getcolorvalue); PHP_METHOD(gmagickpixel, setcolorvalue); PHP_METHOD(gmagickpixel, getcolorvaluequantum); PHP_METHOD(gmagickpixel, setcolorvaluequantum); #endif gmagick-2.0.6RC1/gmagick_arginfo.h0000644000175000017500000026436014011267775015460 0ustar vitovito/* This is a generated file, edit the .stub.php file instead. * Stub hash: acb0515dcece6de92a056f9d795e0f168fd9c6da */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Gmagick___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filename, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick___tostring, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_readimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_read arginfo_class_Gmagick_readimage ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_readimagefile, 0, 1, Gmagick, 0) ZEND_ARG_INFO(0, filehandle) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filename, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_writeimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, all_frames, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_write arginfo_class_Gmagick_writeimage ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_writeimagefile, 0, 1, Gmagick, 0) ZEND_ARG_INFO(0, filehandle) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getversion, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_annotateimage, 0, 5, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, drawing_wand, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, angle, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_blurimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, radius, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sigma, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #if GMAGICK_LIB_MASK >= 1003007 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setcompressionquality, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, quality, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #if GMAGICK_LIB_MASK >= 1005000 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimagematte, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #if defined(GMAGICK_HAVE_SET_IMAGE_PAGE) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimagepage, 0, 4, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() #endif #if defined(GMAGICK_HAVE_SET_IMAGE_PAGE) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimagepage, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_thumbnailimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fit, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, legacy, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_resizeimage, 0, 4, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, filter, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, blur, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fit, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, legacy, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_clear, 0, 0, Gmagick, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_cropimage, 0, 4, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_cropthumbnailimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_coalesceimages arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_compositeimage, 0, 4, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, source, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, COMPOSE, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_addimage, 0, 1, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, source, Gmagick, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_addnoiseimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, noise_type, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_borderimage, 0, 3, Gmagick, 0) ZEND_ARG_OBJ_TYPE_MASK(0, color, GmagickPixel, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_thresholdimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, threshold, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, channel, IS_LONG, 0, "CHANNEL_DEFAULT") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_charcoalimage arginfo_class_Gmagick_blurimage #define arginfo_class_Gmagick_chopimage arginfo_class_Gmagick_cropimage ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_commentimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, comment, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_current arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_cyclecolormapimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, displace, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_deconstructimages arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_despeckleimage arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_destroy, 0, 0, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_drawimage, 0, 1, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, drawing_wand, GmagickDraw, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_edgeimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, radius, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_embossimage arginfo_class_Gmagick_blurimage #define arginfo_class_Gmagick_enhanceimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_equalizeimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_flipimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_flopimage arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_frameimage, 0, 5, Gmagick, 0) ZEND_ARG_OBJ_TYPE_MASK(0, color, GmagickPixel, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, inner_bevel, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, outer_bevel, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_gammaimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, gamma, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getcopyright arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getfilename arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getimage arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, replace, Gmagick, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_getimagebackgroundcolor, 0, 0, GmagickPixel, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimageblob arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getimagesblob arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getimageblueprimary arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimagebordercolor arginfo_class_Gmagick_getimagebackgroundcolor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimagechanneldepth, 0, 1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, channel_type, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimagecolors, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagecolorspace arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagecompose arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagedelay arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagedepth arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getnumberimages arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagedispose arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimageextrema arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimagefilename arginfo_class_Gmagick___tostring ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimagegamma, 0, 0, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagegreenprimary arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimageheight arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagehistogram arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimageindex arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimageinterlacescheme arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimageiterations arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagemattecolor arginfo_class_Gmagick_getimagebackgroundcolor ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimageprofile, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimageredprimary arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimagerenderingintent arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimageresolution arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimagescene arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagesignature arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getimagetype arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimageunits arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getimagewhitepoint arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getimagewidth arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_getpackagename arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getquantumdepth arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getreleasedate arginfo_class_Gmagick___tostring #define arginfo_class_Gmagick_getsamplingfactors arginfo_class_Gmagick_getversion #define arginfo_class_Gmagick_getsize arginfo_class_Gmagick_getversion ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setinterlacescheme, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, interlace_scheme, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_hasnextimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_haspreviousimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_implodeimage arginfo_class_Gmagick_edgeimage ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_labelimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, label, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_levelimage, 0, 3, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, blackPoint, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, gamma, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, whitePoint, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, channel, IS_LONG, 0, "Gmagick::CHANNEL_DEFAULT") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_magnifyimage arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_mapimage, 0, 2, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, gmagick, gmagick, 0) ZEND_ARG_TYPE_INFO(0, dither, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_medianfilterimage, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, radius, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_minifyimage arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_modulateimage, 0, 3, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, brightness, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, saturation, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, hue, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_motionblurimage, 0, 3, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, radius, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sigma, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, angle, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_newimage, 0, 3, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, background, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, format, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_nextimage arginfo_class_Gmagick_destroy #define arginfo_class_Gmagick_normalizeimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_oilpaintimage arginfo_class_Gmagick_edgeimage #define arginfo_class_Gmagick_previousimage arginfo_class_Gmagick_destroy ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_profileimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, profile, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_quantizeimage, 0, 5, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, numColors, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, colorspace, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, treeDepth, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, dither, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, measureError, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_quantizeimages arginfo_class_Gmagick_quantizeimage ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_queryfontmetrics, 0, 2, IS_ARRAY, 0) ZEND_ARG_OBJ_INFO(0, draw, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_queryfonts, 0, 0, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pattern, IS_STRING, 0, "\"*\"") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_queryformats arginfo_class_Gmagick_queryfonts ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_radialblurimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, angle, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, channel, IS_LONG, 0, "Gmagick::CHANNEL_DEFAULT") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_raiseimage, 0, 5, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, raise, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_readimageblob, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, imageContents, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filename, IS_STRING, 1, "null") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_reducenoiseimage arginfo_class_Gmagick_edgeimage #define arginfo_class_Gmagick_removeimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_removeimageprofile arginfo_class_Gmagick_getimageprofile ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_resampleimage, 0, 4, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, xResolution, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, yResolution, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, filter, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, blur, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_rollimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_rotateimage, 0, 2, Gmagick, 0) ZEND_ARG_OBJ_TYPE_MASK(0, background, GmagickPixel, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, degrees, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_scaleimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fit, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_separateimagechannel, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, channel, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_setfilename arginfo_class_Gmagick_readimage ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagebackgroundcolor, 0, 1, Gmagick, 0) ZEND_ARG_OBJ_TYPE_MASK(0, color, GmagickPixel, MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageblueprimary, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_setimagebordercolor arginfo_class_Gmagick_setimagebackgroundcolor ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagechanneldepth, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, channel, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, depth, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagecolorspace, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, colorspace, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagecompose, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, composite, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagecompression arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagecompression, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, compression, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagedelay, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, delay, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagedepth, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, depth, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagedispose, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, disposeType, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_setimagefilename arginfo_class_Gmagick_readimage #define arginfo_class_Gmagick_getimageformat arginfo_class_Gmagick___tostring ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageformat, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, imageFormat, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_setimagegamma arginfo_class_Gmagick_gammaimage #define arginfo_class_Gmagick_setimagegreenprimary arginfo_class_Gmagick_setimageblueprimary ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageindex, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageinterlacescheme, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, interlace, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageiterations, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, iterations, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_setimageprofile arginfo_class_Gmagick_profileimage #define arginfo_class_Gmagick_setimageredprimary arginfo_class_Gmagick_setimageblueprimary ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagerenderingintent, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, rendering_intent, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageresolution, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, xResolution, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, yResolution, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagescene, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, scene, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimagetype, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, imgType, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setimageunits, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, resolution, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_setimagewhitepoint arginfo_class_Gmagick_setimageblueprimary ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setsamplingfactors, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, factors, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_setsize, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, columns, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, rows, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_shearimage, 0, 3, Gmagick, 0) ZEND_ARG_OBJ_TYPE_MASK(0, background, GmagickPixel, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, xShear, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, yShear, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_solarizeimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, threshold, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_spreadimage arginfo_class_Gmagick_edgeimage #define arginfo_class_Gmagick_stripimage arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_swirlimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, degrees, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_trimimage, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, fuzz, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_blackthresholdimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_TYPE_MASK(0, threshold, GmagickPixel, MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_whitethresholdimage arginfo_class_Gmagick_blackthresholdimage ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_colordecisionlist, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, color_correction_collection, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_clipimage arginfo_class_Gmagick_destroy ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_clippathimage, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, pathname, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, inside, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_colorfloodfillimage, 0, 5, _IS_BOOL, 0) ZEND_ARG_INFO(0, fill) ZEND_ARG_TYPE_INFO(0, fuzz, IS_DOUBLE, 0) ZEND_ARG_OBJ_TYPE_MASK(0, bordercolor, GmagickPixel, MAY_BE_STRING, NULL) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_colorizeimage, 0, 2, _IS_BOOL, 0) ZEND_ARG_INFO(0, colorize) ZEND_ARG_OBJ_TYPE_MASK(0, opacity, GmagickPixel, MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_compareimagechannels, 0, 3, IS_ARRAY, 0) ZEND_ARG_OBJ_INFO(0, reference, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, channel, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, metric, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_compareimages, 0, 2, IS_ARRAY, 0) ZEND_ARG_OBJ_INFO(0, reference, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, metric, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_contrastimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, sharpen, _IS_BOOL, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_convolveimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, kernel, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_extentimage, 0, 4, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimageboundingbox, 0, 1, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, fuzz, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimageattribute, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimageattribute, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, attribute, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getimagechannelextrema, 0, 1, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, channel, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagechannelmean arginfo_class_Gmagick_getimagechannelextrema ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_getimagecolormapcolor, 0, 1, GmagickPixel, 0) ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimagecolormapcolor, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) ZEND_ARG_INFO(0, color) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagegravity arginfo_class_Gmagick_getimagecolors #if defined(HAVE_GMAGICK_SET_IMAGE_GRAVITY) ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimagegravity, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, gravity, IS_LONG, 0) ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimagemattecolor, 0, 1, _IS_BOOL, 0) ZEND_ARG_INFO(0, color) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagevirtualpixelmethod arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimagevirtualpixelmethod, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_haldclutimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, hald, Gmagick, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_mattefloodfillimage, 0, 5, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, alpha, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, fuzz, IS_DOUBLE, 0) ZEND_ARG_INFO(0, bordercolor) ZEND_ARG_TYPE_INFO(0, x, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, y, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_montageimage, 0, 5, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, drawing_wand, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, tile_geometry, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, thumbnail_geometry, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, frame, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_morphimages, 0, 1, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, frames, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_mosaicimages arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_shaveimage, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, columns, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, rows, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_steganoimage, 0, 2, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, watermark_wand, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_stereoimage, 0, 1, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, object_wand, Gmagick, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_transformimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, crop, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, geometry, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_waveimage, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, amplitude, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, length, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagefuzz arginfo_class_Gmagick_getimagegamma #define arginfo_class_Gmagick_setimagefuzz arginfo_class_Gmagick_trimimage #define arginfo_class_Gmagick_getimagesavedtype arginfo_class_Gmagick_getimagecolors #define arginfo_class_Gmagick_setdepth arginfo_class_Gmagick_setimagedepth ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimageoption, 0, 3, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setimagesavedtype, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setformat, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setresolutionunits, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, resolution_type, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_getimagegeometry arginfo_class_Gmagick_getversion ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_getresourcelimit, 0, 1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setresourcelimit, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_negateimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, gray, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, channel, IS_LONG, 0, "CHANNEL_DEFAULT") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_sharpenimage, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, radius, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sigma, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_textureimage, 0, 1, Gmagick, 0) ZEND_ARG_OBJ_INFO(0, texture_wand, Gmagick, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_flattenimages arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_sampleimage, 0, 2, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, cols, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, rows, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fit, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, legacy, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_cloneimage arginfo_class_Gmagick_clear #define arginfo_class_Gmagick_appendimages arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Gmagick_unsharpmaskimage, 0, 4, Gmagick, 0) ZEND_ARG_TYPE_INFO(0, radius, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sigma, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, amount, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, threshold, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_setresolution, 0, 4, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, x_resolution, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y_resolution, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, amount, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, threshold, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_adaptivethresholdimage, 0, 3, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, height, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Gmagick_affinetransformimage, 0, 1, _IS_BOOL, 0) ZEND_ARG_OBJ_INFO(0, drawing_wand, GmagickDraw, 0) ZEND_END_ARG_INFO() #define arginfo_class_Gmagick_averageimages arginfo_class_Gmagick_clear ZEND_BEGIN_ARG_INFO_EX(arginfo_class_GmagickPixel___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, color, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_GmagickPixel_getcolor, 0, 0, MAY_BE_STRING|MAY_BE_ARRAY) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, as_array, _IS_BOOL, 0, "false") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, normalize_array, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickPixel_setcolor, 0, 1, GmagickPixel, 0) ZEND_ARG_TYPE_INFO(0, color, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickPixel_getcolorcount arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickPixel_setcolorcount, 0, 1, GmagickPixel, 0) ZEND_ARG_TYPE_INFO(0, color_count, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_GmagickPixel_getcolorvalue, 0, 1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickPixel_setcolorvalue, 0, 2, GmagickPixel, 0) ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_GmagickPixel_getcolorvaluequantum, 0, 1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, color, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickPixel_setcolorvaluequantum arginfo_class_GmagickPixel_setcolorvalue ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokecolor, 0, 1, GmagickDraw, 0) ZEND_ARG_OBJ_TYPE_MASK(0, color, GmagickPixel, MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokewidth, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, width, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_ellipse, 0, 6, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, ox, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, oy, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, rx, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ry, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, start, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, end, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_annotate, 0, 3, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, text, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_GmagickDraw_affine, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, affine, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_arc, 0, 6, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, sx, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sy, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ex, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ey, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sd, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ed, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_bezier, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, coordinates, IS_ARRAY, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getfillcolor arginfo_class_Gmagick_getimagebackgroundcolor #define arginfo_class_GmagickDraw_getfillopacity arginfo_class_Gmagick_getimagegamma ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_GmagickDraw_getfont, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getfontfamily arginfo_class_GmagickDraw_getfont ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfontfamily, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, font_family, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getfontsize arginfo_class_Gmagick_getimagegamma #define arginfo_class_GmagickDraw_getfontstyle arginfo_class_Gmagick_getimagecolors #define arginfo_class_GmagickDraw_getfontweight arginfo_class_Gmagick_getimagecolors #define arginfo_class_GmagickDraw_getstrokeopacity arginfo_class_Gmagick_getimagegamma #define arginfo_class_GmagickDraw_getstrokecolor arginfo_class_Gmagick_getimagebackgroundcolor #define arginfo_class_GmagickDraw_getstrokewidth arginfo_class_Gmagick_getimagegamma #define arginfo_class_GmagickDraw_gettextdecoration arginfo_class_Gmagick_getimagecolors #define arginfo_class_GmagickDraw_gettextencoding arginfo_class_GmagickDraw_getfont ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_line, 0, 4, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, sx, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, sy, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ex, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ey, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_point, 0, 2, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_polygon arginfo_class_GmagickDraw_bezier #define arginfo_class_GmagickDraw_polyline arginfo_class_GmagickDraw_bezier ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_rectangle, 0, 4, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x2, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y2, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_rotate, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, degrees, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_roundrectangle, 0, 6, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x2, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y2, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, rx, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ry, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_scale arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_setfillcolor arginfo_class_GmagickDraw_setstrokecolor ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfillopacity, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, fill_opacity, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfont, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, font, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfontsize, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, pointsize, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfontstyle, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, style, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfontweight, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, weight, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokeopacity, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, stroke_opacity, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_settextdecoration, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, decoration, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_settextencoding, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, encoding, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getgravity arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setgravity, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, gravity, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getstrokeantialias arginfo_class_Gmagick_destroy ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokeantialias, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, antialias, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getstrokedashoffset arginfo_class_Gmagick_getimagegamma ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokedashoffset, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getstrokelinecap arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokelinecap, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, linecap, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getstrokelinejoin arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokelinejoin, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, linejoin, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getstrokemiterlimit arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokemiterlimit, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, miterlimit, IS_LONG, 0) ZEND_END_ARG_INFO() #if GMAGICK_LIB_MASK >= 1003000 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_GmagickDraw_getstrokedasharray, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() #endif #if GMAGICK_LIB_MASK >= 1003000 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokedasharray, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, dash_array, IS_ARRAY, 0) ZEND_END_ARG_INFO() #endif ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_circle, 0, 4, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, ox, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, oy, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, px, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, py, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getclippath arginfo_class_GmagickDraw_getfont ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setclippath, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, clip_mask, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getcliprule arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setcliprule, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, fill_rule, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getclipunits arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setclipunits, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, clip_units, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_color, 0, 3, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, paint_method, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_comment, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, comment, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfillpatternurl, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, fill_url, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getfillrule arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setfillrule, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, fill_rule, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_getfontstretch arginfo_class_Gmagick_getimagecolors ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_GmagickDraw_setfontstretch, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, font_stretch, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pathclose, 0, 0, GmagickDraw, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pathcurvetoabsolute, 0, 6, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x2, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y2, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_pathcurvetorelative arginfo_class_GmagickDraw_pathcurvetoabsolute ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pathcurvetoquadraticbezierabsolute, 0, 4, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y1, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_pathcurvetoquadraticbezierrelative arginfo_class_GmagickDraw_pathcurvetoquadraticbezierabsolute #define arginfo_class_GmagickDraw_pathcurvetoquadraticbeziersmoothabsolute arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_pathcurvetoquadraticbeziersmoothrelative arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_pathcurvetosmoothabsolute arginfo_class_GmagickDraw_pathcurvetoquadraticbezierabsolute #define arginfo_class_GmagickDraw_pathcurvetosmoothrelative arginfo_class_GmagickDraw_pathcurvetoquadraticbezierabsolute ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pathellipticarcabsolute, 0, 7, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, rx, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, ry, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, x_axis_rotation, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, large_arc_flag, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, sweep_flag, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_pathellipticarcrelative arginfo_class_GmagickDraw_pathellipticarcabsolute #define arginfo_class_GmagickDraw_pathmovetoabsolute arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_pathmovetorelative arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_pathlinetoabsolute arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_pathlinetorelative arginfo_class_GmagickDraw_point ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pathlinetohorizontalabsolute, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_pathlinetohorizontalrelative arginfo_class_GmagickDraw_pathlinetohorizontalabsolute ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pathlinetoverticalabsolute, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_pathlinetoverticalrelative arginfo_class_GmagickDraw_pathlinetoverticalabsolute #define arginfo_class_GmagickDraw_pathstart arginfo_class_GmagickDraw_pathclose #define arginfo_class_GmagickDraw_pathfinish arginfo_class_GmagickDraw_pathclose #define arginfo_class_GmagickDraw_popclippath arginfo_class_GmagickDraw_pathclose #define arginfo_class_GmagickDraw_popdefs arginfo_class_GmagickDraw_pathclose #define arginfo_class_GmagickDraw_pushdefs arginfo_class_GmagickDraw_pathclose #define arginfo_class_GmagickDraw_poppattern arginfo_class_GmagickDraw_pathclose ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pushpattern, 0, 5, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, pattern_id, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, x, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, y, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, width, IS_DOUBLE, 0) ZEND_ARG_TYPE_INFO(0, height, IS_DOUBLE, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_pushclippath, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, clip_mask_id, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_skewx arginfo_class_GmagickDraw_rotate #define arginfo_class_GmagickDraw_skewy arginfo_class_GmagickDraw_rotate ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_GmagickDraw_setstrokepatternurl, 0, 1, GmagickDraw, 0) ZEND_ARG_TYPE_INFO(0, stroke_url, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_gettextantialias arginfo_class_Gmagick_destroy ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_GmagickDraw_settextantialias, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, anti_alias, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_class_GmagickDraw_gettextundercolor arginfo_class_Gmagick_getimagebackgroundcolor #define arginfo_class_GmagickDraw_settextundercolor arginfo_class_GmagickDraw_setstrokecolor #define arginfo_class_GmagickDraw_translate arginfo_class_GmagickDraw_point #define arginfo_class_GmagickDraw_setviewbox arginfo_class_GmagickDraw_rectangle #define arginfo_class_GmagickDraw_popGraphicContext arginfo_class_GmagickDraw_pathclose #define arginfo_class_GmagickDraw_pushGraphicContext arginfo_class_GmagickDraw_pathclose ZEND_METHOD(Gmagick, __construct); ZEND_METHOD(Gmagick, __tostring); ZEND_METHOD(Gmagick, readimage); ZEND_METHOD(Gmagick, readimagefile); ZEND_METHOD(Gmagick, writeimage); ZEND_METHOD(Gmagick, writeimagefile); ZEND_METHOD(Gmagick, getversion); ZEND_METHOD(Gmagick, annotateimage); ZEND_METHOD(Gmagick, blurimage); #if GMAGICK_LIB_MASK >= 1003007 ZEND_METHOD(Gmagick, setcompressionquality); #endif #if GMAGICK_LIB_MASK >= 1005000 ZEND_METHOD(Gmagick, getimagematte); #endif #if defined(GMAGICK_HAVE_SET_IMAGE_PAGE) ZEND_METHOD(Gmagick, setimagepage); #endif #if defined(GMAGICK_HAVE_SET_IMAGE_PAGE) ZEND_METHOD(Gmagick, getimagepage); #endif ZEND_METHOD(Gmagick, thumbnailimage); ZEND_METHOD(Gmagick, resizeimage); ZEND_METHOD(Gmagick, clear); ZEND_METHOD(Gmagick, cropimage); ZEND_METHOD(Gmagick, cropthumbnailimage); ZEND_METHOD(Gmagick, coalesceimages); ZEND_METHOD(Gmagick, compositeimage); ZEND_METHOD(Gmagick, addimage); ZEND_METHOD(Gmagick, addnoiseimage); ZEND_METHOD(Gmagick, borderimage); ZEND_METHOD(Gmagick, thresholdimage); ZEND_METHOD(Gmagick, charcoalimage); ZEND_METHOD(Gmagick, chopimage); ZEND_METHOD(Gmagick, commentimage); ZEND_METHOD(Gmagick, current); ZEND_METHOD(Gmagick, cyclecolormapimage); ZEND_METHOD(Gmagick, deconstructimages); ZEND_METHOD(Gmagick, despeckleimage); ZEND_METHOD(Gmagick, destroy); ZEND_METHOD(Gmagick, drawimage); ZEND_METHOD(Gmagick, edgeimage); ZEND_METHOD(Gmagick, embossimage); ZEND_METHOD(Gmagick, enhanceimage); ZEND_METHOD(Gmagick, equalizeimage); ZEND_METHOD(Gmagick, flipimage); ZEND_METHOD(Gmagick, flopimage); ZEND_METHOD(Gmagick, frameimage); ZEND_METHOD(Gmagick, gammaimage); ZEND_METHOD(Gmagick, getcopyright); ZEND_METHOD(Gmagick, getfilename); ZEND_METHOD(Gmagick, getimage); ZEND_METHOD(Gmagick, setimage); ZEND_METHOD(Gmagick, getimagebackgroundcolor); ZEND_METHOD(Gmagick, getimageblob); ZEND_METHOD(Gmagick, getimagesblob); ZEND_METHOD(Gmagick, getimageblueprimary); ZEND_METHOD(Gmagick, getimagebordercolor); ZEND_METHOD(Gmagick, getimagechanneldepth); ZEND_METHOD(Gmagick, getimagecolors); ZEND_METHOD(Gmagick, getimagecolorspace); ZEND_METHOD(Gmagick, getimagecompose); ZEND_METHOD(Gmagick, getimagedelay); ZEND_METHOD(Gmagick, getimagedepth); ZEND_METHOD(Gmagick, getnumberimages); ZEND_METHOD(Gmagick, getimagedispose); ZEND_METHOD(Gmagick, getimageextrema); ZEND_METHOD(Gmagick, getimagefilename); ZEND_METHOD(Gmagick, getimagegamma); ZEND_METHOD(Gmagick, getimagegreenprimary); ZEND_METHOD(Gmagick, getimageheight); ZEND_METHOD(Gmagick, getimagehistogram); ZEND_METHOD(Gmagick, getimageindex); ZEND_METHOD(Gmagick, getimageinterlacescheme); ZEND_METHOD(Gmagick, getimageiterations); ZEND_METHOD(Gmagick, getimagemattecolor); ZEND_METHOD(Gmagick, getimageprofile); ZEND_METHOD(Gmagick, getimageredprimary); ZEND_METHOD(Gmagick, getimagerenderingintent); ZEND_METHOD(Gmagick, getimageresolution); ZEND_METHOD(Gmagick, getimagescene); ZEND_METHOD(Gmagick, getimagesignature); ZEND_METHOD(Gmagick, getimagetype); ZEND_METHOD(Gmagick, getimageunits); ZEND_METHOD(Gmagick, getimagewhitepoint); ZEND_METHOD(Gmagick, getimagewidth); ZEND_METHOD(Gmagick, getpackagename); ZEND_METHOD(Gmagick, getquantumdepth); ZEND_METHOD(Gmagick, getreleasedate); ZEND_METHOD(Gmagick, getsamplingfactors); ZEND_METHOD(Gmagick, getsize); ZEND_METHOD(Gmagick, setinterlacescheme); ZEND_METHOD(Gmagick, hasnextimage); ZEND_METHOD(Gmagick, haspreviousimage); ZEND_METHOD(Gmagick, implodeimage); ZEND_METHOD(Gmagick, labelimage); ZEND_METHOD(Gmagick, levelimage); ZEND_METHOD(Gmagick, magnifyimage); ZEND_METHOD(Gmagick, mapimage); ZEND_METHOD(Gmagick, medianfilterimage); ZEND_METHOD(Gmagick, minifyimage); ZEND_METHOD(Gmagick, modulateimage); ZEND_METHOD(Gmagick, motionblurimage); ZEND_METHOD(Gmagick, newimage); ZEND_METHOD(Gmagick, nextimage); ZEND_METHOD(Gmagick, normalizeimage); ZEND_METHOD(Gmagick, oilpaintimage); ZEND_METHOD(Gmagick, previousimage); ZEND_METHOD(Gmagick, profileimage); ZEND_METHOD(Gmagick, quantizeimage); ZEND_METHOD(Gmagick, quantizeimages); ZEND_METHOD(Gmagick, queryfontmetrics); ZEND_METHOD(Gmagick, queryfonts); ZEND_METHOD(Gmagick, queryformats); ZEND_METHOD(Gmagick, radialblurimage); ZEND_METHOD(Gmagick, raiseimage); ZEND_METHOD(Gmagick, readimageblob); ZEND_METHOD(Gmagick, reducenoiseimage); ZEND_METHOD(Gmagick, removeimage); ZEND_METHOD(Gmagick, removeimageprofile); ZEND_METHOD(Gmagick, resampleimage); ZEND_METHOD(Gmagick, rollimage); ZEND_METHOD(Gmagick, rotateimage); ZEND_METHOD(Gmagick, scaleimage); ZEND_METHOD(Gmagick, separateimagechannel); ZEND_METHOD(Gmagick, setfilename); ZEND_METHOD(Gmagick, setimagebackgroundcolor); ZEND_METHOD(Gmagick, setimageblueprimary); ZEND_METHOD(Gmagick, setimagebordercolor); ZEND_METHOD(Gmagick, setimagechanneldepth); ZEND_METHOD(Gmagick, setimagecolorspace); ZEND_METHOD(Gmagick, setimagecompose); ZEND_METHOD(Gmagick, getimagecompression); ZEND_METHOD(Gmagick, setimagecompression); ZEND_METHOD(Gmagick, setimagedelay); ZEND_METHOD(Gmagick, setimagedepth); ZEND_METHOD(Gmagick, setimagedispose); ZEND_METHOD(Gmagick, setimagefilename); ZEND_METHOD(Gmagick, getimageformat); ZEND_METHOD(Gmagick, setimageformat); ZEND_METHOD(Gmagick, setimagegamma); ZEND_METHOD(Gmagick, setimagegreenprimary); ZEND_METHOD(Gmagick, setimageindex); ZEND_METHOD(Gmagick, setimageinterlacescheme); ZEND_METHOD(Gmagick, setimageiterations); ZEND_METHOD(Gmagick, setimageprofile); ZEND_METHOD(Gmagick, setimageredprimary); ZEND_METHOD(Gmagick, setimagerenderingintent); ZEND_METHOD(Gmagick, setimageresolution); ZEND_METHOD(Gmagick, setimagescene); ZEND_METHOD(Gmagick, setimagetype); ZEND_METHOD(Gmagick, setimageunits); ZEND_METHOD(Gmagick, setimagewhitepoint); ZEND_METHOD(Gmagick, setsamplingfactors); ZEND_METHOD(Gmagick, setsize); ZEND_METHOD(Gmagick, shearimage); ZEND_METHOD(Gmagick, solarizeimage); ZEND_METHOD(Gmagick, spreadimage); ZEND_METHOD(Gmagick, stripimage); ZEND_METHOD(Gmagick, swirlimage); ZEND_METHOD(Gmagick, trimimage); ZEND_METHOD(Gmagick, blackthresholdimage); ZEND_METHOD(Gmagick, whitethresholdimage); ZEND_METHOD(Gmagick, colordecisionlist); ZEND_METHOD(Gmagick, clipimage); ZEND_METHOD(Gmagick, clippathimage); ZEND_METHOD(Gmagick, colorfloodfillimage); ZEND_METHOD(Gmagick, colorizeimage); ZEND_METHOD(Gmagick, compareimagechannels); ZEND_METHOD(Gmagick, compareimages); ZEND_METHOD(Gmagick, contrastimage); ZEND_METHOD(Gmagick, convolveimage); ZEND_METHOD(Gmagick, extentimage); ZEND_METHOD(Gmagick, getimageboundingbox); ZEND_METHOD(Gmagick, getimageattribute); ZEND_METHOD(Gmagick, setimageattribute); ZEND_METHOD(Gmagick, getimagechannelextrema); ZEND_METHOD(Gmagick, getimagechannelmean); ZEND_METHOD(Gmagick, getimagecolormapcolor); ZEND_METHOD(Gmagick, setimagecolormapcolor); ZEND_METHOD(Gmagick, getimagegravity); #if defined(HAVE_GMAGICK_SET_IMAGE_GRAVITY) ZEND_METHOD(Gmagick, setimagegravity); #endif ZEND_METHOD(Gmagick, setimagemattecolor); ZEND_METHOD(Gmagick, getimagevirtualpixelmethod); ZEND_METHOD(Gmagick, setimagevirtualpixelmethod); ZEND_METHOD(Gmagick, haldclutimage); ZEND_METHOD(Gmagick, mattefloodfillimage); ZEND_METHOD(Gmagick, montageimage); ZEND_METHOD(Gmagick, morphimages); ZEND_METHOD(Gmagick, mosaicimages); ZEND_METHOD(Gmagick, shaveimage); ZEND_METHOD(Gmagick, steganoimage); ZEND_METHOD(Gmagick, stereoimage); ZEND_METHOD(Gmagick, transformimage); ZEND_METHOD(Gmagick, waveimage); ZEND_METHOD(Gmagick, getimagefuzz); ZEND_METHOD(Gmagick, setimagefuzz); ZEND_METHOD(Gmagick, getimagesavedtype); ZEND_METHOD(Gmagick, setdepth); ZEND_METHOD(Gmagick, setimageoption); ZEND_METHOD(Gmagick, setimagesavedtype); ZEND_METHOD(Gmagick, setformat); ZEND_METHOD(Gmagick, setresolutionunits); ZEND_METHOD(Gmagick, getimagegeometry); ZEND_METHOD(Gmagick, getresourcelimit); ZEND_METHOD(Gmagick, setresourcelimit); ZEND_METHOD(Gmagick, negateimage); ZEND_METHOD(Gmagick, sharpenimage); ZEND_METHOD(Gmagick, textureimage); ZEND_METHOD(Gmagick, flattenimages); ZEND_METHOD(Gmagick, sampleimage); ZEND_METHOD(Gmagick, cloneimage); ZEND_METHOD(Gmagick, appendimages); ZEND_METHOD(Gmagick, unsharpmaskimage); ZEND_METHOD(Gmagick, setresolution); ZEND_METHOD(Gmagick, adaptivethresholdimage); ZEND_METHOD(Gmagick, affinetransformimage); ZEND_METHOD(Gmagick, averageimages); ZEND_METHOD(GmagickPixel, __construct); ZEND_METHOD(GmagickPixel, getcolor); ZEND_METHOD(GmagickPixel, setcolor); ZEND_METHOD(GmagickPixel, getcolorcount); ZEND_METHOD(GmagickPixel, setcolorcount); ZEND_METHOD(GmagickPixel, getcolorvalue); ZEND_METHOD(GmagickPixel, setcolorvalue); ZEND_METHOD(GmagickPixel, getcolorvaluequantum); ZEND_METHOD(GmagickPixel, setcolorvaluequantum); ZEND_METHOD(GmagickDraw, setstrokecolor); ZEND_METHOD(GmagickDraw, setstrokewidth); ZEND_METHOD(GmagickDraw, ellipse); ZEND_METHOD(GmagickDraw, annotate); ZEND_METHOD(GmagickDraw, affine); ZEND_METHOD(GmagickDraw, arc); ZEND_METHOD(GmagickDraw, bezier); ZEND_METHOD(GmagickDraw, getfillcolor); ZEND_METHOD(GmagickDraw, getfillopacity); ZEND_METHOD(GmagickDraw, getfont); ZEND_METHOD(GmagickDraw, getfontfamily); ZEND_METHOD(GmagickDraw, setfontfamily); ZEND_METHOD(GmagickDraw, getfontsize); ZEND_METHOD(GmagickDraw, getfontstyle); ZEND_METHOD(GmagickDraw, getfontweight); ZEND_METHOD(GmagickDraw, getstrokeopacity); ZEND_METHOD(GmagickDraw, getstrokecolor); ZEND_METHOD(GmagickDraw, getstrokewidth); ZEND_METHOD(GmagickDraw, gettextdecoration); ZEND_METHOD(GmagickDraw, gettextencoding); ZEND_METHOD(GmagickDraw, line); ZEND_METHOD(GmagickDraw, point); ZEND_METHOD(GmagickDraw, polygon); ZEND_METHOD(GmagickDraw, polyline); ZEND_METHOD(GmagickDraw, rectangle); ZEND_METHOD(GmagickDraw, rotate); ZEND_METHOD(GmagickDraw, roundrectangle); ZEND_METHOD(GmagickDraw, scale); ZEND_METHOD(GmagickDraw, setfillcolor); ZEND_METHOD(GmagickDraw, setfillopacity); ZEND_METHOD(GmagickDraw, setfont); ZEND_METHOD(GmagickDraw, setfontsize); ZEND_METHOD(GmagickDraw, setfontstyle); ZEND_METHOD(GmagickDraw, setfontweight); ZEND_METHOD(GmagickDraw, setstrokeopacity); ZEND_METHOD(GmagickDraw, settextdecoration); ZEND_METHOD(GmagickDraw, settextencoding); ZEND_METHOD(GmagickDraw, getgravity); ZEND_METHOD(GmagickDraw, setgravity); ZEND_METHOD(GmagickDraw, getstrokeantialias); ZEND_METHOD(GmagickDraw, setstrokeantialias); ZEND_METHOD(GmagickDraw, getstrokedashoffset); ZEND_METHOD(GmagickDraw, setstrokedashoffset); ZEND_METHOD(GmagickDraw, getstrokelinecap); ZEND_METHOD(GmagickDraw, setstrokelinecap); ZEND_METHOD(GmagickDraw, getstrokelinejoin); ZEND_METHOD(GmagickDraw, setstrokelinejoin); ZEND_METHOD(GmagickDraw, getstrokemiterlimit); ZEND_METHOD(GmagickDraw, setstrokemiterlimit); #if GMAGICK_LIB_MASK >= 1003000 ZEND_METHOD(GmagickDraw, getstrokedasharray); #endif #if GMAGICK_LIB_MASK >= 1003000 ZEND_METHOD(GmagickDraw, setstrokedasharray); #endif ZEND_METHOD(GmagickDraw, circle); ZEND_METHOD(GmagickDraw, getclippath); ZEND_METHOD(GmagickDraw, setclippath); ZEND_METHOD(GmagickDraw, getcliprule); ZEND_METHOD(GmagickDraw, setcliprule); ZEND_METHOD(GmagickDraw, getclipunits); ZEND_METHOD(GmagickDraw, setclipunits); ZEND_METHOD(GmagickDraw, color); ZEND_METHOD(GmagickDraw, comment); ZEND_METHOD(GmagickDraw, setfillpatternurl); ZEND_METHOD(GmagickDraw, getfillrule); ZEND_METHOD(GmagickDraw, setfillrule); ZEND_METHOD(GmagickDraw, getfontstretch); ZEND_METHOD(GmagickDraw, setfontstretch); ZEND_METHOD(GmagickDraw, pathclose); ZEND_METHOD(GmagickDraw, pathcurvetoabsolute); ZEND_METHOD(GmagickDraw, pathcurvetorelative); ZEND_METHOD(GmagickDraw, pathcurvetoquadraticbezierabsolute); ZEND_METHOD(GmagickDraw, pathcurvetoquadraticbezierrelative); ZEND_METHOD(GmagickDraw, pathcurvetoquadraticbeziersmoothabsolute); ZEND_METHOD(GmagickDraw, pathcurvetoquadraticbeziersmoothrelative); ZEND_METHOD(GmagickDraw, pathcurvetosmoothabsolute); ZEND_METHOD(GmagickDraw, pathcurvetosmoothrelative); ZEND_METHOD(GmagickDraw, pathellipticarcabsolute); ZEND_METHOD(GmagickDraw, pathellipticarcrelative); ZEND_METHOD(GmagickDraw, pathmovetoabsolute); ZEND_METHOD(GmagickDraw, pathmovetorelative); ZEND_METHOD(GmagickDraw, pathlinetoabsolute); ZEND_METHOD(GmagickDraw, pathlinetorelative); ZEND_METHOD(GmagickDraw, pathlinetohorizontalabsolute); ZEND_METHOD(GmagickDraw, pathlinetohorizontalrelative); ZEND_METHOD(GmagickDraw, pathlinetoverticalabsolute); ZEND_METHOD(GmagickDraw, pathlinetoverticalrelative); ZEND_METHOD(GmagickDraw, pathstart); ZEND_METHOD(GmagickDraw, pathfinish); ZEND_METHOD(GmagickDraw, popclippath); ZEND_METHOD(GmagickDraw, popdefs); ZEND_METHOD(GmagickDraw, pushdefs); ZEND_METHOD(GmagickDraw, poppattern); ZEND_METHOD(GmagickDraw, pushpattern); ZEND_METHOD(GmagickDraw, pushclippath); ZEND_METHOD(GmagickDraw, skewx); ZEND_METHOD(GmagickDraw, skewy); ZEND_METHOD(GmagickDraw, setstrokepatternurl); ZEND_METHOD(GmagickDraw, gettextantialias); ZEND_METHOD(GmagickDraw, settextantialias); ZEND_METHOD(GmagickDraw, gettextundercolor); ZEND_METHOD(GmagickDraw, settextundercolor); ZEND_METHOD(GmagickDraw, translate); ZEND_METHOD(GmagickDraw, setviewbox); ZEND_METHOD(GmagickDraw, popGraphicContext); ZEND_METHOD(GmagickDraw, pushGraphicContext); static const zend_function_entry class_Gmagick_methods[] = { ZEND_ME(Gmagick, __construct, arginfo_class_Gmagick___construct, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, __tostring, arginfo_class_Gmagick___tostring, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, readimage, arginfo_class_Gmagick_readimage, ZEND_ACC_PUBLIC) ZEND_MALIAS(Gmagick, read, readimage, arginfo_class_Gmagick_read, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, readimagefile, arginfo_class_Gmagick_readimagefile, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, writeimage, arginfo_class_Gmagick_writeimage, ZEND_ACC_PUBLIC) ZEND_MALIAS(Gmagick, write, writeimage, arginfo_class_Gmagick_write, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, writeimagefile, arginfo_class_Gmagick_writeimagefile, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getversion, arginfo_class_Gmagick_getversion, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME(Gmagick, annotateimage, arginfo_class_Gmagick_annotateimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, blurimage, arginfo_class_Gmagick_blurimage, ZEND_ACC_PUBLIC) #if GMAGICK_LIB_MASK >= 1003007 ZEND_ME(Gmagick, setcompressionquality, arginfo_class_Gmagick_setcompressionquality, ZEND_ACC_PUBLIC) #endif #if GMAGICK_LIB_MASK >= 1005000 ZEND_ME(Gmagick, getimagematte, arginfo_class_Gmagick_getimagematte, ZEND_ACC_PUBLIC) #endif #if defined(GMAGICK_HAVE_SET_IMAGE_PAGE) ZEND_ME(Gmagick, setimagepage, arginfo_class_Gmagick_setimagepage, ZEND_ACC_PUBLIC) #endif #if defined(GMAGICK_HAVE_SET_IMAGE_PAGE) ZEND_ME(Gmagick, getimagepage, arginfo_class_Gmagick_getimagepage, ZEND_ACC_PUBLIC) #endif ZEND_ME(Gmagick, thumbnailimage, arginfo_class_Gmagick_thumbnailimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, resizeimage, arginfo_class_Gmagick_resizeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, clear, arginfo_class_Gmagick_clear, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, cropimage, arginfo_class_Gmagick_cropimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, cropthumbnailimage, arginfo_class_Gmagick_cropthumbnailimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, coalesceimages, arginfo_class_Gmagick_coalesceimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, compositeimage, arginfo_class_Gmagick_compositeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, addimage, arginfo_class_Gmagick_addimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, addnoiseimage, arginfo_class_Gmagick_addnoiseimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, borderimage, arginfo_class_Gmagick_borderimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, thresholdimage, arginfo_class_Gmagick_thresholdimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, charcoalimage, arginfo_class_Gmagick_charcoalimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, chopimage, arginfo_class_Gmagick_chopimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, commentimage, arginfo_class_Gmagick_commentimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, current, arginfo_class_Gmagick_current, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, cyclecolormapimage, arginfo_class_Gmagick_cyclecolormapimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, deconstructimages, arginfo_class_Gmagick_deconstructimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, despeckleimage, arginfo_class_Gmagick_despeckleimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, destroy, arginfo_class_Gmagick_destroy, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, drawimage, arginfo_class_Gmagick_drawimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, edgeimage, arginfo_class_Gmagick_edgeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, embossimage, arginfo_class_Gmagick_embossimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, enhanceimage, arginfo_class_Gmagick_enhanceimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, equalizeimage, arginfo_class_Gmagick_equalizeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, flipimage, arginfo_class_Gmagick_flipimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, flopimage, arginfo_class_Gmagick_flopimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, frameimage, arginfo_class_Gmagick_frameimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, gammaimage, arginfo_class_Gmagick_gammaimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getcopyright, arginfo_class_Gmagick_getcopyright, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getfilename, arginfo_class_Gmagick_getfilename, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimage, arginfo_class_Gmagick_getimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimage, arginfo_class_Gmagick_setimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagebackgroundcolor, arginfo_class_Gmagick_getimagebackgroundcolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageblob, arginfo_class_Gmagick_getimageblob, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagesblob, arginfo_class_Gmagick_getimagesblob, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageblueprimary, arginfo_class_Gmagick_getimageblueprimary, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagebordercolor, arginfo_class_Gmagick_getimagebordercolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagechanneldepth, arginfo_class_Gmagick_getimagechanneldepth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagecolors, arginfo_class_Gmagick_getimagecolors, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagecolorspace, arginfo_class_Gmagick_getimagecolorspace, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagecompose, arginfo_class_Gmagick_getimagecompose, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagedelay, arginfo_class_Gmagick_getimagedelay, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagedepth, arginfo_class_Gmagick_getimagedepth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getnumberimages, arginfo_class_Gmagick_getnumberimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagedispose, arginfo_class_Gmagick_getimagedispose, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageextrema, arginfo_class_Gmagick_getimageextrema, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagefilename, arginfo_class_Gmagick_getimagefilename, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagegamma, arginfo_class_Gmagick_getimagegamma, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagegreenprimary, arginfo_class_Gmagick_getimagegreenprimary, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageheight, arginfo_class_Gmagick_getimageheight, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagehistogram, arginfo_class_Gmagick_getimagehistogram, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageindex, arginfo_class_Gmagick_getimageindex, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageinterlacescheme, arginfo_class_Gmagick_getimageinterlacescheme, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageiterations, arginfo_class_Gmagick_getimageiterations, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagemattecolor, arginfo_class_Gmagick_getimagemattecolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageprofile, arginfo_class_Gmagick_getimageprofile, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageredprimary, arginfo_class_Gmagick_getimageredprimary, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagerenderingintent, arginfo_class_Gmagick_getimagerenderingintent, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageresolution, arginfo_class_Gmagick_getimageresolution, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagescene, arginfo_class_Gmagick_getimagescene, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagesignature, arginfo_class_Gmagick_getimagesignature, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagetype, arginfo_class_Gmagick_getimagetype, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageunits, arginfo_class_Gmagick_getimageunits, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagewhitepoint, arginfo_class_Gmagick_getimagewhitepoint, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagewidth, arginfo_class_Gmagick_getimagewidth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getpackagename, arginfo_class_Gmagick_getpackagename, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getquantumdepth, arginfo_class_Gmagick_getquantumdepth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getreleasedate, arginfo_class_Gmagick_getreleasedate, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getsamplingfactors, arginfo_class_Gmagick_getsamplingfactors, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getsize, arginfo_class_Gmagick_getsize, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setinterlacescheme, arginfo_class_Gmagick_setinterlacescheme, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, hasnextimage, arginfo_class_Gmagick_hasnextimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, haspreviousimage, arginfo_class_Gmagick_haspreviousimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, implodeimage, arginfo_class_Gmagick_implodeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, labelimage, arginfo_class_Gmagick_labelimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, levelimage, arginfo_class_Gmagick_levelimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, magnifyimage, arginfo_class_Gmagick_magnifyimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, mapimage, arginfo_class_Gmagick_mapimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, medianfilterimage, arginfo_class_Gmagick_medianfilterimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, minifyimage, arginfo_class_Gmagick_minifyimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, modulateimage, arginfo_class_Gmagick_modulateimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, motionblurimage, arginfo_class_Gmagick_motionblurimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, newimage, arginfo_class_Gmagick_newimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, nextimage, arginfo_class_Gmagick_nextimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, normalizeimage, arginfo_class_Gmagick_normalizeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, oilpaintimage, arginfo_class_Gmagick_oilpaintimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, previousimage, arginfo_class_Gmagick_previousimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, profileimage, arginfo_class_Gmagick_profileimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, quantizeimage, arginfo_class_Gmagick_quantizeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, quantizeimages, arginfo_class_Gmagick_quantizeimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, queryfontmetrics, arginfo_class_Gmagick_queryfontmetrics, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, queryfonts, arginfo_class_Gmagick_queryfonts, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, queryformats, arginfo_class_Gmagick_queryformats, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, radialblurimage, arginfo_class_Gmagick_radialblurimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, raiseimage, arginfo_class_Gmagick_raiseimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, readimageblob, arginfo_class_Gmagick_readimageblob, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, reducenoiseimage, arginfo_class_Gmagick_reducenoiseimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, removeimage, arginfo_class_Gmagick_removeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, removeimageprofile, arginfo_class_Gmagick_removeimageprofile, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, resampleimage, arginfo_class_Gmagick_resampleimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, rollimage, arginfo_class_Gmagick_rollimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, rotateimage, arginfo_class_Gmagick_rotateimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, scaleimage, arginfo_class_Gmagick_scaleimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, separateimagechannel, arginfo_class_Gmagick_separateimagechannel, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setfilename, arginfo_class_Gmagick_setfilename, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagebackgroundcolor, arginfo_class_Gmagick_setimagebackgroundcolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageblueprimary, arginfo_class_Gmagick_setimageblueprimary, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagebordercolor, arginfo_class_Gmagick_setimagebordercolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagechanneldepth, arginfo_class_Gmagick_setimagechanneldepth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagecolorspace, arginfo_class_Gmagick_setimagecolorspace, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagecompose, arginfo_class_Gmagick_setimagecompose, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagecompression, arginfo_class_Gmagick_getimagecompression, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagecompression, arginfo_class_Gmagick_setimagecompression, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagedelay, arginfo_class_Gmagick_setimagedelay, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagedepth, arginfo_class_Gmagick_setimagedepth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagedispose, arginfo_class_Gmagick_setimagedispose, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagefilename, arginfo_class_Gmagick_setimagefilename, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageformat, arginfo_class_Gmagick_getimageformat, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageformat, arginfo_class_Gmagick_setimageformat, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagegamma, arginfo_class_Gmagick_setimagegamma, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagegreenprimary, arginfo_class_Gmagick_setimagegreenprimary, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageindex, arginfo_class_Gmagick_setimageindex, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageinterlacescheme, arginfo_class_Gmagick_setimageinterlacescheme, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageiterations, arginfo_class_Gmagick_setimageiterations, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageprofile, arginfo_class_Gmagick_setimageprofile, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageredprimary, arginfo_class_Gmagick_setimageredprimary, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagerenderingintent, arginfo_class_Gmagick_setimagerenderingintent, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageresolution, arginfo_class_Gmagick_setimageresolution, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagescene, arginfo_class_Gmagick_setimagescene, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagetype, arginfo_class_Gmagick_setimagetype, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageunits, arginfo_class_Gmagick_setimageunits, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagewhitepoint, arginfo_class_Gmagick_setimagewhitepoint, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setsamplingfactors, arginfo_class_Gmagick_setsamplingfactors, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setsize, arginfo_class_Gmagick_setsize, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, shearimage, arginfo_class_Gmagick_shearimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, solarizeimage, arginfo_class_Gmagick_solarizeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, spreadimage, arginfo_class_Gmagick_spreadimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, stripimage, arginfo_class_Gmagick_stripimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, swirlimage, arginfo_class_Gmagick_swirlimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, trimimage, arginfo_class_Gmagick_trimimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, blackthresholdimage, arginfo_class_Gmagick_blackthresholdimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, whitethresholdimage, arginfo_class_Gmagick_whitethresholdimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, colordecisionlist, arginfo_class_Gmagick_colordecisionlist, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, clipimage, arginfo_class_Gmagick_clipimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, clippathimage, arginfo_class_Gmagick_clippathimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, colorfloodfillimage, arginfo_class_Gmagick_colorfloodfillimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, colorizeimage, arginfo_class_Gmagick_colorizeimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, compareimagechannels, arginfo_class_Gmagick_compareimagechannels, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, compareimages, arginfo_class_Gmagick_compareimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, contrastimage, arginfo_class_Gmagick_contrastimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, convolveimage, arginfo_class_Gmagick_convolveimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, extentimage, arginfo_class_Gmagick_extentimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageboundingbox, arginfo_class_Gmagick_getimageboundingbox, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimageattribute, arginfo_class_Gmagick_getimageattribute, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageattribute, arginfo_class_Gmagick_setimageattribute, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagechannelextrema, arginfo_class_Gmagick_getimagechannelextrema, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagechannelmean, arginfo_class_Gmagick_getimagechannelmean, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagecolormapcolor, arginfo_class_Gmagick_getimagecolormapcolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagecolormapcolor, arginfo_class_Gmagick_setimagecolormapcolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagegravity, arginfo_class_Gmagick_getimagegravity, ZEND_ACC_PUBLIC) #if defined(HAVE_GMAGICK_SET_IMAGE_GRAVITY) ZEND_ME(Gmagick, setimagegravity, arginfo_class_Gmagick_setimagegravity, ZEND_ACC_PUBLIC) #endif ZEND_ME(Gmagick, setimagemattecolor, arginfo_class_Gmagick_setimagemattecolor, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagevirtualpixelmethod, arginfo_class_Gmagick_getimagevirtualpixelmethod, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagevirtualpixelmethod, arginfo_class_Gmagick_setimagevirtualpixelmethod, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, haldclutimage, arginfo_class_Gmagick_haldclutimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, mattefloodfillimage, arginfo_class_Gmagick_mattefloodfillimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, montageimage, arginfo_class_Gmagick_montageimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, morphimages, arginfo_class_Gmagick_morphimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, mosaicimages, arginfo_class_Gmagick_mosaicimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, shaveimage, arginfo_class_Gmagick_shaveimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, steganoimage, arginfo_class_Gmagick_steganoimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, stereoimage, arginfo_class_Gmagick_stereoimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, transformimage, arginfo_class_Gmagick_transformimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, waveimage, arginfo_class_Gmagick_waveimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagefuzz, arginfo_class_Gmagick_getimagefuzz, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagefuzz, arginfo_class_Gmagick_setimagefuzz, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagesavedtype, arginfo_class_Gmagick_getimagesavedtype, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setdepth, arginfo_class_Gmagick_setdepth, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimageoption, arginfo_class_Gmagick_setimageoption, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setimagesavedtype, arginfo_class_Gmagick_setimagesavedtype, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setformat, arginfo_class_Gmagick_setformat, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setresolutionunits, arginfo_class_Gmagick_setresolutionunits, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getimagegeometry, arginfo_class_Gmagick_getimagegeometry, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, getresourcelimit, arginfo_class_Gmagick_getresourcelimit, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setresourcelimit, arginfo_class_Gmagick_setresourcelimit, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, negateimage, arginfo_class_Gmagick_negateimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, sharpenimage, arginfo_class_Gmagick_sharpenimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, textureimage, arginfo_class_Gmagick_textureimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, flattenimages, arginfo_class_Gmagick_flattenimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, sampleimage, arginfo_class_Gmagick_sampleimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, cloneimage, arginfo_class_Gmagick_cloneimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, appendimages, arginfo_class_Gmagick_appendimages, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, unsharpmaskimage, arginfo_class_Gmagick_unsharpmaskimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, setresolution, arginfo_class_Gmagick_setresolution, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, adaptivethresholdimage, arginfo_class_Gmagick_adaptivethresholdimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, affinetransformimage, arginfo_class_Gmagick_affinetransformimage, ZEND_ACC_PUBLIC) ZEND_ME(Gmagick, averageimages, arginfo_class_Gmagick_averageimages, ZEND_ACC_PUBLIC) ZEND_FE_END }; static const zend_function_entry class_GmagickPixel_methods[] = { ZEND_ME(GmagickPixel, __construct, arginfo_class_GmagickPixel___construct, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, getcolor, arginfo_class_GmagickPixel_getcolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, setcolor, arginfo_class_GmagickPixel_setcolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, getcolorcount, arginfo_class_GmagickPixel_getcolorcount, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, setcolorcount, arginfo_class_GmagickPixel_setcolorcount, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, getcolorvalue, arginfo_class_GmagickPixel_getcolorvalue, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, setcolorvalue, arginfo_class_GmagickPixel_setcolorvalue, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, getcolorvaluequantum, arginfo_class_GmagickPixel_getcolorvaluequantum, ZEND_ACC_PUBLIC) ZEND_ME(GmagickPixel, setcolorvaluequantum, arginfo_class_GmagickPixel_setcolorvaluequantum, ZEND_ACC_PUBLIC) ZEND_FE_END }; static const zend_function_entry class_GmagickDraw_methods[] = { ZEND_ME(GmagickDraw, setstrokecolor, arginfo_class_GmagickDraw_setstrokecolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokewidth, arginfo_class_GmagickDraw_setstrokewidth, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, ellipse, arginfo_class_GmagickDraw_ellipse, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, annotate, arginfo_class_GmagickDraw_annotate, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, affine, arginfo_class_GmagickDraw_affine, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, arc, arginfo_class_GmagickDraw_arc, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, bezier, arginfo_class_GmagickDraw_bezier, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfillcolor, arginfo_class_GmagickDraw_getfillcolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfillopacity, arginfo_class_GmagickDraw_getfillopacity, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfont, arginfo_class_GmagickDraw_getfont, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfontfamily, arginfo_class_GmagickDraw_getfontfamily, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfontfamily, arginfo_class_GmagickDraw_setfontfamily, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfontsize, arginfo_class_GmagickDraw_getfontsize, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfontstyle, arginfo_class_GmagickDraw_getfontstyle, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfontweight, arginfo_class_GmagickDraw_getfontweight, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokeopacity, arginfo_class_GmagickDraw_getstrokeopacity, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokecolor, arginfo_class_GmagickDraw_getstrokecolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokewidth, arginfo_class_GmagickDraw_getstrokewidth, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, gettextdecoration, arginfo_class_GmagickDraw_gettextdecoration, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, gettextencoding, arginfo_class_GmagickDraw_gettextencoding, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, line, arginfo_class_GmagickDraw_line, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, point, arginfo_class_GmagickDraw_point, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, polygon, arginfo_class_GmagickDraw_polygon, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, polyline, arginfo_class_GmagickDraw_polyline, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, rectangle, arginfo_class_GmagickDraw_rectangle, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, rotate, arginfo_class_GmagickDraw_rotate, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, roundrectangle, arginfo_class_GmagickDraw_roundrectangle, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, scale, arginfo_class_GmagickDraw_scale, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfillcolor, arginfo_class_GmagickDraw_setfillcolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfillopacity, arginfo_class_GmagickDraw_setfillopacity, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfont, arginfo_class_GmagickDraw_setfont, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfontsize, arginfo_class_GmagickDraw_setfontsize, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfontstyle, arginfo_class_GmagickDraw_setfontstyle, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfontweight, arginfo_class_GmagickDraw_setfontweight, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokeopacity, arginfo_class_GmagickDraw_setstrokeopacity, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, settextdecoration, arginfo_class_GmagickDraw_settextdecoration, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, settextencoding, arginfo_class_GmagickDraw_settextencoding, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getgravity, arginfo_class_GmagickDraw_getgravity, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setgravity, arginfo_class_GmagickDraw_setgravity, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokeantialias, arginfo_class_GmagickDraw_getstrokeantialias, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokeantialias, arginfo_class_GmagickDraw_setstrokeantialias, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokedashoffset, arginfo_class_GmagickDraw_getstrokedashoffset, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokedashoffset, arginfo_class_GmagickDraw_setstrokedashoffset, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokelinecap, arginfo_class_GmagickDraw_getstrokelinecap, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokelinecap, arginfo_class_GmagickDraw_setstrokelinecap, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokelinejoin, arginfo_class_GmagickDraw_getstrokelinejoin, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokelinejoin, arginfo_class_GmagickDraw_setstrokelinejoin, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getstrokemiterlimit, arginfo_class_GmagickDraw_getstrokemiterlimit, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokemiterlimit, arginfo_class_GmagickDraw_setstrokemiterlimit, ZEND_ACC_PUBLIC) #if GMAGICK_LIB_MASK >= 1003000 ZEND_ME(GmagickDraw, getstrokedasharray, arginfo_class_GmagickDraw_getstrokedasharray, ZEND_ACC_PUBLIC) #endif #if GMAGICK_LIB_MASK >= 1003000 ZEND_ME(GmagickDraw, setstrokedasharray, arginfo_class_GmagickDraw_setstrokedasharray, ZEND_ACC_PUBLIC) #endif ZEND_ME(GmagickDraw, circle, arginfo_class_GmagickDraw_circle, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getclippath, arginfo_class_GmagickDraw_getclippath, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setclippath, arginfo_class_GmagickDraw_setclippath, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getcliprule, arginfo_class_GmagickDraw_getcliprule, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setcliprule, arginfo_class_GmagickDraw_setcliprule, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getclipunits, arginfo_class_GmagickDraw_getclipunits, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setclipunits, arginfo_class_GmagickDraw_setclipunits, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, color, arginfo_class_GmagickDraw_color, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, comment, arginfo_class_GmagickDraw_comment, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfillpatternurl, arginfo_class_GmagickDraw_setfillpatternurl, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfillrule, arginfo_class_GmagickDraw_getfillrule, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfillrule, arginfo_class_GmagickDraw_setfillrule, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, getfontstretch, arginfo_class_GmagickDraw_getfontstretch, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setfontstretch, arginfo_class_GmagickDraw_setfontstretch, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathclose, arginfo_class_GmagickDraw_pathclose, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetoabsolute, arginfo_class_GmagickDraw_pathcurvetoabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetorelative, arginfo_class_GmagickDraw_pathcurvetorelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetoquadraticbezierabsolute, arginfo_class_GmagickDraw_pathcurvetoquadraticbezierabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetoquadraticbezierrelative, arginfo_class_GmagickDraw_pathcurvetoquadraticbezierrelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetoquadraticbeziersmoothabsolute, arginfo_class_GmagickDraw_pathcurvetoquadraticbeziersmoothabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetoquadraticbeziersmoothrelative, arginfo_class_GmagickDraw_pathcurvetoquadraticbeziersmoothrelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetosmoothabsolute, arginfo_class_GmagickDraw_pathcurvetosmoothabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathcurvetosmoothrelative, arginfo_class_GmagickDraw_pathcurvetosmoothrelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathellipticarcabsolute, arginfo_class_GmagickDraw_pathellipticarcabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathellipticarcrelative, arginfo_class_GmagickDraw_pathellipticarcrelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathmovetoabsolute, arginfo_class_GmagickDraw_pathmovetoabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathmovetorelative, arginfo_class_GmagickDraw_pathmovetorelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathlinetoabsolute, arginfo_class_GmagickDraw_pathlinetoabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathlinetorelative, arginfo_class_GmagickDraw_pathlinetorelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathlinetohorizontalabsolute, arginfo_class_GmagickDraw_pathlinetohorizontalabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathlinetohorizontalrelative, arginfo_class_GmagickDraw_pathlinetohorizontalrelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathlinetoverticalabsolute, arginfo_class_GmagickDraw_pathlinetoverticalabsolute, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathlinetoverticalrelative, arginfo_class_GmagickDraw_pathlinetoverticalrelative, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathstart, arginfo_class_GmagickDraw_pathstart, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pathfinish, arginfo_class_GmagickDraw_pathfinish, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, popclippath, arginfo_class_GmagickDraw_popclippath, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, popdefs, arginfo_class_GmagickDraw_popdefs, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pushdefs, arginfo_class_GmagickDraw_pushdefs, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, poppattern, arginfo_class_GmagickDraw_poppattern, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pushpattern, arginfo_class_GmagickDraw_pushpattern, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pushclippath, arginfo_class_GmagickDraw_pushclippath, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, skewx, arginfo_class_GmagickDraw_skewx, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, skewy, arginfo_class_GmagickDraw_skewy, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setstrokepatternurl, arginfo_class_GmagickDraw_setstrokepatternurl, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, gettextantialias, arginfo_class_GmagickDraw_gettextantialias, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, settextantialias, arginfo_class_GmagickDraw_settextantialias, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, gettextundercolor, arginfo_class_GmagickDraw_gettextundercolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, settextundercolor, arginfo_class_GmagickDraw_settextundercolor, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, translate, arginfo_class_GmagickDraw_translate, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, setviewbox, arginfo_class_GmagickDraw_setviewbox, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, popGraphicContext, arginfo_class_GmagickDraw_popGraphicContext, ZEND_ACC_PUBLIC) ZEND_ME(GmagickDraw, pushGraphicContext, arginfo_class_GmagickDraw_pushGraphicContext, ZEND_ACC_PUBLIC) ZEND_FE_END }; gmagick-2.0.6RC1/gmagick.stub.php0000644000175000017500000005252514011267775015265 0ustar vitovito= 1003007 public function setcompressionquality(int $quality): Gmagick {} #endif #if GMAGICK_LIB_MASK >= 1005000 public function getimagematte(): int {} #endif #ifdef GMAGICK_HAVE_SET_IMAGE_PAGE public function setimagepage(int $width, int $height, int $x, int $y): bool {} public function getimagepage(): array {} #endif public function thumbnailimage(int $width, int $height, bool $fit = false, bool $legacy = false): Gmagick {} public function resizeimage(int $width, int $height, int $filter, float $blur, bool $fit = false, bool $legacy = false): Gmagick {} public function clear(): Gmagick {} public function cropimage(int $width, int $height, int $x, int $y): Gmagick {} public function cropthumbnailimage(int $width, int $height): Gmagick {} public function coalesceimages(): Gmagick {} public function compositeimage(Gmagick $source, int $COMPOSE, int $x, int $y): Gmagick {} public function addimage(Gmagick $source): Gmagick {} public function addnoiseimage(int $noise_type): Gmagick {} public function borderimage(GmagickPixel|string $color, int $width, int $height): Gmagick {} public function thresholdimage(float $threshold, int $channel = CHANNEL_DEFAULT): bool {} public function charcoalimage(float $radius, float $sigma): Gmagick {} public function chopimage(int $width, int $height, int $x, int $y): Gmagick {} public function commentimage(string $comment): Gmagick {} public function current(): Gmagick {} public function cyclecolormapimage(int $displace): Gmagick {} public function deconstructimages(): Gmagick {} public function despeckleimage(): Gmagick {} public function destroy(): bool {} public function drawimage(GmagickDraw $drawing_wand): Gmagick {} public function edgeimage(float $radius): Gmagick {} public function embossimage(float $radius, float $sigma): Gmagick {} public function enhanceimage(): Gmagick {} public function equalizeimage(): Gmagick {} public function flipimage(): Gmagick {} public function flopimage(): Gmagick {} public function frameimage(GmagickPixel|string $color, int $width, int $height, int $inner_bevel, int $outer_bevel): Gmagick {} public function gammaimage(float $gamma): Gmagick {} public function getcopyright(): string {} public function getfilename(): string {} public function getimage(): Gmagick {} public function setimage(Gmagick $replace): bool {} public function getimagebackgroundcolor(): GmagickPixel {} public function getimageblob(): string {} public function getimagesblob(): string {} public function getimageblueprimary(): array {} public function getimagebordercolor(): GmagickPixel {} public function getimagechanneldepth(int $channel_type): int {} public function getimagecolors(): int {} public function getimagecolorspace(): int {} public function getimagecompose(): int {} public function getimagedelay(): int {} public function getimagedepth(): int {} public function getnumberimages(): int {} public function getimagedispose(): int {} public function getimageextrema(): array {} public function getimagefilename(): string {} public function getimagegamma(): float {} public function getimagegreenprimary(): array {} public function getimageheight(): int {} public function getimagehistogram(): array {} public function getimageindex(): int {} public function getimageinterlacescheme(): int {} public function getimageiterations(): int {} public function getimagemattecolor(): GmagickPixel {} public function getimageprofile(string $name): string {} public function getimageredprimary(): array {} public function getimagerenderingintent(): int {} public function getimageresolution(): array {} public function getimagescene(): int {} public function getimagesignature(): string {} public function getimagetype(): int {} public function getimageunits(): int {} public function getimagewhitepoint(): array {} public function getimagewidth(): int {} public function getpackagename(): string {} public function getquantumdepth(): array {} public function getreleasedate(): string {} public function getsamplingfactors(): array {} public function getsize(): array {} public function setinterlacescheme(int $interlace_scheme): Gmagick {} public function hasnextimage(): Gmagick {} public function haspreviousimage(): Gmagick {} public function implodeimage(float $radius): Gmagick {} public function labelimage(string $label): Gmagick {} public function levelimage(float $blackPoint, float $gamma, float $whitePoint, int $channel = Gmagick::CHANNEL_DEFAULT): Gmagick {} public function magnifyimage(): Gmagick {} public function mapimage(gmagick $gmagick, bool $dither): Gmagick {} public function medianfilterimage(float $radius): void {} public function minifyimage(): Gmagick {} public function modulateimage(float $brightness, float $saturation, float $hue): Gmagick {} public function motionblurimage(float $radius, float $sigma, float $angle): Gmagick {} public function newimage(int $width, int $height, string $background, ?string $format = null): Gmagick {} public function nextimage(): bool {} public function normalizeimage(): Gmagick {} public function oilpaintimage(float $radius): Gmagick {} public function previousimage(): bool {} public function profileimage(string $name, string $profile): Gmagick {} public function quantizeimage(int $numColors, int $colorspace, int $treeDepth, bool $dither, bool $measureError): Gmagick {} public function quantizeimages(int $numColors, int $colorspace, int $treeDepth, bool $dither, bool $measureError): Gmagick {} public function queryfontmetrics(GmagickDraw $draw, string $text): array {} public function queryfonts(string $pattern = "*"): array {} public function queryformats(string $pattern = "*"): array {} public function radialblurimage(float $angle, int $channel = Gmagick::CHANNEL_DEFAULT): Gmagick {} public function raiseimage(int $width, int $height, int $x, int $y, bool $raise): Gmagick {} public function readimageblob(string $imageContents, ?string $filename = null): Gmagick {} public function reducenoiseimage(float $radius): Gmagick {} public function removeimage(): Gmagick {} public function removeimageprofile(string $name): string {} public function resampleimage(float $xResolution, float $yResolution, int $filter, float $blur): Gmagick {} public function rollimage(int $x, int $y): Gmagick {} public function rotateimage(GmagickPixel|string $background, float $degrees): Gmagick {} public function scaleimage(int $width, int $height, bool $fit = false): Gmagick {} public function separateimagechannel(int $channel): Gmagick {} public function setfilename(string $filename): Gmagick {} public function setimagebackgroundcolor(GmagickPixel|string $color): Gmagick {} public function setimageblueprimary(float $x, float $y): Gmagick {} public function setimagebordercolor(GmagickPixel|string $color): Gmagick {} public function setimagechanneldepth(int $channel, int $depth): Gmagick {} public function setimagecolorspace(int $colorspace): Gmagick {} public function setimagecompose(int $composite): Gmagick {} public function getimagecompression(): int {} public function setimagecompression(int $compression): Gmagick {} public function setimagedelay(int $delay): Gmagick {} public function setimagedepth(int $depth): Gmagick {} public function setimagedispose(int $disposeType): Gmagick {} public function setimagefilename(string $filename): Gmagick {} public function getimageformat(): string {} public function setimageformat(string $imageFormat): Gmagick {} public function setimagegamma(float $gamma): Gmagick {} public function setimagegreenprimary(float $x, float $y): Gmagick {} public function setimageindex(int $index): Gmagick {} public function setimageinterlacescheme(int $interlace): Gmagick {} public function setimageiterations(int $iterations): Gmagick {} public function setimageprofile(string $name, string $profile): Gmagick {} public function setimageredprimary(float $x, float $y): Gmagick {} public function setimagerenderingintent(int $rendering_intent): Gmagick {} public function setimageresolution(float $xResolution, float $yResolution): Gmagick {} public function setimagescene(int $scene): Gmagick {} public function setimagetype(int $imgType): Gmagick {} public function setimageunits(int $resolution): Gmagick {} public function setimagewhitepoint(float $x, float $y): Gmagick {} public function setsamplingfactors(array $factors): Gmagick {} public function setsize(int $columns, int $rows): Gmagick {} public function shearimage(GmagickPixel|string $background, float $xShear, float $yShear): Gmagick {} public function solarizeimage(int $threshold): Gmagick {} public function spreadimage(float $radius): Gmagick {} public function stripimage(): Gmagick {} public function swirlimage(float $degrees): Gmagick {} public function trimimage(float $fuzz): Gmagick {} public function blackthresholdimage(GmagickPixel|string $threshold): bool {} public function whitethresholdimage(GmagickPixel|string $threshold): bool {} public function colordecisionlist(string $color_correction_collection): bool {} public function clipimage(): bool {} public function clippathimage(string $pathname, bool $inside): bool {} /** * @param GmagickPixel|string $fill * @param float $fuzz * @param GmagickPixel|string $bordercolor * @param int $x * @param int $y */ public function colorfloodfillimage($fill, float $fuzz, GmagickPixel|string $bordercolor, int $x, int $y): bool {} /** @param GmagickPixel|string $colorize */ public function colorizeimage($colorize, GmagickPixel|string $opacity): bool {} public function compareimagechannels(Gmagick $reference, int $channel, int $metric): array {} public function compareimages(Gmagick $reference, int $metric): array {} public function contrastimage(bool $sharpen): bool {} public function convolveimage(array $kernel): bool {} public function extentimage(int $width, int $height, int $x, int $y): bool {} public function getimageboundingbox(float $fuzz): array {} public function getimageattribute(string $key): string {} public function setimageattribute(string $key, string $attribute): bool {} public function getimagechannelextrema(int $channel): array {} public function getimagechannelmean(int $channel): array {} public function getimagecolormapcolor(int $index): GmagickPixel {} /** * @param int $index * @param GmagickPixel|string $color **/ public function setimagecolormapcolor(int $index, $color): bool {} public function getimagegravity(): int {} #ifdef HAVE_GMAGICK_SET_IMAGE_GRAVITY public function setimagegravity(int $gravity): bool {} #endif /** @param GmagickPixel|string $color */ public function setimagemattecolor($color): bool {} public function getimagevirtualpixelmethod(): int {} public function setimagevirtualpixelmethod(int $method): bool {} public function haldclutimage(Gmagick $hald): bool {} /** * @param float $alpha * @param float $fuzz * @param GmagickPixel|string $bordercolor * @param int $x * @param int $y */ public function mattefloodfillimage(float $alpha, float $fuzz, $bordercolor, int $x, int $y): bool {} public function montageimage(GmagickDraw $drawing_wand, string $tile_geometry, string $thumbnail_geometry, int $mode, string $frame): Gmagick {} public function morphimages(int $frames): Gmagick {} public function mosaicimages(): Gmagick {} public function shaveimage(int $columns, int $rows): bool {} public function steganoimage(Gmagick $watermark_wand, int $offset): Gmagick {} public function stereoimage(Gmagick $object_wand): Gmagick {} public function transformimage(string $crop, string $geometry): Gmagick {} public function waveimage(float $amplitude, float $length): bool {} public function getimagefuzz(): float {} public function setimagefuzz(float $fuzz): Gmagick {} public function getimagesavedtype(): int {} public function setdepth(int $depth): Gmagick {} public function setimageoption(string $format, string $key, string $value): bool {} public function setimagesavedtype(int $type): bool {} public function setformat(string $format): bool {} public function setresolutionunits(int $resolution_type): bool {} public function getimagegeometry(): array {} public function getresourcelimit(int $type): int {} public function setresourcelimit(int $type, int $limit): bool {} public function negateimage(bool $gray, int $channel = CHANNEL_DEFAULT): bool {} public function sharpenimage(float $radius, float $sigma): bool {} public function textureimage(Gmagick $texture_wand): Gmagick {} public function flattenimages(): Gmagick {} public function sampleimage(int $cols, int $rows, bool $fit = false, bool $legacy = false): Gmagick {} public function cloneimage(): Gmagick {} public function appendimages(): Gmagick {} public function unsharpmaskimage(float $radius, float $sigma, float $amount, float $threshold): Gmagick {} public function setresolution(float $x_resolution, float $y_resolution, float $amount, float $threshold): bool {} public function adaptivethresholdimage(int $width, int $height, int $offset): bool {} public function affinetransformimage(GmagickDraw $drawing_wand): bool {} public function averageimages(): Gmagick {} } class GmagickPixel { public function __construct(?string $color = null) {} public function getcolor(bool $as_array = false, bool $normalize_array = false): string|array {} public function setcolor(string $color): GmagickPixel {} public function getcolorcount(): int {} public function setcolorcount(int $color_count): GmagickPixel {} public function getcolorvalue(int $color): float {} public function setcolorvalue(int $color, float $value): GmagickPixel {} public function getcolorvaluequantum(int $color): int {} public function setcolorvaluequantum(int $color, float $value): GmagickPixel {} } class GmagickDraw { public function setstrokecolor(GmagickPixel|string $color): GmagickDraw {} public function setstrokewidth(float $width): GmagickDraw {} public function ellipse(float $ox, float $oy, float $rx, float $ry, float $start, float $end): GmagickDraw {} public function annotate(float $x, float $y, string $text): GmagickDraw {} public function affine(array $affine): bool {} public function arc(float $sx, float $sy, float $ex, float $ey, float $sd, float $ed): GmagickDraw {} public function bezier(array $coordinates): GmagickDraw {} public function getfillcolor(): GmagickPixel {} public function getfillopacity(): float {} public function getfont(): string|false {} public function getfontfamily(): string|false {} public function setfontfamily(string $font_family): GmagickDraw {} public function getfontsize(): float {} public function getfontstyle(): int {} public function getfontweight(): int {} public function getstrokeopacity(): float {} public function getstrokecolor(): GmagickPixel {} public function getstrokewidth(): float {} public function gettextdecoration(): int {} public function gettextencoding(): string|false {} public function line(float $sx, float $sy, float $ex, float $ey): GmagickDraw {} public function point(float $x, float $y): GmagickDraw {} public function polygon(array $coordinates): GmagickDraw {} public function polyline(array $coordinates): GmagickDraw {} public function rectangle(float $x1, float $y1, float $x2, float $y2): GmagickDraw {} public function rotate(float $degrees): GmagickDraw {} public function roundrectangle(float $x1, float $y1, float $x2, float $y2, float $rx, float $ry): GmagickDraw {} public function scale(float $x, float $y): GmagickDraw {} public function setfillcolor(GmagickPixel|string $color): GmagickDraw {} public function setfillopacity(float $fill_opacity): GmagickDraw {} public function setfont(string $font): GmagickDraw {} public function setfontsize(float $pointsize): GmagickDraw {} public function setfontstyle(int $style): GmagickDraw {} public function setfontweight(int $weight): GmagickDraw {} public function setstrokeopacity(float $stroke_opacity): GmagickDraw {} public function settextdecoration(int $decoration): GmagickDraw {} public function settextencoding(string $encoding): GmagickDraw {} public function getgravity(): int {} public function setgravity(int $gravity): GmagickDraw {} public function getstrokeantialias(): bool {} public function setstrokeantialias(bool $antialias): GmagickDraw {} public function getstrokedashoffset(): float {} public function setstrokedashoffset(float $offset): GmagickDraw {} public function getstrokelinecap(): int {} public function setstrokelinecap(int $linecap): GmagickDraw {} public function getstrokelinejoin(): int {} public function setstrokelinejoin(int $linejoin): GmagickDraw {} public function getstrokemiterlimit(): int {} public function setstrokemiterlimit(int $miterlimit): GmagickDraw {} #if GMAGICK_LIB_MASK >= 1003000 public function getstrokedasharray(): array {} public function setstrokedasharray(array $dash_array): GmagickDraw {} #endif public function circle(float $ox, float $oy, float $px, float $py): GmagickDraw {} public function getclippath(): string|false {} public function setclippath(string $clip_mask): GmagickDraw {} public function getcliprule(): int {} public function setcliprule(int $fill_rule): GmagickDraw {} public function getclipunits(): int {} public function setclipunits(int $clip_units): GmagickDraw {} public function color(float $x, float $y, int $paint_method): GmagickDraw {} public function comment(string $comment): GmagickDraw {} public function setfillpatternurl(string $fill_url): GmagickDraw {} public function getfillrule(): int {} public function setfillrule(string $fill_rule): GmagickDraw {} public function getfontstretch(): int {} public function setfontstretch(int $font_stretch): bool {} public function pathclose(): GmagickDraw {} public function pathcurvetoabsolute(float $x1, float $y1, float $x2, float $y2, float $x, float $y): GmagickDraw {} public function pathcurvetorelative(float $x1, float $y1, float $x2, float $y2, float $x, float $y): GmagickDraw {} public function pathcurvetoquadraticbezierabsolute(float $x1, float $y1, float $x, float $y): GmagickDraw {} public function pathcurvetoquadraticbezierrelative(float $x1, float $y1, float $x, float $y): GmagickDraw {} public function pathcurvetoquadraticbeziersmoothabsolute(float $x, float $y): GmagickDraw {} public function pathcurvetoquadraticbeziersmoothrelative(float $x, float $y): GmagickDraw {} public function pathcurvetosmoothabsolute(float $x1, float $y1, float $x, float $y): GmagickDraw {} public function pathcurvetosmoothrelative(float $x1, float $y1, float $x, float $y): GmagickDraw {} public function pathellipticarcabsolute(float $rx, float $ry, float $x_axis_rotation, bool $large_arc_flag, bool $sweep_flag, float $x, float $y): GmagickDraw {} public function pathellipticarcrelative(float $rx, float $ry, float $x_axis_rotation, bool $large_arc_flag, bool $sweep_flag, float $x, float $y): GmagickDraw {} public function pathmovetoabsolute(float $x, float $y): GmagickDraw {} public function pathmovetorelative(float $x, float $y): GmagickDraw {} public function pathlinetoabsolute(float $x, float $y): GmagickDraw {} public function pathlinetorelative(float $x, float $y): GmagickDraw {} public function pathlinetohorizontalabsolute(float $x): GmagickDraw {} public function pathlinetohorizontalrelative(float $x): GmagickDraw {} public function pathlinetoverticalabsolute(float $y): GmagickDraw {} public function pathlinetoverticalrelative(float $y): GmagickDraw {} public function pathstart(): GmagickDraw {} public function pathfinish(): GmagickDraw {} public function popclippath(): GmagickDraw {} public function popdefs(): GmagickDraw {} public function pushdefs(): GmagickDraw {} public function poppattern(): GmagickDraw {} public function pushpattern(string $pattern_id, float $x, float $y, float $width, float $height): GmagickDraw {} public function pushclippath(string $clip_mask_id): GmagickDraw {} public function skewx(float $degrees): GmagickDraw {} public function skewy(float $degrees): GmagickDraw {} public function setstrokepatternurl(string $stroke_url): GmagickDraw {} public function gettextantialias(): bool {} public function settextantialias(bool $anti_alias): bool {} public function gettextundercolor(): GmagickPixel {} public function settextundercolor(GmagickPixel|string $color): GmagickDraw {} public function translate(float $x, float $y): GmagickDraw {} public function setviewbox(float $x1, float $y1, float $x2, float $y2): GmagickDraw {} public function popGraphicContext(): GmagickDraw {} public function pushGraphicContext(): GmagickDraw {} } gmagick-2.0.6RC1/php_gmagick_helpers.h0000644000175000017500000000703014011267775016331 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #ifndef PHP_GMAGICK_FUNCTIONS_H # define PHP_GMAGICK_FUNCTIONS_H typedef enum { GmagickUndefinedOperation, GmagickReadImage, GmagickPingImage, GmagickWriteImage, GmagickWriteImages, GmagickWriteImageFile, GmagickWriteImagesFile, GmagickReadImageFile, } GmagickOperationType; #define GMAGICK_INIT_ERROR_HANDLING zend_error_handling error_handling #define GMAGICK_SET_ERROR_HANDLING_THROW zend_replace_error_handling(EH_THROW, php_gmagick_exception_class_entry, &error_handling TSRMLS_CC) #define GMAGICK_RESTORE_ERROR_HANDLING zend_restore_error_handling(&error_handling TSRMLS_CC) /* {{{ void php_gmagick_initialize_constants() */ void php_gmagick_initialize_constants(); /* }}} */ /* {{{ get_pointinfo_array(zval *coordinate_array, int *num_elements TSRMLS_DC) */ void *get_pointinfo_array(zval *coordinate_array, int *num_elements TSRMLS_DC); /* }}} */ /* {{{ check_configured_font(char *font, int font_len TSRMLS_DC ) */ int check_configured_font(char *font, int font_len TSRMLS_DC ); /* {{{ get_double_array_from_zval(zval *param_array, long *num_elements TSRMLS_DC) */ double *get_double_array_from_zval(zval *param_array, long *num_elements TSRMLS_DC); /* {{{ count_occurences_of(char needle, char *haystack TSRMLS_DC) */ int count_occurences_of(char needle, char *haystack TSRMLS_DC); /* {{{ zend_bool crop_thumbnail_image(MagickWand *magick_wand, long desired_width, long desired_height TSRMLS_DC) */ zend_bool crop_thumbnail_image(MagickWand *magick_wand, long desired_width, long desired_height, zend_bool legacy TSRMLS_DC); /* {{{ zend_bool php_gmagick_thumbnail_dimensions(MagickWand *magick_wand, zend_bool bestfit, long desired_width, long desired_height, long *new_width, long *new_height) */ zend_bool php_gmagick_thumbnail_dimensions(MagickWand *magick_wand, zend_bool bestfit, zend_long desired_width, zend_long desired_height, zend_long *new_width, zend_long *new_height, zend_bool legacy); /* {{{ zend_bool php_gmagick_ensure_not_empty (MagickWand *magick_wand) */ zend_bool php_gmagick_ensure_not_empty (MagickWand *magick_wand); /* {{{ double *php_gmagick_zval_to_double_array(zval *param_array, long *num_elements TSRMLS_DC) */ double *php_gmagick_zval_to_double_array(zval *param_array, long *num_elements TSRMLS_DC); zend_bool php_gmagick_stream_handler(php_gmagick_object *intern, php_stream *stream, GmagickOperationType type TSRMLS_DC); #endif gmagick-2.0.6RC1/php_gmagick_macros.h0000644000175000017500000003637014011267775016164 0ustar vitovito/* +----------------------------------------------------------------------+ | PHP Version 5 / Gmagick | +----------------------------------------------------------------------+ | Copyright (c) 2009 Vito Chin, Mikko Koppanen | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Mikko Kopppanen | | Vito Chin | +----------------------------------------------------------------------+ */ #ifndef HAVE_PHP_GMAGICK_MACROS_H # define HAVE_PHP_GMAGICK_MACROS_H /* {{{ GMAGICK_CHAIN_METHOD */ #define GMAGICK_CHAIN_METHOD RETURN_ZVAL(getThis(), 1, 0); #define GMAGICK_FETCH_OBJECT(zv_p) (php_gmagick_object *)((char*)(zv_p) - XtOffsetOf(php_gmagick_object, zo)) #define Z_GMAGICK_OBJ_P(zv) GMAGICK_FETCH_OBJECT(Z_OBJ_P((zv))) #define GMAGICKDRAW_FETCH_OBJECT(zv_p) (php_gmagickdraw_object *)((char*)(zv_p) - XtOffsetOf(php_gmagickdraw_object, zo)) #define Z_GMAGICKDRAW_OBJ_P(zv) GMAGICKDRAW_FETCH_OBJECT(Z_OBJ_P((zv))) #define GMAGICKPIXEL_FETCH_OBJECT(zv_p) (php_gmagickpixel_object *)((char*)(zv_p) - XtOffsetOf(php_gmagickpixel_object, zo)) #define Z_GMAGICKPIXEL_OBJ_P(zv) GMAGICKPIXEL_FETCH_OBJECT(Z_OBJ_P((zv))) /* }}} */ /* Define a set of macros to throw exceptions */ #define GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(type, description, code) \ { \ switch(type) { \ case 1: \ zend_throw_exception(php_gmagick_exception_class_entry, description, (long)code TSRMLS_CC); \ RETURN_NULL(); \ break; \ case 2: \ zend_throw_exception(php_gmagickdraw_exception_class_entry, description, (long)code TSRMLS_CC); \ RETURN_NULL(); \ break; \ case 3: \ zend_throw_exception(php_gmagickpixel_exception_class_entry, description, (long)code TSRMLS_CC); \ RETURN_NULL(); \ break; \ } \ } \ /* }}} */ /* {{{ GMAGICK_REGISTER_CONST_LONG(const_name, value) */ #define GMAGICK_REGISTER_CONST_LONG(const_name, value) \ zend_declare_class_constant_long(php_gmagick_sc_entry, const_name, sizeof(const_name)-1, (long)value TSRMLS_CC); /* }}} */ /* {{{ GMAGICK_REGISTER_CONST_STRING(const_name, value) */ #define GMAGICK_REGISTER_CONST_STRING(const_name, value) \ zend_declare_class_constant_string(php_gmagick_sc_entry, const_name, sizeof(const_name)-1, value TSRMLS_CC); /* }}} */ /* {{{ GMAGICK_FREE_MEMORY(type, value) */ #define GMAGICK_FREE_MEMORY(type, value) \ if (value != (type) NULL) { \ MagickRelinquishMemory(value); \ value = (type)NULL; \ } /* }}} */ /* {{{ GMAGICK_THROW_GMAGICK_EXCEPTION_EX(magick_wand, fallback) */ #define GMAGICK_THROW_GMAGICK_EXCEPTION_EX(magick_wand, fallback) \ { \ ExceptionType severity; \ char *description; \ description = MagickGetException(magick_wand, &severity); \ if (description && strlen(description) == 0) { \ GMAGICK_FREE_MEMORY(char *, description); \ description = NULL; \ } \ if (!description) { \ zend_throw_exception(php_gmagick_exception_class_entry, fallback, 1 TSRMLS_CC); \ } else { \ zend_throw_exception(php_gmagick_exception_class_entry, description, (long)severity TSRMLS_CC); \ GMAGICK_FREE_MEMORY(char *, description); \ } \ } /* }}} */ /* {{{ GMAGICK_THROW_GMAGICK_EXCEPTION(magick_wand, fallback) */ #define GMAGICK_THROW_GMAGICK_EXCEPTION(magick_wand, fallback) \ GMAGICK_THROW_GMAGICK_EXCEPTION_EX(magick_wand, fallback); \ return; /* }}} */ /* {{{ GMAGICK_CALCULATE_THUMBNAIL_SIDES(magick_wand, desired_width, desired_height, fit) */ #define GMAGICK_CALCULATE_THUMBNAIL_SIDES(magick_wand, desired_width, desired_height, fit) \ { \ long orig_width = MagickGetImageWidth(magick_wand);\ long orig_height = MagickGetImageHeight(magick_wand);\ double ratio;\ if (fit) { \ if ((desired_width <= 0) || (desired_height <= 0)) { \ GMAGICK_THROW_GMAGICK_EXCEPTION(magick_wand, "Invalid image geometry"); \ } \ if ((orig_width <= desired_width) && (orig_height <= desired_height)) { \ RETURN_TRUE; \ } \ if ((orig_width - desired_width) > (orig_height - desired_height)) { \ ratio = (double)orig_width / (double)desired_width; \ desired_height = (double)orig_height / ratio; \ } else { \ ratio = (double)orig_height / (double)desired_height; \ desired_width = (double)orig_width / ratio; \ } \ if (desired_width < 1) { \ desired_width = 1; \ } \ if (desired_height < 1) { \ desired_height = 1; \ } \ } else { \ if ((desired_width <= 0) && (desired_height <= 0)) { \ GMAGICK_THROW_GMAGICK_EXCEPTION(magick_wand, "Invalid image geometry"); \ } \ if (desired_width <= 0) { \ ratio = (double)orig_height / (double)desired_height; \ desired_width = orig_width / ratio; \ } else if (desired_height <= 0) { \ ratio = (double)orig_width / (double)desired_width; \ desired_height = orig_height / ratio; \ } \ }\ } /* }}} */ /* {{{ GMAGICK_CHECK_NOT_EMPTY(magick_wand, type, code) */ #define GMAGICK_CHECK_NOT_EMPTY(magick_wand, type, code)\ if(MagickGetNumberImages(magick_wand) == 0) { \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "Can not process empty Gmagick object", (long)code); \ } \ /* }}} */ /* {{{ GMAGICK_REPLACE_MAGICKWAND(intern, new_wand) */ #define GMAGICK_REPLACE_MAGICKWAND(intern, new_wand)\ if(intern->magick_wand != (MagickWand *)NULL) {\ DestroyMagickWand(intern->magick_wand);\ intern->magick_wand = NULL; \ intern->magick_wand = new_wand;\ } else {\ intern->magick_wand = new_wand;\ } \ /* }}} */ /* {{{ GMAGICKPIXEL_REPLACE_PIXELWAND(intern, new_wand) */ #define GMAGICKPIXEL_REPLACE_PIXELWAND(intern, new_wand)\ if(intern->pixel_wand != (PixelWand *)NULL) {\ DestroyPixelWand(intern->pixel_wand);\ intern->pixel_wand = NULL; \ intern->pixel_wand = new_wand;\ } else {\ intern->pixel_wand = new_wand;\ } \ /* }}} */ /* {{{ GMAGICK_CLONE_PIXELWAND(source, target) */ #define GMAGICK_CLONE_PIXELWAND(source, target) \ target = (PixelWand *)NewPixelWand(); \ PixelSetColorCount(target, PixelGetColorCount(source)); \ PixelSetRed(target, PixelGetRed(source)); \ PixelSetGreen(target, PixelGetGreen(source)); \ PixelSetBlue(target, PixelGetBlue(source)); \ PixelSetOpacity(target, PixelGetOpacity(source)); /* }}} */ /* GraphicsMagick 1.3.3 is missing PixelGetException */ #define GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(pixel_wand, fallback) \ { \ zend_throw_exception(php_gmagickpixel_exception_class_entry, fallback, 2 TSRMLS_CC); \ RETURN_NULL(); \ } /* }}} */ #if GMAGICK_LIB_MASK < 1002000 /* GraphicsMagick 1.1.x is missing DrawGetException */ #define GMAGICK_THROW_GMAGICKDRAW_EXCEPTION(drawing_wand, fallback, code) \ { \ zend_throw_exception(php_gmagickdraw_exception_class_entry, fallback, 2 TSRMLS_CC); \ RETURN_NULL(); \ } /* }}} */ #else /* {{{ GMAGICK_THROW_GMAGICKDRAW_EXCEPTION(drawing_wand, fallback, code) */ #define GMAGICK_THROW_GMAGICKDRAW_EXCEPTION(drawing_wand, fallback, code) \ { \ ExceptionType severity; \ char *description; \ description = DrawGetException(drawing_wand, &severity); \ if (strlen(description) == 0) { \ GMAGICK_FREE_MEMORY(char *, description); \ } \ if (!description) { \ zend_throw_exception(php_gmagickdraw_exception_class_entry, fallback, (long)code TSRMLS_CC); \ RETURN_NULL(); \ } else { \ zend_throw_exception(php_gmagickdraw_exception_class_entry, description, (long)severity TSRMLS_CC); \ GMAGICK_FREE_MEMORY(char *, description); \ DrawClearException(drawing_wand); \ RETURN_NULL(); \ } \ } \ /* }}} */ #endif /* {{{ GMAGICK_CLONE_PIXELWAND(source, target) */ #if PHP_MAJOR_VERSION < 8 #define GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, caller) \ switch (Z_TYPE_P(param)) { \ case IS_STRING: \ { \ zval object; \ PixelWand *pixel_wand = NewPixelWand(); \ if (!PixelSetColor(pixel_wand, Z_STRVAL_P(param))) { \ GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(pixel_wand, "Unrecognized color string"); \ return; \ } \ object_init_ex(&object, php_gmagickpixel_sc_entry); \ internp = Z_GMAGICKPIXEL_OBJ_P(&object); \ GMAGICKPIXEL_REPLACE_PIXELWAND(internp, pixel_wand); \ } \ break; \ case IS_OBJECT: \ if (instanceof_function_ex(Z_OBJCE_P(param), php_gmagickpixel_sc_entry, 0 TSRMLS_CC)) { \ internp = Z_GMAGICKPIXEL_OBJ_P(param); \ } else { \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "The parameter must be an instance of GmagickPixel or a string", (long)caller); \ } \ break; \ default: \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "Invalid parameter provided", (long)caller); \ break; \ } #else #define GMAGICK_CAST_PARAMETER_TO_COLOR(param, internp, caller) \ switch (Z_TYPE_P(param)) { \ case IS_STRING: \ { \ zval object; \ PixelWand *pixel_wand = NewPixelWand(); \ if (!PixelSetColor(pixel_wand, Z_STRVAL_P(param))) { \ GMAGICK_THROW_GMAGICKPIXEL_EXCEPTION(pixel_wand, "Unrecognized color string"); \ return; \ } \ object_init_ex(&object, php_gmagickpixel_sc_entry); \ internp = Z_GMAGICKPIXEL_OBJ_P(&object); \ GMAGICKPIXEL_REPLACE_PIXELWAND(internp, pixel_wand); \ } \ break; \ case IS_OBJECT: \ if (Z_OBJCE_P(param) == php_gmagickpixel_sc_entry) { \ internp = Z_GMAGICKPIXEL_OBJ_P(param); \ } else { \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "The parameter must be an instance of GmagickPixel or a string", (long)caller); \ } \ break; \ default: \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "Invalid parameter provided", (long)caller); \ break; \ } #endif /* }}} */ /* {{{ GMAGICK_CLONE_PIXELWAND(source, target) */ #if PHP_VERSION_ID > 50399 #define GMAGICK_SAFE_MODE_CHECK(filename, status)\ if (filename) { \ if (strlen(filename) > MAXPATHLEN) { \ status = GMAGICK_READ_WRITE_FILENAME_TOO_LONG; \ } \ if (php_check_open_basedir_ex(filename, 0 TSRMLS_CC)) { \ status = GMAGICK_READ_WRITE_OPEN_BASEDIR_ERROR; \ } \ } \ #else #define GMAGICK_SAFE_MODE_CHECK(filename, status)\ if (filename) { \ if (strlen(filename) > MAXPATHLEN) { \ status = GMAGICK_READ_WRITE_FILENAME_TOO_LONG; \ } \ if (PG(safe_mode) && (!php_checkuid_ex(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR, CHECKUID_NO_ERRORS))) { \ status = GMAGICK_READ_WRITE_SAFE_MODE_ERROR; \ } \ if (php_check_open_basedir_ex(filename, 0 TSRMLS_CC)) { \ status = GMAGICK_READ_WRITE_OPEN_BASEDIR_ERROR; \ } \ } \ #endif /* }}} */ #define GMAGICKDRAW_CHECK_READ_OR_WRITE_ERROR(internd, filename, error, free)\ switch (error) {\ default:\ case 0:\ /* No error */\ break;\ case 1:\ zend_throw_exception_ex(php_gmagickdraw_exception_class_entry, 1 TSRMLS_CC, "Safe mode restricts user to read file: %s", filename);\ if (free == GMAGICK_FREE_FILENAME) { \ efree(filename); \ }\ RETURN_NULL();\ break;\ case 2:\ zend_throw_exception_ex(php_gmagickdraw_exception_class_entry, 1 TSRMLS_CC, "open_basedir restriction in effect. File(%s) is not within the allowed path(s)", filename);\ if (free == GMAGICK_FREE_FILENAME) { \ efree(filename); \ }\ RETURN_NULL();\ break;\ case 3:\ GMAGICK_THROW_GMAGICKDRAW_EXCEPTION(internd->drawing_wand, "Unable to read file", 1);\ if (free == GMAGICK_FREE_FILENAME) { \ efree(filename); \ }\ RETURN_NULL();\ break;\ } #if PHP_MAJOR_VERSION < 7 #define GMAGICK_CAST_PARAMETER_TO_OPACITY(param, internp, caller) \ switch (Z_TYPE_P(param)) { \ case IS_LONG: \ case IS_DOUBLE: \ { \ zval object; \ PixelWand *pixel_wand = NewPixelWand(); \ PixelSetOpacity(pixel_wand, Z_DVAL_P(param)); \ object_init_ex(&object, php_gmagickpixel_sc_entry); \ internp = Z_GMAGICKPIXEL_OBJ_P(&object); \ GMAGICKPIXEL_REPLACE_PIXELWAND(internp, pixel_wand); \ } \ break; \ case IS_OBJECT: \ if (instanceof_function_ex(Z_OBJCE_P(param), php_gmagickpixel_sc_entry, 0 TSRMLS_CC)) { \ internp = Z_GMAGICKPIXEL_OBJ_P(param); \ } else { \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "The parameter must be an instance of GmagickPixel or a string", (long)caller); \ } \ break; \ default: \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "Invalid parameter provided", (long)caller); \ break; \ } #else #define GMAGICK_CAST_PARAMETER_TO_OPACITY(param, internp, caller) \ switch (Z_TYPE_P(param)) { \ case IS_LONG: \ case IS_DOUBLE: \ { \ zval object; \ PixelWand *pixel_wand = NewPixelWand(); \ PixelSetOpacity(pixel_wand, Z_DVAL_P(param)); \ object_init_ex(&object, php_gmagickpixel_sc_entry); \ internp = Z_GMAGICKPIXEL_OBJ_P(&object); \ GMAGICKPIXEL_REPLACE_PIXELWAND(internp, pixel_wand); \ } \ break; \ case IS_OBJECT: \ if (Z_OBJCE_P(param) == php_gmagickpixel_sc_entry) { \ internp = Z_GMAGICKPIXEL_OBJ_P(param); \ } else { \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "The parameter must be an instance of GmagickPixel or a string", (long)caller); \ } \ break; \ default: \ GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(caller, "Invalid parameter provided", (long)caller); \ break; \ } #endif /* {{{ GMAGICK_SAFEMODE_OPENBASEDIR_CHECK(filename) */ #if PHP_VERSION_ID > 50399 #define GMAGICK_SAFEMODE_OPENBASEDIR_CHECK(filename) \ if (php_check_open_basedir_ex(filename, 0 TSRMLS_CC)) { \ zend_error(E_WARNING, "open_basedir restriction in effect "); \ return; \ }\ #else #define GMAGICK_SAFEMODE_OPENBASEDIR_CHECK(filename) \ if (PG(safe_mode) && (!php_checkuid_ex(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR, CHECKUID_NO_ERRORS))) { \ zend_error(E_WARNING, "SAFE MODE restriction in effect "); \ return; \ } \ if (php_check_open_basedir_ex(filename, 0 TSRMLS_CC)) { \ zend_error(E_WARNING, "open_basedir restriction in effect "); \ return; \ }\ #endif /* }}} */ /* {{{ GMAGICK_SAFEMODE_OPENBASEDIR_CONFIRMACCESS(filename) */ #define GMAGICK_SAFEMODE_OPENBASEDIR_CONFIRMACCESS(filename) \ ExceptionInfo exception_info; \ GetExceptionInfo(&exception_info); \ (void) MagickSetConfirmAccessHandler(SafeModeMonitor); \ if (MagickConfirmAccess(FileReadConfirmAccessMode, filename, &exception_info) \ == MagickFail) \ { \ DestroyExceptionInfo(&exception_info); \ zend_error(E_WARNING, "SAFE MODE Restriction in effect "); \ return; \ } \ (void) MagickSetConfirmAccessHandler(OpenBaseDirMonitor); \ if (MagickConfirmAccess(FileReadConfirmAccessMode, filename, &exception_info) \ == MagickFail) \ { \ DestroyExceptionInfo(&exception_info); \ zend_error(E_WARNING, "open_basedir restriction in effect "); \ return; \ } \ /* }}} */ /* {{{ GMAGICK_HAS_FORMAT(buffer, magick_wand, free_buffer) */ #define GMAGICK_HAS_FORMAT(buffer, magick_wand, free_buffer)\ buffer = MagickGetImageFormat(magick_wand);\ if(buffer == (char *)NULL || *buffer == '\0') {\ GMAGICK_FREE_MEMORY(char *, buffer); GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICK_CLASS, "Image has no format", 1); \ } else { \ if (free_buffer) GMAGICK_FREE_MEMORY(char *, buffer); \ } \ /* }}} */ #endif gmagick-2.0.6RC1/README.md0000644000175000017500000000313614011267775013447 0ustar vitovitoGmagick ======= Copyright (c) 2009 Vito Chin, Mikko Koppanen PHP extension that wraps the GraphicsMagick library. Access GraphicsMagick's capabilities via PHP. [![Build Status](https://travis-ci.org/vitoc/gmagick.svg?branch=master)](https://travis-ci.org/vitoc/gmagick) Getting Started =============== 1. Install GraphicsMagick Download the stable from from http://www.graphicsmagick.org and build with --enable-shared option. If you do not need to work with perl, --without-perl. Remember to run ldconfig after building GraphicsMagick to update shared library cache for immediate use. 2. Install Gmagick Typically, as with most extensions: $ phpize $ ./configure $ make $ make install Functions not supported ======================= The functions listed below are deliberately not part of the Gmagick extension. Other functions that are present in the GraphicsMagick library but not exposed by Gmagick are likely to be added in the future. MagickAnimateImages - only useful with X terminals. MagickDisplayImage - only useful with X terminals. MagickDisplayImages - only useful with X terminals. MagickGetConfigureInfo - not implemented in GraphicsMagick MagickFxImage - not implemented in GraphicsMagick MagickFxImageChannel - not implemented in GraphicsMagick MagickGetImageSize - just get the image a string and do strlen MagickPreviewImages - not implemented in GraphicsMagick MagickSetPassphrase - use real encryption if you need to protect data MagickTintImage - not implemented in GraphicsMagick MagickTransformImage - this is a 'helper' function which duplicates other easier to use functions. gmagick-2.0.6RC1/CONTRIBUTORS.md0000644000175000017500000000061414011267775014445 0ustar vitovitoContributors ============ These people have contributed to Gmagick's code: * Anatol Belski (weltling) * Dan Ackroyd (danack) * Will Gallego (wcgallego) * jecknig * Kenton Jacobsen (brokentone) * Vito Chin (vitoc) * Mikko Koppanen (mkoppanen) * Remi Collet (remicollet) * Rasmus Lerdorf (rlerdorf) Please create a pull request on this file if there is anyone missed.gmagick-2.0.6RC1/LICENSE0000644000175000017500000000622214011267775013174 0ustar vitovito-------------------------------------------------------------------- The PHP License, version 3.01 Copyright (c) 1999 - 2009 The PHP Group. All rights reserved. -------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, is permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name "PHP" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact group@php.net. 4. Products derived from this software may not be called "PHP", nor may "PHP" appear in their name, without prior written permission from group@php.net. You may indicate that your software works in conjunction with PHP by saying "Foo for PHP" instead of calling it "PHP Foo" or "phpfoo" 5. The PHP Group may publish revised and/or new versions of the license from time to time. Each version will be given a distinguishing version number. Once covered code has been published under a particular version of the license, you may always continue to use it under the terms of that version. You may also choose to use such covered code under the terms of any subsequent version of the license published by the PHP Group. No one other than the PHP Group has the right to modify the terms applicable to covered code created under this License. 6. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes PHP software, freely available from ". THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------- This software consists of voluntary contributions made by many individuals on behalf of the PHP Group. The PHP Group can be contacted via Email at group@php.net. For more information on the PHP Group and the PHP project, please see . PHP includes the Zend Engine, freely available at .