├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ └── release_validate.yml ├── rpm └── imagick.ini ├── CREDITS ├── tests ├── php.gif ├── Biter_500.jpg ├── anonymous_pro_minus.ttf ├── houghline_input_image.png ├── cannyEdgeImage_input_image.png ├── bug_66098.phpt ├── bug81235.phpt ├── 290_imagick_profileimage.phpt ├── 025-function-image.phpt ├── github_174.phpt ├── 126_Imagick_getImageChannelStats_basic.phpt ├── 273_imagick_falsyimage.phpt ├── 260_localContrastImage.phpt ├── 005_bestfit.phpt ├── 271_imagick_constants.phpt ├── 009_properties.phpt ├── 001_imagick_readimage.phpt ├── 255_getFeatures.phpt ├── 263_autoGammaImage.phpt ├── 021-countable.phpt ├── 026_phpinfo.phpt ├── 323_Imagick_getType.phpt ├── 016-static-methods.phpt ├── 310_Imagick_whiteBalanceImage.phpt ├── 253_getHdri.phpt ├── 262_autoOrient.phpt ├── 079_Imagick_getImageGeometry_basic.phpt ├── 071_Imagick_flipImage_basic.phpt ├── 074_Imagick_flopImage_basic.phpt ├── 138_Imagick_shaveImage_basic.phpt ├── 272_imagick_identifyimagetype.phpt ├── 308_Imagick_levelizeImage.phpt ├── 068_Imagick_enhanceImage_basic.phpt ├── 090_Imagick_magnifyImage_basic.phpt ├── 136_Imagick_shadeImage_basic.phpt ├── 069_Imagick_equalizeImage_case1.phpt ├── 246_antialias_image.phpt ├── 017-clear-destroy.phpt ├── 065_Imagick_despeckleImage_basic.phpt ├── 088_Imagick_implodeImage_basic.phpt ├── 134_Imagick_shadowImage_basic.phpt ├── 158_Imagick_transposeImage_basic.phpt ├── 033_Imagick_autoLevelImage_basic.phpt ├── 162_Imagick_transverseImage_basic.phpt ├── 302_Imagick_claheImage.phpt ├── 309_Imagick_orderedDitherImage.phpt ├── skipprobefourier.inc ├── 067_Imagick_edgeImage_basic.phpt ├── 097_Imagick_newPseudoImage_basic.phpt ├── 152_Imagick_swirlImage_basic.phpt ├── 004_clone.phpt ├── 143_Imagick_spreadImage_basic.phpt ├── 099_Imagick_oilPaintImage_basic.phpt ├── 108_Imagick_resampleImage_basic.phpt ├── 119_Imagick_sepiaToneImage_basic.phpt ├── 011_polygon.phpt ├── 036_Imagick_blueShiftImage_basic.phpt ├── 131_Imagick_setOption_case2.phpt ├── 099_Imagick_oilPaintImage_sigma.phpt ├── 109_Imagick_rollImage_basic.phpt ├── bug64015.phpt ├── 307_Imagick_levelImageColors.phpt ├── bug_72226.phpt ├── 066_Imagick_embossImage_basic.phpt ├── 166_Imagick_waveImage_basic.phpt ├── 012-clone-separation.phpt ├── 013-read-filehandle.phpt ├── 040_Imagick_charcoalImage_basic.phpt ├── 157_Imagick_thumbnailImage_basic.phpt ├── 111_Imagick_rotateImage_basic.phpt ├── 078_Imagick_gammaImage_basic.phpt ├── 132_Imagick_setOption_case3.phpt ├── 312_Imagick_colorThresholdImage.phpt ├── 329_imagick_getImageBlob_empty.phpt ├── 116_Imagick_separateImageChannel_basic.phpt ├── 152_Imagick_swirlImageWithMethod_basic.phpt ├── 331_Imagick_getImagesBlob_empty.phpt ├── 298_Imagick_kmeansImage.phpt ├── 096_Imagick_negateImage_basic.phpt ├── 122_Imagick_setImageCompressionQuality_basic.phpt ├── 141_Imagick_sketchImage_basic.phpt ├── 142_Imagick_solarizeImage_basic.phpt ├── 143_Imagick_spreadImageWithMethod_basic.phpt ├── 306_Imagick_interpolativeResizeImage.phpt ├── 168_Imagick_whiteThresholdImage_basic.phpt ├── 035_Imagick_blackThresholdImage_basic.phpt ├── 046_Imagick_contrastImage_basic.phpt ├── 089_Imagick_medianFilterImage_basic.phpt ├── 297_Imagick_meanShiftImage.phpt ├── 037_Imagick_blurImage_basic.phpt ├── 039_Imagick_borderImage_basic.phpt ├── 100_Imagick_posterizeImage_basic.phpt ├── 137_Imagick_shearImage_basic.phpt ├── 296_Imagick_waveletDenoiseImage.phpt ├── 106_Imagick_reduceNoiseImage_basic.phpt ├── 281_ini_settings_default.phpt ├── 076_Imagick_fxImage_basic.phpt ├── 300_Imagick_autoThresholdImage.phpt ├── 135_Imagick_sharpenImage_basic.phpt ├── 113_Imagick_rotationalBlurImage_basic.phpt ├── 164_Imagick_trimImage_basic.phpt ├── 270_imagick_restoreErrorHandler.phpt ├── 041_Imagick_chopImage_basic.phpt ├── 048_Imagick_cropImage_basic.phpt ├── 093_Imagick_modulateImage_basic.phpt ├── 130_Imagick_setOption_case1.phpt ├── 166_Imagick_waveImageWithMethod_basic.phpt ├── 269_ImagickPixel_setColorFromPixel_basic.phpt ├── 027_Imagick_adaptiveResizeImage_basic.phpt ├── 144_Imagick_spliceImage_basic.phpt ├── 330_Imagick_newImage.phpt ├── 029_Imagick_adaptiveBlurImage_basic.phpt ├── 080_Imagick_gaussianBlurImage_basic.phpt ├── 125_Imagick_setImageOrientation_basic.phpt ├── 159_Imagick_transformImage_basic.phpt ├── 167_Imagick_vignetteImage_basic.phpt ├── 301_Imagick_bilateralBlurImage.phpt ├── 321_Imagick_getOrientation.phpt ├── 085_Imagick_haldClutImage_basic.phpt ├── 154_Imagick_textureImage_basic.phpt ├── 028_Imagick_adaptiveSharpenImage_basic.phpt ├── 107_Imagick_recolorImage_basic.phpt ├── 276_Imagick_artifacts.phpt ├── 299_Imagick_rangeThresholdImage.phpt ├── 105_Imagick_raiseImage_basic.phpt ├── 294_Imagick_cannyEdgeImage.phpt ├── 295_Imagick_setSeed.phpt ├── 318_Imagick_getImageRange.phpt ├── 094_Imagick_motionBlurImage_basic.phpt ├── 305_Imagick_complexImages.phpt ├── 117_Imagick_segmentImage_basic.phpt ├── 326_Imagick_setExtract.phpt ├── 087_Imagick_levelImage_basic.phpt ├── 161_Imagick_transformImageColorspace_basic.phpt ├── 325_Imagick_setDepth.phpt ├── 101_Imagick_quantizeImage_basic.phpt ├── 283_ini_settings_set_falsy_zero.phpt ├── 038_Imagick_brightnessContrastImage_basic.phpt ├── 115_Imagick_selectiveBlurImage_basic.phpt ├── 155_Imagick_thresholdImage_basic.phpt ├── 156_Imagick_tintImage_basic.phpt ├── 284_ini_settings_set_truthy_number.phpt ├── 285_ini_settings_set_truthy_string.phpt ├── 047_Imagick_convolveImage_7.phpt ├── 060_Imagick_distortImage_Polar.phpt ├── 163_Imagick_uniqueImageColors_basic.phpt ├── 327_Imagick_polaroidImage_basic.phpt ├── 053_Imagick_distortImage_RotatedArc.phpt ├── 018-clone-length.phpt ├── 165_Imagick_unsharpMaskImage_basic.phpt ├── 322_Imagick_getResolution.phpt ├── 091_Imagick_linearStretchImage_basic.phpt ├── 055_Imagick_distortImage_ScaleRotateTransform.phpt ├── 095_Imagick_normalizeImage_basic.phpt ├── 070_Imagick_equalizeImage_case2.phpt ├── bug20636.phpt ├── 013-read-filehandle-file-stream.phpt ├── bug21229.phpt ├── 030_Imagick_adaptiveThresholdImage_basic.phpt ├── 319_Imagick_getInterpolateMethod.phpt ├── 153_Imagick_statisticImage_basic.phpt ├── 171_ImagickPixel_setColorValue_basic.phpt ├── 258_Imagick_evaluateImages_basic.phpt ├── 013-read-filehandle-memory-stream.phpt ├── 051_Imagick_distortImage_Projection.phpt ├── 088_Imagick_implodeImageWithMethod_basic.phpt ├── 314_Imagick_getBackgroundColor.phpt ├── 104_Imagick_randomThresholdImage_basic.phpt ├── 050_Imagick_distortImage_Affine.phpt ├── 185_ImagickDraw_point_basic.phpt ├── 098_Imagick_orderedPosterizeImage_basic.phpt ├── 170_ImagickPixel_setColor_basic.phpt ├── 277_Imagick_colorDecisionListImage.phpt ├── 281_imagick_houghLineImage_basic.phpt ├── 102_Imagick_radialBlurImage_basic.phpt ├── 139_Imagick_sigmoidalContrastImage_basic.phpt ├── 316_Imagick_getImageKurtosis.phpt ├── 007_thumbnail_fill.phpt ├── 303_Imagick_averageImages.phpt ├── 317_Imagick_getImageMean.phpt ├── 160_Imagick_transparentPaintImage_basic.phpt ├── 288_imagick_prevent_zero_size_images.phpt ├── 328_Imagick_polaroidImageWithTextAndMethod_basic.phpt ├── 059_Imagick_distortImage_Polar.phpt ├── 054_Imagick_distortImage_Bilinear.phpt ├── 261_compositeImageGravity.phpt ├── 003_cast_color_opacity.phpt ├── 133_Imagick_setSamplingFactors_basic.phpt ├── 324_Imagick_polynomialImage.phpt ├── 172_ImagickPixel_setColorValueQuantum_basic.phpt ├── 179_ImagickDraw_line_basic.phpt ├── 062_Imagick_distortImage_BarrelInverse.phpt ├── 092_Imagick_mergeImageLayers_basic.phpt ├── 121_Imagick_setImageBias_basic.phpt ├── 008_newpseudoimage.phpt ├── 047_Imagick_convolveImage_6.phpt ├── 075_Imagick_floodFillPaintImage_basic.phpt ├── 236_Imagick_identify_basic.phpt ├── 120_Imagick_setCompressionQuality_basic.phpt ├── 320_Imagick_getOptions.phpt ├── 201_ImagickDraw_setFillAlpha_basic.phpt ├── 257_Imagick_setImageChannelMask_basic.phpt ├── 194_ImagickDraw_rectangle_basic.phpt ├── 202_ImagickDraw_setFillColor_basic.phpt ├── 204_ImagickDraw_setFillOpacity_basic.phpt ├── 052_Imagick_distortImage_Arc.phpt ├── 019-readimages.phpt ├── 195_ImagickDraw_rotate_basic.phpt ├── 221_ImagickDraw_setStrokeWidth_basic.phpt ├── 196_ImagickDraw_scale_basic.phpt ├── 213_ImagickDraw_setStrokeAlpha_basic.phpt ├── 311_Imagick_channelFxImage.phpt ├── 057_Imagick_distortImage_PerspectiveProjection.phpt ├── 112_Imagick_roundCorners_basic.phpt ├── 247_ImagickPixelIterator_construct_basic.phpt ├── 083_Imagick_getPixelIterator_basic.phpt ├── 215_ImagickDraw_setStrokeColor_basic.phpt ├── 252_ImagickPixelIterator_construct_basic.phpt ├── 242_Tutorial_levelizeImage_basic.phpt ├── 034_Imagick_annotateImage_basic.phpt ├── 190_ImagickDraw_popDefs_basic.phpt └── 114_Imagick_scaleImage_basic.phpt ├── runDev.sh ├── docker ├── fedora │ ├── runValgrind.sh │ ├── runGdb.sh │ ├── compileImagick.sh │ ├── runTestRepeatedly.sh │ ├── debug_notes.txt │ ├── 003_cast_color_opacity.php │ └── Dockerfile ├── nixos │ ├── README.md │ ├── shell.nix │ └── Dockerfile ├── centos7 │ └── Dockerfile ├── testing7_2 │ ├── README.md │ └── Dockerfile ├── testing8_0 │ ├── README.md │ └── Dockerfile ├── centos6 │ └── Dockerfile ├── developing │ └── Dockerfile └── repro │ ├── README.md │ └── Dockerfile ├── clean.sh ├── runTests.sh ├── validate_package.sh ├── util ├── calculate_test_jobs.php ├── check_fonts.php ├── Float32Info.php ├── FloatInfo.php ├── analyze_params.php └── genSymbols.sh ├── check-loaded.phpt ├── examples ├── thumbnail.php ├── houghline.php └── watermark.php ├── composer.json ├── shim_php7_to_php8.h ├── ImagickKernel.stub.php ├── regen_arginfo.sh └── .gitignore /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [Danack] -------------------------------------------------------------------------------- /rpm/imagick.ini: -------------------------------------------------------------------------------- 1 | extension=imagick.so 2 | -------------------------------------------------------------------------------- /CREDITS: -------------------------------------------------------------------------------- 1 | Imagick 2 | Mikko Koppanen, Scott MacVicar 3 | -------------------------------------------------------------------------------- /tests/php.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Imagick/imagick/HEAD/tests/php.gif -------------------------------------------------------------------------------- /tests/Biter_500.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Imagick/imagick/HEAD/tests/Biter_500.jpg -------------------------------------------------------------------------------- /tests/anonymous_pro_minus.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Imagick/imagick/HEAD/tests/anonymous_pro_minus.ttf -------------------------------------------------------------------------------- /tests/houghline_input_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Imagick/imagick/HEAD/tests/houghline_input_image.png -------------------------------------------------------------------------------- /tests/cannyEdgeImage_input_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Imagick/imagick/HEAD/tests/cannyEdgeImage_input_image.png -------------------------------------------------------------------------------- /runDev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | 5 | 6 | DOCKER_SCAN_SUGGEST=false BUILDKIT_PROGRESS=plain docker-compose up --build developing -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "monthly" -------------------------------------------------------------------------------- /docker/fedora/runValgrind.sh: -------------------------------------------------------------------------------- 1 | valgrind /opt/remi/php74/root/usr/bin/php -d extension=/opt/remi/php74/root/usr/lib64/php/modules/imagick.so /home/app/tests/003_cast_color_opacity.php -------------------------------------------------------------------------------- /clean.sh: -------------------------------------------------------------------------------- 1 | 2 | # Delete Imagick built files without deleting items 3 | # in subdirectories like 'make clean' does 4 | 5 | rm *.lo 6 | rm *.dep 7 | rm modules/imagick.la 8 | rm modules/imagick.so 9 | -------------------------------------------------------------------------------- /docker/fedora/runGdb.sh: -------------------------------------------------------------------------------- 1 | gdb -batch -ex "run" -ex "bt" --args /opt/remi/php74/root/usr/bin/php -d extension=/opt/remi/php74/root/usr/lib64/php/modules/imagick.so /home/app/tests/003_cast_color_opacity.php -------------------------------------------------------------------------------- /docker/fedora/compileImagick.sh: -------------------------------------------------------------------------------- 1 | 2 | set -e 3 | set -x 4 | 5 | scl enable php74 'phpize; ./configure' 6 | 7 | 8 | 9 | scl enable php74 'make -j4; make install' 10 | scl enable php74 'make test TESTS="-q --show-diff"' 11 | 12 | 13 | -------------------------------------------------------------------------------- /runTests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This runs the tests in parallel (needs php 7.something) 4 | # and writes the failing tests to a list. Re-running will 5 | # run the failing tests if there were any. 6 | php run-tests.php -j4 -l failing_tests.txt 7 | -------------------------------------------------------------------------------- /docker/nixos/README.md: -------------------------------------------------------------------------------- 1 | The NixOS container is now available. Get a development shell with: 2 | 3 | docker-compose exec nixos nix-shell /var/app/docker/nixos/shell.nix 4 | 5 | You should configure PHP Imagick with: 6 | 7 | phpize 8 | ./configure --with-imagick=@@IM_DEV@@ 9 | -------------------------------------------------------------------------------- /docker/centos7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | USER root 4 | 5 | RUN yum -y install autoconf bison curl \ 6 | gcc git gnupg make re2c wget \ 7 | ghostscript libxml2-dev 8 | 9 | # Make the default directory you 10 | WORKDIR /var/app 11 | 12 | CMD tail -f /var/app/README.md 13 | 14 | -------------------------------------------------------------------------------- /validate_package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VALIDATE_OUTPUT=`pear package-validate` 4 | 5 | echo "VALIDATE_OUTPUT is $VALIDATE_OUTPUT" 6 | 7 | if [[ "$VALIDATE_OUTPUT" == *"Error"* ]]; then 8 | echo "Package appears to contain an error" 9 | exit 255 10 | fi 11 | 12 | echo "Package appears valid" -------------------------------------------------------------------------------- /tests/bug_66098.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Bug #66098 Check that there is no segfault from zval_addref_p 3 | --SKIPIF-- 4 | foobar; 10 | 11 | echo "OK"; 12 | 13 | ?> 14 | --EXPECT-- 15 | OK -------------------------------------------------------------------------------- /tests/bug81235.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Bug #81235 (Imagick::newPseudoImage gives open_basedir restriction error) 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(10, 10, "canvas:white"); 10 | ?> 11 | --EXPECT-- 12 | -------------------------------------------------------------------------------- /docker/testing7_2/README.md: -------------------------------------------------------------------------------- 1 | The testing7_2 box is available. 2 | 3 | You can now run `docker exec -it imagick_testing7_2_1 bash` to create a bash session in the container, and then run code inside it. 4 | 5 | If you checkout the Imagick project to a project named different from 'imagick' that box name might be different. It can be found by running `docker ps`. -------------------------------------------------------------------------------- /docker/testing8_0/README.md: -------------------------------------------------------------------------------- 1 | The testing8_0 box is available. 2 | 3 | You can now run `docker exec -it imagick_testing8_0_1 bash` to create a bash session in the container, and then run code inside it. 4 | 5 | If you checkout the Imagick project to a project named different from 'imagick' that box name might be different. It can be found by running `docker ps`. -------------------------------------------------------------------------------- /tests/290_imagick_profileimage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::profileImage test 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 10 | $imagick->profileImage('*', null); 11 | 12 | echo "Ok"; 13 | ?> 14 | --EXPECTF-- 15 | Ok -------------------------------------------------------------------------------- /tests/025-function-image.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test functionimage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | convolveimage (array (1, 'a', 1)); 13 | 14 | echo "OK" . PHP_EOL; 15 | ?> 16 | --EXPECT-- 17 | OK -------------------------------------------------------------------------------- /tests/github_174.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::resizeImage prevent 0 width/height images 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(1, 1000, "xc:red"); 9 | $i->resizeImage(0, 250, 0, 1); 10 | echo $i->getImageWidth(); // should be 1 11 | ?> 12 | --EXPECTF-- 13 | 1 14 | -------------------------------------------------------------------------------- /docker/fedora/runTestRepeatedly.sh: -------------------------------------------------------------------------------- 1 | 2 | set -e 3 | set +x 4 | 5 | for ((i=1;i<=5000;i++)); 6 | do 7 | echo $i 8 | /opt/remi/php74/root/usr/bin/php -d extension=/opt/remi/php74/root/usr/lib64/php/modules/imagick.so /home/app/tests/003_cast_color_opacity.php > /dev/null 9 | 10 | retVal=$? 11 | if [ $retVal -ne 0 ]; then 12 | echo "Error" 13 | fi 14 | done 15 | 16 | -------------------------------------------------------------------------------- /tests/126_Imagick_getImageChannelStats_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getImageChannelStatistics 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 11 | $identifyInfo = $imagick->getImageChannelStatistics(); 12 | 13 | echo "Ok"; 14 | ?> 15 | --EXPECTF-- 16 | Ok -------------------------------------------------------------------------------- /tests/273_imagick_falsyimage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::__construct false 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | getMessage()."\n"; 13 | } 14 | 15 | 16 | ?> 17 | --EXPECTF-- 18 | Constructor shouldn't be called with a boolean as the filename -------------------------------------------------------------------------------- /tests/260_localContrastImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test localContrastImage 3 | --SKIPIF-- 4 | 10 | --FILE-- 11 | localContrastImage(2, 2); 15 | 16 | echo "Ok"; 17 | 18 | ?> 19 | --EXPECT-- 20 | Ok -------------------------------------------------------------------------------- /tests/005_bestfit.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test thumbnail bestfit 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newImage(50, 100, 'white'); 10 | 11 | $im->thumbnailImage(100, 50, true); 12 | var_dump($im->getImageGeometry()); 13 | 14 | ?> 15 | --EXPECTF-- 16 | array(2) { 17 | ["width"]=> 18 | int(25) 19 | ["height"]=> 20 | int(50) 21 | } -------------------------------------------------------------------------------- /tests/271_imagick_constants.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::readImage test 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | getConstants(); 10 | 11 | $output = ''; 12 | 13 | foreach ($constants as $key => $value) { 14 | $output .= "$key: $value \n"; 15 | } 16 | echo "Ok"; 17 | 18 | ?> 19 | --EXPECTF-- 20 | Ok -------------------------------------------------------------------------------- /util/calculate_test_jobs.php: -------------------------------------------------------------------------------- 1 | = 4) { 13 | echo ""; 14 | exit(); 15 | } 16 | 17 | echo "-j4"; 18 | -------------------------------------------------------------------------------- /tests/009_properties.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test reading properties 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(100, 100, "XC:red"); 13 | $im->setImageFormat("png"); 14 | 15 | echo $im->width . "x" . $im->height . "\n"; 16 | echo $im->format; 17 | 18 | ?> 19 | --EXPECTF-- 20 | 100x100 21 | png -------------------------------------------------------------------------------- /tests/001_imagick_readimage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::readImage test 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | readImage('foo.jpg'); 11 | } catch (ImagickException $e) { 12 | echo "got exception"; 13 | } 14 | 15 | ?> 16 | --EXPECTF-- 17 | --- Catch exception with try/catch 18 | got exception -------------------------------------------------------------------------------- /tests/255_getFeatures.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick::getfeatures 3 | --SKIPIF-- 4 | 12 | --FILE-- 13 | 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/263_autoGammaImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test autoGammaImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | autoGammaImage(); 13 | 14 | 15 | $im = new Imagick("magick:logo"); 16 | $im->autoGammaImage(\Imagick::CHANNEL_RED); 17 | 18 | echo "Ok"; 19 | 20 | ?> 21 | --EXPECT-- 22 | Ok 23 | -------------------------------------------------------------------------------- /tests/021-countable.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test countable interface 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | 22 | --EXPECT-- 23 | 3 24 | done -------------------------------------------------------------------------------- /tests/026_phpinfo.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick module hasn't broken phpinfo 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | enabled') !== false) { 14 | echo "Ok"; 15 | } 16 | else { 17 | echo "Imagick was not reported as enabled?"; 18 | var_dump($contents); 19 | } 20 | 21 | ?> 22 | --EXPECTF-- 23 | Ok -------------------------------------------------------------------------------- /tests/323_Imagick_getType.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getType 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getType(); 14 | 15 | echo "Type is " . $type . "\n"; 16 | } 17 | 18 | test_getType() ; 19 | echo "Ok"; 20 | ?> 21 | --EXPECTF-- 22 | Type is 0 23 | Ok 24 | -------------------------------------------------------------------------------- /check-loaded.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Check that Imagick is actually loaded 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | 19 | --EXPECTF-- 20 | OK -------------------------------------------------------------------------------- /docker/centos6/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:6 2 | 3 | USER root 4 | 5 | # Get Debian up-to-date 6 | #RUN apt-get update -qq \ 7 | # && DEBIAN_FRONTEND=noninteractive apt-get install -y \ 8 | # apt-transport-https autoconf bison bsdmainutils ca-certificates curl \ 9 | # gcc git gnupg lsb-release make pkg-config re2c wget \ 10 | # libpng-dev libjpeg-dev ghostscript libxml2-dev libfreetype6-dev 11 | 12 | 13 | # Make the default directory you 14 | WORKDIR /var/app 15 | 16 | CMD tail -f /var/app/README.md 17 | 18 | -------------------------------------------------------------------------------- /tests/016-static-methods.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test static methods 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | queryFormats ()) . PHP_EOL; 12 | 13 | echo gettype (Imagick::queryFonts ()) . PHP_EOL; 14 | echo gettype ($im->queryFonts ()) . PHP_EOL; 15 | 16 | echo 'success'; 17 | 18 | ?> 19 | --EXPECT-- 20 | array 21 | array 22 | array 23 | array 24 | success -------------------------------------------------------------------------------- /tests/310_Imagick_whiteBalanceImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, whiteBalanceImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | whiteBalanceImage(); 14 | $imagick->getImageBlob(); 15 | } 16 | 17 | whiteBalanceImage() ; 18 | echo "Ok"; 19 | ?> 20 | --EXPECTF-- 21 | Ok 22 | -------------------------------------------------------------------------------- /docker/fedora/debug_notes.txt: -------------------------------------------------------------------------------- 1 | Hey there. 2 | 3 | The fedora debugging box is up and running. 4 | You can 'ssh' into by running: 5 | docker exec -it imagick_fedora_1 bash 6 | 7 | In a separate cli window. 8 | Or if you checked imagick out into a different directory, then find the box name with `docker ps` 9 | 10 | Once inside if you run 11 | sh docker/fedora/compileImagick.sh 12 | 13 | Imagick should get compiled, and then you can run: 14 | sh docker/fedora/runGdb.sh 15 | 16 | to see if fail, eventually. 17 | -------------------------------------------------------------------------------- /examples/thumbnail.php: -------------------------------------------------------------------------------- 1 | readImage( '/tmp/test.png' ); 12 | 13 | /* Thumbnail the image ( width 100, preserve dimensions ) */ 14 | $im->thumbnailImage( 100, null ); 15 | 16 | /* Write the thumbail to disk */ 17 | $im->writeImage( '/tmp/th_test.png' ); 18 | 19 | /* Free resources associated to the Imagick object */ 20 | $im->destroy(); 21 | 22 | ?> -------------------------------------------------------------------------------- /tests/253_getHdri.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixelIterator, construct 3 | --SKIPIF-- 4 | 12 | --FILE-- 13 | 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/262_autoOrient.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test autoOrient 3 | --SKIPIF-- 4 | = 0x660 && $v ['versionNumber'] < 0x670) 11 | // die ('skip seems to be broken in this version of ImageMagick'); 12 | ?> 13 | --FILE-- 14 | autoOrient(); 18 | 19 | echo "Ok"; 20 | 21 | ?> 22 | --EXPECT-- 23 | Ok -------------------------------------------------------------------------------- /examples/houghline.php: -------------------------------------------------------------------------------- 1 | readImage( '/tmp/test.png' ); 12 | 13 | /* Houghline the image ( width 9, height 9, threshold 40 ) */ 14 | $im->houghLineImage( 9, 9, 40 ); 15 | 16 | /* Write the houghline image to disk */ 17 | $im->writeImage( '/tmp/hough_test.png' ); 18 | 19 | /* Free resources associated to the Imagick object */ 20 | $im->destroy(); 21 | 22 | ?> 23 | 24 | -------------------------------------------------------------------------------- /tests/079_Imagick_getImageGeometry_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getImageGeometry 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $bytes = $imagick->getImageBlob(); 16 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 17 | } 18 | 19 | getImageGeometry() ; 20 | echo "Ok"; 21 | ?> 22 | --EXPECTF-- 23 | Ok -------------------------------------------------------------------------------- /tests/071_Imagick_flipImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, flipImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->flipImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | flipImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/074_Imagick_flopImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, flopImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->flopImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | flopImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/138_Imagick_shaveImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, shaveImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->shaveImage(100, 50); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | shaveImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/272_imagick_identifyimagetype.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test identifyImageType 3 | --SKIPIF-- 4 | 10 | --FILE-- 11 | newPseudoImage(100, 100, "magick:logo"); 15 | 16 | $type = $im->identifyImageType(); 17 | 18 | if ($type !== Imagick::IMGTYPE_PALETTE) { 19 | echo "Unexpected type value. Expecting: ".Imagick::IMGTYPE_PALETTE.", but got $type. \n"; 20 | } 21 | echo "Ok"; 22 | 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/308_Imagick_levelizeImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, levelizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | levelizeImage(0.1, 2.0, 0.95); 15 | // $imagick->writeImage(__DIR__ . '/claheImage_output_image.png'); 16 | $imagick->getImageBlob(); 17 | } 18 | 19 | levelizeImage(); 20 | echo "Ok"; 21 | ?> 22 | --EXPECTF-- 23 | Ok 24 | -------------------------------------------------------------------------------- /tests/068_Imagick_enhanceImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, enhanceImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->enhanceImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | enhanceImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/090_Imagick_magnifyImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, magnifyImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->magnifyImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | magnifyImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/136_Imagick_shadeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, shadeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->shadeImage(true, 45, 20); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | shadeImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/069_Imagick_equalizeImage_case1.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, equalizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->equalizeImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | equalizeImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/246_antialias_image.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test pseudo formats 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(10, 10, "magick:logo"); 10 | //On by default 11 | var_export($im->getAntiAlias()); 12 | echo PHP_EOL; 13 | 14 | //Turn off 15 | $im->setAntiAlias(false); 16 | var_export($im->getAntiAlias()); 17 | echo PHP_EOL; 18 | 19 | //Turn back on 20 | $im->setAntiAlias(true); 21 | var_export($im->getAntiAlias()); 22 | echo PHP_EOL; 23 | 24 | ?> 25 | --EXPECTF-- 26 | true 27 | false 28 | true 29 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imagick/imagick", 3 | "type": "php-ext", 4 | "license": "PHP-3.01", 5 | "description": "The Imagick PHP extension", 6 | "require": { 7 | "php": ">= 5.6.0" 8 | }, 9 | "php-ext": { 10 | "extension-name": "imagick", 11 | "configure-options": [ 12 | { 13 | "name": "with-imagick", 14 | "description": "Enables the imagick extension. DIR is the prefix to ImageMagick installation directory.", 15 | "needs-value": true 16 | } 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/017-clear-destroy.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Clear and destroy aliases 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | clear (); 10 | $im->destroy (); 11 | 12 | $im = new ImagickDraw (); 13 | $im->clear (); 14 | $im->destroy (); 15 | 16 | $im = new ImagickPixel (); 17 | $im->clear (); 18 | $im->destroy (); 19 | 20 | $magick = new Imagick ('magick:rose'); 21 | 22 | $im = new ImagickPixelIterator ($magick); 23 | $im->clear (); 24 | $im->destroy (); 25 | 26 | echo 'success'; 27 | 28 | ?> 29 | --EXPECT-- 30 | success -------------------------------------------------------------------------------- /tests/065_Imagick_despeckleImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, despeckleImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->despeckleImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | despeckleImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/088_Imagick_implodeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, implodeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->implodeImage(0.0001); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | 19 | } 20 | 21 | implodeImage() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/134_Imagick_shadowImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, shadowImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->shadowImage(0.4, 10, 50, 5); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | shadowImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/158_Imagick_transposeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, transposeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->transposeImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | transposeImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/033_Imagick_autoLevelImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, autoLevelImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->autoLevelImage(); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | autoLevelImage() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/162_Imagick_transverseImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, transverseImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->transverseImage(); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | transverseImage() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/302_Imagick_claheImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, claheImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | claheImage( 15 | 10, 16 | 10, 17 | 8, 18 | 2 19 | ); 20 | // $imagick->writeImage(__DIR__ . '/claheImage_output_image.png'); 21 | $imagick->getImageBlob(); 22 | } 23 | 24 | claheImage() ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok 29 | -------------------------------------------------------------------------------- /tests/309_Imagick_orderedDitherImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, orderedDitherImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | orderedDitherImage("o3x3,6"); 15 | // $imagick->writeImage(__DIR__ . '/claheImage_output_image.png'); 16 | $imagick->getImageBlob(); 17 | } 18 | 19 | orderedDitherImage() ; 20 | echo "Ok"; 21 | ?> 22 | --EXPECTF-- 23 | Ok 24 | -------------------------------------------------------------------------------- /tests/skipprobefourier.inc: -------------------------------------------------------------------------------- 1 | newPseudoImage(640, 480, "magick:logo"); 12 | $imagick->resizeimage(512, 512, \Imagick::FILTER_LANCZOS, 1); 13 | $imagick->forwardFourierTransformImage(true); 14 | $canCallFourier = true; 15 | } 16 | catch(\Exception $e) { 17 | //fftw probably not available. 18 | } 19 | 20 | ob_end_clean(); 21 | 22 | if ($canCallFourier == false) { 23 | die("skip fourier function seems unavailable"); 24 | } 25 | 26 | ?> -------------------------------------------------------------------------------- /tests/067_Imagick_edgeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, edgeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->edgeImage($radius); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | edgeImage($radius) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/097_Imagick_newPseudoImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, newPseudoImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(300, 300, $canvasType); 13 | $imagick->setImageFormat("png"); 14 | $bytes = $imagick->getImageBlob(); 15 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 16 | } 17 | 18 | newPseudoImage($canvasType) ; 19 | echo "Ok"; 20 | ?> 21 | --EXPECTF-- 22 | Ok 23 | -------------------------------------------------------------------------------- /tests/152_Imagick_swirlImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, swirlImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->swirlImage($swirl); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | swirlImage($swirl) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /docker/nixos/shell.nix: -------------------------------------------------------------------------------- 1 | { pkgs ? import {} }: 2 | 3 | with pkgs; 4 | 5 | mkShell { 6 | nativeBuildInputs = [ php74.unwrapped autoconf pkgconfig re2c ]; 7 | buildInputs = [ imagemagick7 pcre2 ]; 8 | 9 | # Needed to avoid error message when using fonts 10 | # https://github.com/Imagick/imagick/issues/398 11 | FONTCONFIG_FILE = "${pkgs.fontconfig.out}/etc/fonts/fonts.conf"; 12 | 13 | # Needed to allow Imagick::getConfigureOptions() to have all info 14 | # https://github.com/Imagick/imagick/issues/399 15 | MAGICK_CONFIGURE_PATH = "${imagemagick7.dev}/lib/ImageMagick-7.0.11/config-Q16HDRI"; 16 | } 17 | -------------------------------------------------------------------------------- /tests/004_clone.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Testing clone keyword 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newImage(100, 100, new ImagickPixel("white")); 12 | $new = clone $im; 13 | 14 | if ($new->getImageWidth() == 100 && $new->getImageHeight() == 100) { 15 | echo "Cloning succeeded\n"; 16 | } else { 17 | echo "Cloning failed\n"; 18 | } 19 | } catch (Exception $e) { 20 | echo "Cloning failed\n"; 21 | } 22 | ?> 23 | --EXPECTF-- 24 | --- Testing clone keyword 25 | Cloning succeeded -------------------------------------------------------------------------------- /tests/143_Imagick_spreadImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, spreadImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->spreadImage($radius); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | spreadImage($radius) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/099_Imagick_oilPaintImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, oilPaintImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->oilPaintImage($radius); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | oilPaintImage($radius) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/108_Imagick_resampleImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, resampleImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | 16 | $imagick->resampleImage(200, 200, \Imagick::FILTER_LANCZOS, 1); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | resampleImage() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/119_Imagick_sepiaToneImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, sepiaToneImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->sepiaToneImage($sepia); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | sepiaToneImage($sepia) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/011_polygon.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test polygon method arguments 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | polygon(array( 13 | array('x' => 1, 'y' => 2), 14 | array('x' => 'hello', 'y' => array()) 15 | )); 16 | 17 | echo "pass\n"; 18 | 19 | } catch (Exception $e) { 20 | echo "fail\n"; 21 | } 22 | 23 | try { 24 | $draw->polygon(array(array())); 25 | echo "fail\n"; 26 | } catch (ImagickDrawException $e) { 27 | echo "pass\n"; 28 | } 29 | 30 | ?> 31 | --EXPECTF-- 32 | pass 33 | pass -------------------------------------------------------------------------------- /tests/036_Imagick_blueShiftImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, blueShiftImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->blueShiftImage($blueShift); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | blueShiftImage($blueShift) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/131_Imagick_setOption_case2.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setOption 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 14 | $imagick->setImageFormat('png'); 15 | $imagick->setOption('png:format', $format); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | renderPNG($format) ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/099_Imagick_oilPaintImage_sigma.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, oilPaintImageWithSigma 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->oilPaintImageWithSigma($radius, 2.0); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | oilPaintImage($radius) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/109_Imagick_rollImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, rollImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->rollimage($rollX, $rollY); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | rollImage($rollX, $rollY) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/bug64015.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test PHP bug #64015 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | getImageLength()); 9 | 10 | // Both should return filesize in bytes. 11 | 12 | var_dump($im->getImageLength()); 13 | var_dump($im->getImageSize()); 14 | 15 | // All cases below now return 0; 16 | $cloned_im = clone $im; 17 | var_dump($im->getImageLength()); 18 | var_dump($im->getImageSize()); 19 | echo "OK" , PHP_EOL; 20 | 21 | 22 | ?> 23 | --EXPECTF-- 24 | int(2523) 25 | int(2523) 26 | int(2523) 27 | int(2523) 28 | int(2523) 29 | OK -------------------------------------------------------------------------------- /tests/307_Imagick_levelImageColors.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, levelImageColors 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | levelImageColors( 13 | "rgb(10, 10, 10)", 14 | "rgb(240, 240, 240)", 15 | false 16 | ); 17 | // $imagick->writeImage(__DIR__ . '/levelImageColors_output_image.png'); 18 | $imagick->getImageBlob(); 19 | } 20 | 21 | levelImageColors() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok 26 | -------------------------------------------------------------------------------- /tests/bug_72226.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Allow Imagick exceptions to be extended. 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | 22 | --EXPECTF-- 23 | -------------------------------------------------------------------------------- /tests/066_Imagick_embossImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, embossImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->embossImage($radius, $sigma); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | embossImage($radius, $sigma) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/166_Imagick_waveImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, waveImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->waveImage($amplitude, $length); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | waveImage($amplitude, $length) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/012-clone-separation.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Testing that cloned object does not affect the original 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newImage(100, 100, new ImagickPixel("white")); 9 | 10 | $new = clone $im; 11 | $new->thumbnailImage(200, null); 12 | var_dump($im->width, $new->width); 13 | 14 | $new2 = $im->clone(); 15 | $new2->thumbnailImage(200, null); 16 | var_dump($im->width, $new2->width); 17 | 18 | ?> 19 | --EXPECTF-- 20 | int(100) 21 | int(200) 22 | 23 | %s: Imagick::clone method is deprecated and it's use should be avoided in %s on line %d 24 | int(100) 25 | int(200) -------------------------------------------------------------------------------- /tests/013-read-filehandle.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::readImageFile test 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | setImageFormat('jpg'); 15 | $imagick->writeImage($file); 16 | 17 | $imagick->clear(); 18 | 19 | $handle = fopen($file, 'rb'); 20 | $imagick->readImageFile($handle); 21 | 22 | @unlink($file); 23 | 24 | echo 'success'; 25 | 26 | ?> 27 | --CLEAN-- 28 | 31 | --EXPECT-- 32 | success -------------------------------------------------------------------------------- /tests/040_Imagick_charcoalImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, charcoalImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->charcoalImage($radius, $sigma); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | charcoalImage($radius, $sigma) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/157_Imagick_thumbnailImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, thumbnailImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->setbackgroundcolor('rgb(64, 64, 64)'); 16 | $imagick->thumbnailImage(100, 100, true, true); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | thumbnailImage() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /util/check_fonts.php: -------------------------------------------------------------------------------- 1 | "; 10 | 11 | $fontList = \Imagick::queryFonts(); 12 | 13 | if (count($fontList) === 0) { 14 | echo "There are no fonts available, so something is wrong.\n"; 15 | exit(-1); 16 | } 17 | 18 | printf("There are %d fonts:\n", count($fontList)); 19 | 20 | foreach ($fontList as $fontName) { 21 | echo " " . $fontName . "\n"; 22 | } 23 | 24 | -------------------------------------------------------------------------------- /tests/111_Imagick_rotateImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, rotateImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->rotateimage($color, $angle); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | rotateImage($angle, $color) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/078_Imagick_gammaImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, gammaImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->gammaImage($gamma, $channel); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | gammaImage($gamma, $channel) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/132_Imagick_setOption_case3.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setOption 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 13 | $imagick->setImageFormat('png'); 14 | $imagick->setOption('png:bit-depth', '16'); 15 | $imagick->setOption('png:color-type', 6); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | renderCustomBitDepthPNG() ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/312_Imagick_colorThresholdImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, colorThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | colorThresholdImage( 14 | "rgb(10, 10, 10)", 15 | "rgb(240, 240, 240)" 16 | ); 17 | // $imagick->writeImage(__DIR__ . '/colorThresholdImage_output_image.png'); 18 | $imagick->getImageBlob(); 19 | } 20 | 21 | colorThresholdImage() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok 26 | -------------------------------------------------------------------------------- /tests/329_imagick_getImageBlob_empty.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::getImageBlob behaviour on invalid images 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(200, 200, "xc:red"); 12 | $result = $imagick->getImageBlob(); 13 | echo "Imagick failed to throw exception" . PHP_EOL; 14 | } catch (ImagickException $e) { 15 | echo "ImagickException: " . $e->getMessage() . PHP_EOL; 16 | } 17 | 18 | echo "Fin.\n"; 19 | 20 | ?> 21 | --EXPECTF-- 22 | ImagickException: Failed to get the image contents (empty or invalid image?) 23 | Fin. -------------------------------------------------------------------------------- /tests/116_Imagick_separateImageChannel_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, separateImageChannel 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->separateimagechannel($channel); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | separateImageChannel($channel) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/152_Imagick_swirlImageWithMethod_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, swirlImageWithMethod 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->swirlImageWithMethod($swirl, Imagick::INTERPOLATE_BILINEAR); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | swirlImageWithMethod($swirl) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/331_Imagick_getImagesBlob_empty.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::getImagesBlob behaviour on invalid images 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(200, 200, "xc:red"); 12 | $result = $imagick->getImagesBlob(); 13 | echo "Imagick failed to throw exception" . PHP_EOL; 14 | } catch (ImagickException $e) { 15 | echo "ImagickException: " . $e->getMessage() . PHP_EOL; 16 | } 17 | 18 | echo "Fin.\n"; 19 | 20 | ?> 21 | --EXPECTF-- 22 | ImagickException: Failed to get the image contents (empty or invalid image?) 23 | Fin. 24 | -------------------------------------------------------------------------------- /docker/developing/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:11-slim 2 | 3 | USER root 4 | 5 | # Get Debian up-to-date 6 | RUN apt-get update -qq \ 7 | && DEBIAN_FRONTEND=noninteractive apt-get install -y \ 8 | apt-transport-https autoconf bison bsdmainutils ca-certificates curl \ 9 | gcc git gnupg lsb-release make pkg-config re2c wget \ 10 | libpng-dev libjpeg-dev ghostscript libxml2-dev libfreetype6-dev \ 11 | libonig-dev libcurl4-openssl-dev libwebp-dev vim \ 12 | strace valgrind libtiff5-dev libfftw3-dev libde265-dev libheif-dev \ 13 | libssl-dev libzip-dev unzip 14 | 15 | # Make the default directory a useful one 16 | WORKDIR /var/app 17 | 18 | CMD tail -f /var/app/README.md 19 | 20 | -------------------------------------------------------------------------------- /tests/298_Imagick_kmeansImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, kmeansImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | kmeansImage( 15 | 128, 16 | 10, 17 | 5 18 | ); 19 | 20 | $imagick->writeImage(__DIR__ . '/kmeansImage_output_image.png'); 21 | // $imagick->getImageBlob(); 22 | } 23 | 24 | kmeansImage() ; 25 | echo "Ok"; 26 | ?> 27 | --CLEAN-- 28 | 31 | --EXPECTF-- 32 | Ok 33 | -------------------------------------------------------------------------------- /tests/096_Imagick_negateImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, negateImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->negateImage($grayOnly, $channel); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | negateImage($grayOnly, $channel) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/122_Imagick_setImageCompressionQuality_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setImageCompressionQuality 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | //$imagick->setImageCompressionQuality($quality); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | setImageCompressionQuality($quality) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/141_Imagick_sketchImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, sketchImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->sketchimage($radius, $sigma, $angle); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | sketchImage($radius, $sigma, $angle) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/142_Imagick_solarizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, solarizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->solarizeImage($solarizeThreshold * \Imagick::getQuantum()); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | solarizeImage($solarizeThreshold) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/143_Imagick_spreadImageWithMethod_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, spreadImageWithMethod 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->spreadImageWithMethod($radius, Imagick::INTERPOLATE_BILINEAR); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | spreadImageWithMethod($radius) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/306_Imagick_interpolativeResizeImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, interpolativeResizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | interpolativeResizeImage( 15 | 320, 16 | 200, 17 | Imagick::INTERPOLATE_CATROM 18 | ); 19 | // $imagick->writeImage(__DIR__ . '/claheImage_output_image.png'); 20 | $imagick->getImageBlob(); 21 | } 22 | 23 | interpolativeResizeImage() ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok 28 | -------------------------------------------------------------------------------- /tests/168_Imagick_whiteThresholdImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, whiteThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | //TODO needs a control 17 | $imagick->whiteThresholdImage($color); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | whiteThresholdImage($color) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /docker/repro/README.md: -------------------------------------------------------------------------------- 1 | Repro box is up. 2 | 3 | Probably run 'ldconfig /usr/local/lib' so that you can run command line 4 | programs like 'convert -list font' to check if ImageMagick can find fonts. 5 | 6 | You can bash into the container with: 7 | 8 | docker-compose exec repro sh 9 | 10 | Then install ImageMagick with configure something like: 11 | 12 | 13 | ./configure --with-quantum-depth=16 \ 14 | --with-magick-plus-plus=no \ 15 | --without-perl \ 16 | --disable-docs \ 17 | --with-jpeg=yes \ 18 | --with-png=yes \ 19 | --with-fontconfig=yes \ 20 | --with-webp=yes \ 21 | --with-urw-base35-font-dir=/usr/share/fonts/opentype/urw-base35 22 | 23 | And so the long day wears on. -------------------------------------------------------------------------------- /tests/035_Imagick_blackThresholdImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, blackThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->blackthresholdimage($thresholdColor); 17 | $bytes = $imagick->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | blackThresholdImage($thresholdColor) ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Ok -------------------------------------------------------------------------------- /tests/046_Imagick_contrastImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, contrastImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | if ($contrastType != 2) { 17 | $imagick->contrastImage($contrastType); 18 | } 19 | 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | contrastImage($contrastType) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/089_Imagick_medianFilterImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, medianFilterImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 17 | @$imagick->medianFilterImage($radius); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | medianFilterImage($radius) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/297_Imagick_meanShiftImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, meanShiftImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | meanShiftImage( 15 | 10, 16 | 10, 17 | 5 18 | ); 19 | 20 | $imagick->writeImage(__DIR__ . '/meanShiftImage_output_image.png'); 21 | // $imagick->getImageBlob(); 22 | } 23 | 24 | meanShiftImage() ; 25 | echo "Ok"; 26 | ?> 27 | --CLEAN-- 28 | 31 | --EXPECTF-- 32 | Ok 33 | -------------------------------------------------------------------------------- /tests/037_Imagick_blurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, blurImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->blurImage($radius, $sigma, $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | blurImage($radius, $sigma, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/039_Imagick_borderImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, borderImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->borderImage($color, $width, $height); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | borderImage($color, $width, $height) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/100_Imagick_posterizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, posterizeImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 14 | $imagick->posterizeImage($numberLevels, $posterizeType); 15 | $imagick->setImageFormat('png'); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | } 19 | 20 | posterizeImage($posterizeType, $numberLevels) ; 21 | echo "Ok"; 22 | ?> 23 | --EXPECTF-- 24 | Ok -------------------------------------------------------------------------------- /tests/137_Imagick_shearImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, shearImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->shearimage($color, $shearX, $shearY); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | shearImage($color, $shearX, $shearY) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/296_Imagick_waveletDenoiseImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, waveletDenoiseImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | waveletDenoiseImage(5, 5); 16 | $imagick->writeImage(__DIR__ . '/waveletDenoiseImage_output_image.png'); 17 | // $imagick->getImageBlob(); 18 | } 19 | 20 | waveletDenoiseImage() ; 21 | echo "Ok"; 22 | ?> 23 | --CLEAN-- 24 | 27 | --EXPECTF-- 28 | Ok 29 | -------------------------------------------------------------------------------- /tests/106_Imagick_reduceNoiseImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, reduceNoiseImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 17 | @$imagick->reduceNoiseImage($reduceNoise); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | reduceNoiseImage($reduceNoise) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/281_ini_settings_default.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | OpenMP segfault hacks 3 | --SKIPIF-- 4 | 10 | --FILE-- 11 | 28 | --EXPECTF-- 29 | Complete 30 | -------------------------------------------------------------------------------- /shim_php7_to_php8.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #if PHP_VERSION_ID < 80100 4 | #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null) \ 5 | ZEND_BEGIN_ARG_INFO_EX(name, return_reference, required_num_args, allow_null) 6 | #endif 7 | 8 | #if PHP_VERSION_ID < 80000 9 | // Allow the generated stubs to work on previous versions of PHP 10 | 11 | #define ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(pass_by_ref, name, type_hint, allow_null, default_value) \ 12 | ZEND_ARG_INFO(pass_by_ref, name) 13 | 14 | #define ZEND_ARG_OBJ_TYPE_MASK(pass_by_ref, name, class_name, type_mask, default_value) \ 15 | ZEND_ARG_INFO(pass_by_ref, name) 16 | 17 | #define MAY_BE_STRING "" 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /tests/076_Imagick_fxImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, fxImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(200, 200, "xc:white"); 16 | 17 | $fx = 'xx=i-w/2; yy=j-h/2; rr=hypot(xx,yy); (.5-rr/140)*1.2+.5'; 18 | $fxImage = $imagick->fxImage($fx); 19 | 20 | $fxImage->setimageformat('png'); 21 | $bytes = $fxImage->getImageBlob(); 22 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 23 | } 24 | 25 | fxImage() ; 26 | echo "Ok"; 27 | ?> 28 | --EXPECTF-- 29 | Ok -------------------------------------------------------------------------------- /tests/300_Imagick_autoThresholdImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, autoThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | autoThresholdImage(Imagick::AUTO_THRESHOLD_OTSU); 15 | $imagick->writeImage(__DIR__ . '/autoThresholdImage_output_image.png'); 16 | // $imagick->getImageBlob(); 17 | } 18 | 19 | autoThresholdImage() ; 20 | echo "Ok"; 21 | ?> 22 | --CLEAN-- 23 | 26 | --EXPECTF-- 27 | Ok 28 | -------------------------------------------------------------------------------- /tests/135_Imagick_sharpenImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, sharpenImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->sharpenimage($radius, $sigma, $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | sharpenImage($radius, $sigma, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/113_Imagick_rotationalBlurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, rotationalBlurImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->rotationalBlurImage(3); 17 | $imagick->rotationalBlurImage(5); 18 | $imagick->rotationalBlurImage(7); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | rotationalBlurImage() ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/164_Imagick_trimImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, trimImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | 18 | $imagick->borderImage($color, 10, 10); 19 | $imagick->trimImage($fuzz * \Imagick::getQuantum()); 20 | 21 | $bytes = $imagick->getImageBlob(); 22 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 23 | } 24 | 25 | trimImage($color, $fuzz) ; 26 | echo "Ok"; 27 | ?> 28 | --EXPECTF-- 29 | Ok -------------------------------------------------------------------------------- /tests/270_imagick_restoreErrorHandler.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick don't borg the error handler 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | getMessage(); 25 | } 26 | 27 | ?> 28 | --EXPECTF-- 29 | Normal exception 30 | Normal warning is suppressed 31 | -------------------------------------------------------------------------------- /tests/041_Imagick_chopImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, chopImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | $imagick->chopImage($width, $height, $startX, $startY); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | chopImage($startX, $startY, $width, $height) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/048_Imagick_cropImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, cropImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | $imagick->cropImage($width, $height, $startX, $startY); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | cropImage($startX, $startY, $width, $height) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/093_Imagick_modulateImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, modulateImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->modulateImage($brightness, $saturation, $hue); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | modulateImage($hue, $brightness, $saturation) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/130_Imagick_setOption_case1.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setOption 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->setImageFormat('jpg'); 18 | $imagick->setOption('jpeg:extent', $extent); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | renderJPG($extent) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/166_Imagick_waveImageWithMethod_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, waveImageWithMethod 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->waveImageWithMethod($amplitude, $length, Imagick::INTERPOLATE_BILINEAR); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | waveImageWithMethod($amplitude, $length) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/269_ImagickPixel_setColorFromPixel_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixel, setColor 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | setColorFromPixel($red); 17 | 18 | $expected = array( 19 | "r" => 255, 20 | "g" => 0, 21 | "b" => 0, 22 | "a" => 1 23 | ); 24 | 25 | $actualColor = $backgroundColor->getColor(); 26 | 27 | if ($actualColor != $expected) { 28 | echo "Not as expected :\n"; 29 | var_dump($actualColor); 30 | } 31 | 32 | 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok -------------------------------------------------------------------------------- /tests/027_Imagick_adaptiveResizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, adaptiveResizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->adaptiveResizeImage($width, $height, $bestFit); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | adaptiveResizeImage($width, $height, $bestFit) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/144_Imagick_spliceImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, spliceImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | $imagick->spliceImage($width, $height, $startX, $startY); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | spliceImage($startX, $startY, $width, $height) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/330_Imagick_newImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, newImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newImage(100, 100, new ImagickPixel('red'), 'png'); 14 | 15 | // Image format case changed at some point in IM 16 | echo strtolower($image->getImageFormat()); 17 | echo "\n"; 18 | 19 | $image = new Imagick(); 20 | $image->newImage(100, 100, 'blue', null); 21 | 22 | try { 23 | $image->getImageFormat(); 24 | echo "Failed to throw exception"; 25 | } 26 | catch (ImagickException $ie) { 27 | echo $ie->getMessage() . "\n"; 28 | } 29 | 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | png 34 | Image has no format 35 | Ok 36 | -------------------------------------------------------------------------------- /tests/029_Imagick_adaptiveBlurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, adaptiveBlurImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->adaptiveBlurImage($radius, $sigma, $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | adaptiveBlurImage($radius, $sigma, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/080_Imagick_gaussianBlurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, gaussianBlurImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->gaussianBlurImage($radius, $sigma, $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | gaussianBlurImage($radius, $sigma, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/125_Imagick_setImageOrientation_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setImageOrientation 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->setImageOrientation($orientationType); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | setImageOrientation($orientationType) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/159_Imagick_transformImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, transformImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 16 | $newImage = $imagick->transformImage("400x600", "200x300"); 17 | $bytes = $newImage->getImageBlob(); 18 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 19 | } 20 | 21 | transformimage() ; 22 | echo "Ok"; 23 | ?> 24 | --EXPECTF-- 25 | Deprecated: %s Imagick::transformImage() is deprecated in %s 26 | Ok 27 | -------------------------------------------------------------------------------- /tests/167_Imagick_vignetteImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, vignetteImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | $imagick->vignetteImage($blackPoint, $whitePoint, $x, $y); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | vignetteImage($blackPoint, $whitePoint, $x, $y) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/301_Imagick_bilateralBlurImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, bilateralBlurImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | bilateralBlurImage( 16 | 5, 17 | 1, 18 | 2, 19 | 2 20 | ); 21 | 22 | $imagick->writeImage(__DIR__ . '/bilateralBlurImage_output_image.png'); 23 | // $imagick->getImageBlob(); 24 | } 25 | 26 | bilateralBlurImage() ; 27 | echo "Ok"; 28 | ?> 29 | --CLEAN-- 30 | 33 | --EXPECTF-- 34 | Ok 35 | -------------------------------------------------------------------------------- /tests/321_Imagick_getOrientation.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getOrientation/setOrientation 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getOrientation(); 14 | 15 | echo "Orientation is $orientation\n"; 16 | $imagick->setOrientation(Imagick::ORIENTATION_LEFTBOTTOM); 17 | $orientation = $imagick->getOrientation(); 18 | 19 | echo "Orientation is now $orientation\n"; 20 | } 21 | 22 | getOrientation() ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Orientation is 0 27 | Orientation is now 8 28 | Ok 29 | -------------------------------------------------------------------------------- /tests/085_Imagick_haldClutImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, haldClutImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagickPalette = new \Imagick(); 16 | $imagickPalette->newPseudoImage(640, 480, "magick:NETSCAPE"); 17 | 18 | $imagickPalette->sepiatoneImage(55); 19 | $imagick->haldClutImage($imagickPalette); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | haldClutImage() ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/154_Imagick_textureImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, textureImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newImage(640, 480, new \ImagickPixel('pink')); 12 | $image->setImageFormat("jpg"); 13 | 14 | $texture = new \Imagick(); 15 | $texture->newPseudoImage(640, 480, "magick:logo"); 16 | $texture->scaleimage($image->getimagewidth() / 4, $image->getimageheight() / 4); 17 | $image = $image->textureImage($texture); 18 | $bytes = $image; 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | textureImage() ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /docker/fedora/003_cast_color_opacity.php: -------------------------------------------------------------------------------- 1 | newImage(100, 100, "red"); 7 | $im->tintImage("red", "gray(50%)"); 8 | echo "Casting color and opacity succeeded\n"; 9 | } catch (Exception $e) { 10 | echo "Casting color and opacity failed: " , $e->getMessage() . PHP_EOL; 11 | } 12 | 13 | try { 14 | $im = new Imagick(); 15 | $pixel = new ImagickPixel("red"); 16 | $strengthPixel = new ImagickPixel("gray"); 17 | $im->newImage(100, 100, $pixel); 18 | $im->tintImage($pixel, $strengthPixel); 19 | echo "Setting color and opacity without cast succeeded\n"; 20 | } catch (Exception $e) { 21 | echo "Setting color and opacity without cast failed: " , $e->getMessage() . PHP_EOL; 22 | } 23 | 24 | ?> 25 | -------------------------------------------------------------------------------- /tests/028_Imagick_adaptiveSharpenImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, adaptiveSharpenImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->adaptiveSharpenImage($radius, $sigma, $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | adaptiveSharpenImage($radius, $sigma, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/107_Imagick_recolorImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, recolorImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 16 | $remapColor = array( 17 | 1, 0, 0, 18 | 0, 0, 1, 19 | 0, 1, 0, 20 | ); 21 | 22 | @$imagick->recolorImage($remapColor); 23 | 24 | $bytes = $imagick->getImageBlob(); 25 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 26 | } 27 | 28 | recolorImage() ; 29 | echo "Ok"; 30 | ?> 31 | --EXPECTF-- 32 | Ok -------------------------------------------------------------------------------- /tests/276_Imagick_artifacts.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick::setImageArtifact and Imagick::getImageArtifact 3 | --SKIPIF-- 4 | 12 | --FILE-- 13 | setImageArtifact('compose:args', '1,0,-0.5,0.5')); 19 | 20 | var_dump($im->getImageArtifact('compose:args')); 21 | var_dump($im->deleteImageArtifact('compose:args')); 22 | 23 | ?> 24 | --EXPECT-- 25 | bool(true) 26 | string(12) "1,0,-0.5,0.5" 27 | bool(true) -------------------------------------------------------------------------------- /tests/299_Imagick_rangeThresholdImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, rangeThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | rangeThresholdImage( 16 | 32, 17 | 64, 18 | 192, 19 | 228 20 | ); 21 | 22 | $imagick->writeImage(__DIR__ . '/rangeThresholdImage_output_image.png'); 23 | // $imagick->getImageBlob(); 24 | } 25 | 26 | rangeThresholdImage() ; 27 | echo "Ok"; 28 | ?> 29 | --CLEAN-- 30 | 33 | --EXPECTF-- 34 | Ok 35 | -------------------------------------------------------------------------------- /ImagickKernel.stub.php: -------------------------------------------------------------------------------- 1 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 20 | 21 | //x and y do nothing? 22 | $imagick->raiseImage($width, $height, $x, $y, $raise); 23 | $bytes = $imagick->getImageBlob(); 24 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 25 | } 26 | 27 | raiseImage($width, $height, $x, $y, $raise) ; 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | Ok -------------------------------------------------------------------------------- /tests/294_Imagick_cannyEdgeImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, cannyEdgeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | readImage($path); 22 | 23 | $imagick->cannyEdgeImage(10, 4, 0.1, 0.5); 24 | // $imagick->writeImage(__DIR__ . '/cannyEdgeImage_output_image.png'); 25 | $imagick->getImageBlob(); 26 | } 27 | 28 | cannyEdgeImage() ; 29 | echo "Ok"; 30 | ?> 31 | --EXPECTF-- 32 | Ok 33 | -------------------------------------------------------------------------------- /tests/295_Imagick_setSeed.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setSeed 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(256, 256, "plasma:tomato-steelblue"); 18 | 19 | // $imagick->writeImage(__DIR__ . '/cannyEdgeImage_output_image.png'); 20 | // $imagick->getImageBlob(); 21 | 22 | Imagick::setSeed(50); 23 | 24 | $imagick = new \Imagick(); 25 | $imagick->newPseudoImage(256, 256, "plasma:tomato-steelblue"); 26 | 27 | // TODO - compare images. 28 | } 29 | 30 | setSeed() ; 31 | echo "Ok"; 32 | ?> 33 | --EXPECTF-- 34 | Ok 35 | -------------------------------------------------------------------------------- /tests/318_Imagick_getImageRange.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getImageRange 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(320, 240, "gradient:red-blue"); 16 | $values = $imagick->getImageRange(); 17 | 18 | check_value($values, "minima", 0); 19 | check_value($values, "maxima", 65535.0); 20 | } 21 | 22 | getImageRange() ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Value for 'minima' is %f which is close enough to expected %f 27 | Value for 'maxima' is %f which is close enough to expected %f 28 | Ok 29 | -------------------------------------------------------------------------------- /examples/watermark.php: -------------------------------------------------------------------------------- 1 | setFontSize( 50 ); 13 | 14 | /* Read image into object*/ 15 | $Imagick->readImage( '/tmp/test.jpg' ); 16 | 17 | /* Seek the place for the text */ 18 | $ImagickDraw->setGravity( Imagick::GRAVITY_CENTER ); 19 | 20 | /* Write the text on the image */ 21 | $Imagick->annotateImage( $ImagickDraw, 4, 20, 0, "Test Watermark" ); 22 | 23 | /* Set format to png */ 24 | $Imagick->setImageFormat( 'png' ); 25 | 26 | /* Output */ 27 | header( "Content-Type: image/{$Imagick->getImageFormat()}" ); 28 | echo $Imagick->getImageBlob(); 29 | 30 | ?> -------------------------------------------------------------------------------- /tests/094_Imagick_motionBlurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, motionBlurImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | $imagick->motionBlurImage($radius, $sigma, $angle, $channel); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | motionBlurImage($radius, $sigma, $angle, $channel) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/305_Imagick_complexImages.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, complexImages 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "gradient:black-white"); 15 | $imagick->addImage($multiply); 16 | 17 | $imagick->complexImages(Imagick::COMPLEX_OPERATOR_MULTIPLY); 18 | // $imagick->writeImage(__DIR__ . '/complexImages_output_image.png'); 19 | $imagick->getImageBlob(); 20 | } 21 | 22 | complexImages() ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok 27 | -------------------------------------------------------------------------------- /tests/117_Imagick_segmentImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, segmentImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->segmentImage($colorSpace, $clusterThreshold, $smoothThreshold); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | segmentImage($colorSpace, $clusterThreshold, $smoothThreshold) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/326_Imagick_setExtract.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setExtract 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | setExtract("300x200+0+0"); 14 | 15 | $imagick->readImage(__DIR__ . '/Biter_500.jpg'); 16 | 17 | 18 | // $data = $imagick->getImageBlob(); 19 | // 20 | // $new_imagick = new Imagick(); 21 | // $new_imagick->readImageBlob($data); 22 | 23 | echo "Width is " . $imagick->getImageWidth() . "\n"; 24 | echo "Height is " . $imagick->getImageHeight() . "\n"; 25 | } 26 | 27 | setExtract() ; 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | Width is 300 32 | Height is 200 33 | Ok 34 | -------------------------------------------------------------------------------- /tests/087_Imagick_levelImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, levelImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoimage(500, 500, 'gradient:black-white'); 15 | 16 | $imagick->setFormat('png'); 17 | $quantum = $imagick->getQuantum(); 18 | $imagick->levelImage($blackPoint / 100 , $gamma, $quantum * $whitePoint / 100); 19 | 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | levelImage($blackPoint, $gamma, $whitePoint) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/161_Imagick_transformImageColorspace_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, transformImageColorspace 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $imagick->transformimagecolorspace($colorSpace); 18 | $imagick->separateImageChannel($channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | transformImageColorspace($colorSpace, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/325_Imagick_setDepth.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setDepth 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | setDepth(16); 15 | $imagick->newPseudoImage(640, 480, "gradient:red-blue"); 16 | 17 | echo "Depth is " .$imagick->getImageDepth() . "\n"; 18 | 19 | // $imagick->getImageBlob(); 20 | // TODO - check that the depth has actually worked? 21 | // this could be done by generating a gradient, and counting the unique 22 | // numbers of colours, or by looking at gradient artifacts. 23 | } 24 | 25 | setDepth() ; 26 | echo "Ok"; 27 | ?> 28 | --EXPECTF-- 29 | Depth is 16 30 | Ok 31 | -------------------------------------------------------------------------------- /tests/101_Imagick_quantizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, quantizeImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->quantizeImage($numberColors, $colorSpace, $treeDepth, $dither, false); 17 | $imagick->setImageFormat('png'); 18 | $bytes = $imagick->getImageBlob(); 19 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 20 | } 21 | 22 | quantizeImage($numberColors, $colorSpace, $treeDepth, $dither) ; 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/283_ini_settings_set_falsy_zero.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | OpenMP segfault hacks 3 | 4 | --INI-- 5 | imagick.shutdown_sleep_count=0 6 | imagick.set_single_thread=0 7 | --SKIPIF-- 8 | 14 | --FILE-- 15 | 32 | --EXPECTF-- 33 | Complete 34 | -------------------------------------------------------------------------------- /tests/038_Imagick_brightnessContrastImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, brightnessContrastImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->brightnessContrastImage($brightness, $contrast, $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | brightnessContrastImage($brightness, $contrast, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/115_Imagick_selectiveBlurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, selectiveBlurImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | $imagick->selectiveBlurImage($radius, $sigma, $threshold, $channel); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | selectiveBlurImage($radius, $sigma, $threshold, $channel) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/155_Imagick_thresholdImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, thresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $imagick->thresholdimage($threshold * \Imagick::getQuantum(), $channel); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | thresholdimage($threshold, $channel) ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/156_Imagick_tintImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, tintImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(400, 400, 'gradient:black-white'); 18 | 19 | $tint = new \ImagickPixel("rgb($r, $g, $b)"); 20 | $opacity = new \ImagickPixel("rgb(128, 128, 128, $a)"); 21 | $imagick->tintImage($tint, $opacity); 22 | $imagick->setImageFormat('png'); 23 | $bytes = $imagick->getImageBlob(); 24 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 25 | } 26 | 27 | tintImage($r, $g, $b, $a) ; 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | Ok -------------------------------------------------------------------------------- /tests/284_ini_settings_set_truthy_number.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | OpenMP segfault hacks 3 | 4 | --INI-- 5 | imagick.shutdown_sleep_count=20 6 | imagick.set_single_thread=1 7 | --SKIPIF-- 8 | 14 | --FILE-- 15 | 32 | --EXPECTF-- 33 | Complete 34 | -------------------------------------------------------------------------------- /tests/285_ini_settings_set_truthy_string.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | OpenMP segfault hacks 3 | 4 | --INI-- 5 | imagick.shutdown_sleep_count=On 6 | imagick.set_single_thread=On 7 | --SKIPIF-- 8 | 14 | --FILE-- 15 | 32 | --EXPECTF-- 33 | Complete 34 | -------------------------------------------------------------------------------- /tests/047_Imagick_convolveImage_7.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, convolveImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 21 | $kernel = ImagickKernel::fromMatrix($kernelMatrix); 22 | $imagick->convolveImage($kernel); 23 | $bytes = $imagick->getImageBlob(); 24 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 25 | } 26 | 27 | convolveImage($bias, $kernelMatrix) ; 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | Ok -------------------------------------------------------------------------------- /tests/060_Imagick_distortImage_Polar.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $points = array( 17 | 0 18 | ); 19 | 20 | $imagick->setimagebackgroundcolor("#fad888"); 21 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND); 22 | $imagick->distortImage(\Imagick::DISTORTION_DEPOLAR, $points, TRUE); 23 | $bytes = $imagick; 24 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 25 | 26 | echo "Ok"; 27 | ?> 28 | --EXPECTF-- 29 | Ok -------------------------------------------------------------------------------- /tests/163_Imagick_uniqueImageColors_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, uniqueImageColors 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | //Reduce the image to 256 colours nicely. 16 | $imagick->quantizeImage(256, \Imagick::COLORSPACE_YIQ, 0, false, false); 17 | $imagick->uniqueImageColors(); 18 | $imagick->scaleimage($imagick->getImageWidth(), $imagick->getImageHeight() * 20); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | uniqueImageColors() ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Ok -------------------------------------------------------------------------------- /tests/327_Imagick_polaroidImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, polaroidImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | 17 | $imagickDraw = new \ImagickDraw(); 18 | $font = findDefaultFont(); 19 | 20 | $imagickDraw->setFont($font); 21 | 22 | $src1->polaroidImage($imagickDraw, 15); 23 | 24 | $src1->setImageFormat('png'); 25 | $bytes = $src1->getImagesBlob(); 26 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 27 | } 28 | 29 | polaroidImage() ; 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | Ok -------------------------------------------------------------------------------- /tests/053_Imagick_distortImage_RotatedArc.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $degrees = array( 180, 45, 100, 20 ); 16 | $imagick->setimagebackgroundcolor("#fad888"); 17 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND ); 18 | $imagick->distortImage( \Imagick::DISTORTION_ARC, $degrees, TRUE ); 19 | header( "Content-Type: image/jpeg" ); 20 | $bytes = $imagick; 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | 23 | echo "Ok"; 24 | ?> 25 | --EXPECTF-- 26 | Ok -------------------------------------------------------------------------------- /tests/018-clone-length.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test clone length, this is expected upstream behaviour 3 | --SKIPIF-- 4 | = 0x640 && $v ['versionNumber'] < 0x650) 12 | die ('skip seems to be different in this version of ImageMagick'); 13 | ?> 14 | --FILE-- 15 | setImageFormat ('png'); 19 | if ($im->getImageLength()) { 20 | echo "Image created has length" . PHP_EOL; 21 | } 22 | else { 23 | echo "Image created has zero length" . PHP_EOL; 24 | } 25 | 26 | $cloned = clone $im; 27 | $cloned->setImageFormat ('png'); 28 | 29 | var_dump ($cloned->getImageLength ()); 30 | 31 | ?> 32 | --EXPECT-- 33 | Image created has length 34 | int(0) 35 | -------------------------------------------------------------------------------- /tests/165_Imagick_unsharpMaskImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, unsharpMaskImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 20 | $imagick->unsharpMaskImage($radius, $sigma, $amount, $unsharpThreshold); 21 | $bytes = $imagick->getImageBlob(); 22 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 23 | } 24 | 25 | unsharpMaskImage($radius, $sigma, $amount, $unsharpThreshold) ; 26 | echo "Ok"; 27 | ?> 28 | --EXPECTF-- 29 | Ok -------------------------------------------------------------------------------- /tests/322_Imagick_getResolution.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getResolution 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getResolution(); 14 | 15 | echo "x is " . $result['x'] . "\n"; 16 | echo "y is " . $result['y'] . "\n"; 17 | 18 | $imagick->setResolution(120, 60); 19 | $result = $imagick->getResolution(); 20 | 21 | echo "x is now " . $result['x'] . "\n"; 22 | echo "y is now " . $result['y'] . "\n"; 23 | 24 | $imagick->getImageBlob(); 25 | } 26 | 27 | getResolution() ; 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | x is 72 32 | y is 72 33 | x is now 120 34 | y is now 60 35 | Ok 36 | -------------------------------------------------------------------------------- /tests/091_Imagick_linearStretchImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, linearStretchImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | $pixels = $imagick->getImageWidth() * $imagick->getImageHeight(); 18 | $imagick->linearStretchImage($blackThreshold * $pixels, $whiteThreshold * $pixels); 19 | 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | linearStretchImage($blackThreshold, $whiteThreshold) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/055_Imagick_distortImage_ScaleRotateTransform.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $points = array( 16 | 1.5, # scale 150% 17 | 150 # rotate 18 | ); 19 | $imagick->setimagebackgroundcolor("#fad888"); 20 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND ); 21 | $imagick->distortImage( \Imagick::DISTORTION_SCALEROTATETRANSLATE, $points, TRUE ); 22 | $bytes = $imagick; 23 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 24 | 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/095_Imagick_normalizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, normalizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $original = clone $imagick; 17 | $original->cropimage($original->getImageWidth() / 2, $original->getImageHeight(), 0, 0); 18 | $imagick->normalizeImage($channel); 19 | $imagick->compositeimage($original, \Imagick::COMPOSITE_ATOP, 0, 0); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | normalizeImage($channel) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/070_Imagick_equalizeImage_case2.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, equalizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->equalizeImage(); 17 | $imagick->extentImage( 18 | $startX, $startY, $width, $height 19 | ); 20 | 21 | $bytes = $imagick->getImageBlob(); 22 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 23 | } 24 | $startX = 50; 25 | $startY = 50; 26 | $width = 150; 27 | $height = 150; 28 | 29 | extentImage($startX, $startY, $width, $height) ; 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | Ok -------------------------------------------------------------------------------- /tests/bug20636.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test PECL bug #20636 3 | --SKIPIF-- 4 | 13 | --FILE-- 14 | newImage(0, 0, '#dddddd', 'png' ); 23 | 24 | try { 25 | $image->roundCorners(5, 5); 26 | echo "fail\n"; 27 | } catch (ImagickException $e) { 28 | echo "success\n"; 29 | } 30 | 31 | ?> 32 | --EXPECTF-- 33 | success 34 | -------------------------------------------------------------------------------- /tests/013-read-filehandle-file-stream.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::readImageFile, file stream test 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | setImageFormat('jpg'); 16 | $imagick->writeImageFile($handle); 17 | 18 | $imagick->clear(); 19 | 20 | rewind($handle); 21 | 22 | $imagick->readImageFile($handle); 23 | 24 | echo "Width: " . $imagick->getImageWidth() . "\n"; 25 | echo "Height: " . $imagick->getImageHeight() . "\n"; 26 | 27 | @unlink($file); 28 | 29 | echo 'success'; 30 | 31 | ?> 32 | --CLEAN-- 33 | 36 | --EXPECT-- 37 | Width: 70 38 | Height: 46 39 | success 40 | -------------------------------------------------------------------------------- /tests/bug21229.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test PECL bug #21229 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | test = $value; 18 | return $this; 19 | } 20 | 21 | public function getTestValue() { 22 | return $this->test; 23 | } 24 | } 25 | 26 | $test = new ImagickTest("magick:logo"); 27 | $test->setTestValue("test value"); 28 | 29 | echo "Value: " , $test->getTestValue() , PHP_EOL; 30 | 31 | var_dump($test->width, $test->height); 32 | 33 | echo "OK" , PHP_EOL; 34 | 35 | 36 | ?> 37 | --EXPECTF-- 38 | Value: test value 39 | int(112233) 40 | int(%d) 41 | OK -------------------------------------------------------------------------------- /tests/030_Imagick_adaptiveThresholdImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, adaptiveThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | $adaptiveOffsetQuantum = intval($adaptiveOffset * \Imagick::getQuantum()); 19 | $imagick->adaptiveThresholdImage($width, $height, $adaptiveOffsetQuantum); 20 | $bytes = $imagick->getImageBlob(); 21 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 22 | } 23 | 24 | adaptiveThresholdImage($width, $height, $adaptiveOffset) ; 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Ok -------------------------------------------------------------------------------- /tests/319_Imagick_getInterpolateMethod.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getInterpolateMethod/setInterpolateMethod 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getInterpolateMethod(); 16 | echo "Interpolate method is " . $value . "\n"; 17 | $imagick->newPseudoImage(640, 480, "gradient:red-blue"); 18 | 19 | $imagick->setInterpolateMethod(Imagick::INTERPOLATE_BILINEAR); 20 | 21 | $value = $imagick->getInterpolateMethod(); 22 | echo "Interpolate method is now " . $value . "\n"; 23 | } 24 | 25 | getInterpolateMethod() ; 26 | echo "Ok"; 27 | ?> 28 | --EXPECTF-- 29 | Interpolate method is 0 30 | Interpolate method is now 5 31 | Ok 32 | -------------------------------------------------------------------------------- /docker/fedora/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fedora:30 2 | 3 | RUN dnf -y update 4 | 5 | RUN dnf -y install 'dnf-command(config-manager)' 6 | RUN dnf -y install https://rpms.remirepo.net/fedora/remi-release-30.rpm 7 | RUN dnf config-manager --set-enabled remi 8 | RUN dnf config-manager --set-enabled remi-debuginfo 9 | RUN dnf -y install php74 php74-php-devel php74-php-debuginfo ImageMagick-devel gdb git make valgrind 10 | 11 | 12 | WORKDIR /home/app 13 | 14 | #RUN scl enable php74 'php -v' 15 | #RUN git clone https://github.com/Imagick/imagick.git 16 | #RUN scl enable php74 'cd imagick; phpize; ./configure' 17 | # RUN scl enable php74 'cd imagick; make -j4; make test TESTS="-q --show-diff"' 18 | 19 | # RUN scl enable php74 'cd imagick; make -j4; make install' 20 | # RUN scl enable php74 'make test TESTS="-q --show-diff"' || ls -l /imagick 21 | 22 | CMD tail -f -n 1000 /home/app/docker/fedora/debug_notes.txt -------------------------------------------------------------------------------- /tests/153_Imagick_statisticImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, statisticImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 20 | 21 | $imagick->statisticImage( 22 | $statisticType, 23 | $w20, 24 | $h20, 25 | $channel 26 | ); 27 | 28 | $bytes = $imagick->getImageBlob(); 29 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 30 | } 31 | 32 | statisticImage($statisticType, $w20, $h20, $channel) ; 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok -------------------------------------------------------------------------------- /tests/171_ImagickPixel_setColorValue_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixel, setColorValue 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setcolorValue(\Imagick::COLOR_RED, 128); 15 | 16 | $draw->setstrokewidth(1.0); 17 | $draw->setStrokeColor($color); 18 | $draw->setFillColor($color); 19 | $draw->rectangle(200, 200, 300, 300); 20 | 21 | $image->newImage(500, 500, "SteelBlue2"); 22 | $image->setImageFormat("png"); 23 | $image->drawImage($draw); 24 | 25 | $bytes = $image->getImageBlob(); 26 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 27 | } 28 | 29 | setColorValue() ; 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | Ok -------------------------------------------------------------------------------- /tests/258_Imagick_evaluateImages_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, Imagick::evaluateImages 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(256, 256, "gradient:black-white"); 13 | 14 | $imagick2 = new \Imagick(); 15 | $imagick2->newPseudoImage(256, 256, "gradient:red-white"); 16 | 17 | $imagick->addImage($imagick2); 18 | $imagick->setImageFormat('png'); 19 | 20 | $imagick->setIteratorIndex(0); 21 | 22 | $evaluated = $imagick->evaluateImages(\Imagick::EVALUATE_MEAN); 23 | 24 | $evaluated->setImageFormat('png'); 25 | // $evaluated->writeImage("./evaluateTest.png"); 26 | $data = $evaluated->getImageBlob(); 27 | 28 | if (strlen($data) < 50) { 29 | echo "Image data seems too short."; 30 | } 31 | 32 | echo "Ok"; 33 | ?> 34 | --EXPECTF-- 35 | Ok -------------------------------------------------------------------------------- /tests/013-read-filehandle-memory-stream.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::readImageFile, in-memory stream test 3 | --SKIPIF-- 4 | 8 | --XFAIL-- 9 | This test was recently added (July 2024), and appears to be failing on multiple 10 | versions of PHP. It should be fixed, but doesn't need to hold up a release. 11 | --FILE-- 12 | setImageFormat('jpg'); 18 | $imagick->writeImageFile($handle); 19 | 20 | $imagick->clear(); 21 | 22 | rewind($handle); 23 | 24 | $imagick->readImageFile($handle); 25 | 26 | echo "Width: " . $imagick->getImageWidth() . "\n"; 27 | echo "Height: " . $imagick->getImageHeight() . "\n"; 28 | 29 | echo 'success'; 30 | 31 | ?> 32 | --EXPECT-- 33 | Width: 70 34 | Height: 46 35 | success 36 | -------------------------------------------------------------------------------- /regen_arginfo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | VER=0$(php-config --vernum 2>/dev/null) 4 | 5 | if [ $VER -lt 80100 ]; then 6 | 7 | echo "You need php >= 8.1 to run this script" 8 | 9 | elif [ ! -f build/gen_stub.php ]; then 10 | 11 | echo "You need to run phpize once with PHP 8 to get gen_stub.php script" 12 | 13 | else 14 | 15 | set -e 16 | set -x 17 | 18 | php build/gen_stub.php Imagick.stub.php 19 | php util/fixup_arginfo.php Imagick_arginfo.h 20 | 21 | php build/gen_stub.php ImagickDraw.stub.php 22 | php util/fixup_arginfo.php ImagickDraw_arginfo.h 23 | 24 | php build/gen_stub.php ImagickKernel.stub.php 25 | php util/fixup_arginfo.php ImagickKernel_arginfo.h 26 | 27 | php build/gen_stub.php ImagickPixel.stub.php 28 | php util/fixup_arginfo.php ImagickPixel_arginfo.h 29 | 30 | php build/gen_stub.php ImagickPixelIterator.stub.php 31 | php util/fixup_arginfo.php ImagickPixelIterator_arginfo.h 32 | 33 | fi 34 | -------------------------------------------------------------------------------- /tests/051_Imagick_distortImage_Projection.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $points = array( 16 | 0.9,0.3, 17 | -0.2,0.7, 18 | 20,15 19 | ); 20 | $imagick->setimagebackgroundcolor("#fad888"); 21 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND ); 22 | $imagick->distortImage( \Imagick::DISTORTION_AFFINEPROJECTION, $points, TRUE ); 23 | header( "Content-Type: image/jpeg" ); 24 | $bytes = $imagick; 25 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 26 | 27 | echo "Ok"; 28 | ?> 29 | --EXPECTF-- 30 | Ok -------------------------------------------------------------------------------- /tests/088_Imagick_implodeImageWithMethod_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, implodeImageWithMethod 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imagick->implodeImageWithMethod(1.15, $method); 16 | $bytes = $imagick->getImageBlob(); 17 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 18 | // $imagick->writeImage(__DIR__ . "/implodeImageWithMethod_$method.png"); 19 | } 20 | 21 | $methods = [ 22 | Imagick::INTERPOLATE_SPLINE, 23 | Imagick::INTERPOLATE_AVERAGE_16, 24 | Imagick::INTERPOLATE_BACKGROUND_COLOR 25 | ]; 26 | 27 | foreach ($methods as $method) { 28 | implodeImage($method); 29 | } 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | Ok -------------------------------------------------------------------------------- /tests/314_Imagick_getBackgroundColor.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getBackgroundColor 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getBackgroundColor(); 14 | 15 | /** @var $background_color \ImagickPixel */ 16 | echo "Color is: " . $background_color->getColorAsString() . "\n"; 17 | 18 | $imagick->setBackgroundColor('red'); 19 | $background_color = $imagick->getBackgroundColor(); 20 | 21 | /** @var $background_color \ImagickPixel */ 22 | echo "Color is now: " . $background_color->getColorAsString() . "\n"; 23 | 24 | } 25 | 26 | getBackgroundColor() ; 27 | echo "Ok"; 28 | ?> 29 | --EXPECTF-- 30 | Color is: srgb(255,255,255) 31 | Color is now: srgb(255,0,0) 32 | Ok 33 | -------------------------------------------------------------------------------- /tests/104_Imagick_randomThresholdImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, randomThresholdImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | 19 | $imagick->randomThresholdimage( 20 | $lowThreshold * \Imagick::getQuantum(), 21 | $highThreshold * \Imagick::getQuantum(), 22 | $channel 23 | ); 24 | $bytes = $imagick->getImageBlob(); 25 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 26 | } 27 | 28 | randomThresholdimage($lowThreshold, $highThreshold, $channel) ; 29 | echo "Ok"; 30 | ?> 31 | --EXPECTF-- 32 | Ok -------------------------------------------------------------------------------- /tests/050_Imagick_distortImage_Affine.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $points = array( 16 | 0, 0, 17 | 25, 25, 18 | 100, 0, 19 | 100, 50 20 | ); 21 | 22 | $imagick->setimagebackgroundcolor("#fad888"); 23 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND ); 24 | $imagick->distortImage( \Imagick::DISTORTION_AFFINE, $points, TRUE ); 25 | header( "Content-Type: image/jpeg" ); 26 | $bytes = $imagick; 27 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 28 | 29 | echo "Ok"; 30 | ?> 31 | --EXPECTF-- 32 | Ok -------------------------------------------------------------------------------- /tests/185_ImagickDraw_point_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, point 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setFillColor($fillColor); 17 | 18 | for ($x = 0; $x < 10000; $x++) { 19 | $draw->point(rand(0, 500), rand(0, 500)); 20 | } 21 | 22 | $imagick = new \Imagick(); 23 | $imagick->newImage(500, 500, $backgroundColor); 24 | $imagick->setImageFormat("png"); 25 | $imagick->drawImage($draw); 26 | 27 | $bytes = $imagick->getImageBlob(); 28 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 29 | } 30 | 31 | point($fillColor, $backgroundColor) ; 32 | echo "Ok"; 33 | ?> 34 | --EXPECTF-- 35 | Ok -------------------------------------------------------------------------------- /util/Float32Info.php: -------------------------------------------------------------------------------- 1 | sign = $sign; 25 | $this->exponent = $exponent; 26 | $this->mantissa = $mantissa; 27 | } 28 | 29 | public function getSign() 30 | { 31 | return $this->sign; 32 | } 33 | 34 | public function getExponent() 35 | { 36 | return $this->exponent; 37 | } 38 | 39 | public function getMantissa() 40 | { 41 | return $this->mantissa; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /util/FloatInfo.php: -------------------------------------------------------------------------------- 1 | sign = $sign; 25 | $this->exponent = $exponent; 26 | $this->mantissa = $mantissa; 27 | } 28 | 29 | public function getSign() 30 | { 31 | return $this->sign; 32 | } 33 | 34 | public function getExponent() 35 | { 36 | return $this->exponent; 37 | } 38 | 39 | public function getMantissa() 40 | { 41 | return $this->mantissa; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /tests/098_Imagick_orderedPosterizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, orderedPosterizeImage 3 | --SKIPIF-- 4 | 10 | --FILE-- 11 | newPseudoImage(640, 480, "magick:logo"); 18 | 19 | 20 | $imagick->orderedPosterizeImage($orderedPosterizeType); 21 | $imagick->setImageFormat('png'); 22 | 23 | $bytes = $imagick->getImageBlob(); 24 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 25 | } 26 | 27 | orderedPosterizeImage($orderedPosterizeType) ; 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | Deprecated: %s Imagick::orderedPosterizeImage() is deprecated in %S 32 | Ok 33 | -------------------------------------------------------------------------------- /tests/170_ImagickPixel_setColor_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixel, setColor 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setColor('rgba(100%, 75%, 0%, 1.0)'); 15 | 16 | $draw->setstrokewidth(3.0); 17 | $draw->setStrokeColor($strokeColor); 18 | $draw->setFillColor($fillColor); 19 | $draw->rectangle(200, 200, 300, 300); 20 | 21 | $image = new \Imagick(); 22 | $image->newImage(500, 500, "SteelBlue2"); 23 | $image->setImageFormat("png"); 24 | 25 | $image->drawImage($draw); 26 | 27 | $bytes = $image->getImageBlob(); 28 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 29 | } 30 | 31 | setColor() ; 32 | echo "Ok"; 33 | ?> 34 | --EXPECTF-- 35 | Ok -------------------------------------------------------------------------------- /tests/277_Imagick_colorDecisionListImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick::colorDecisionListImage 3 | --SKIPIF-- 4 | 12 | --FILE-- 13 | 19 | 20 | 21 | 0.9 1.2 0.5 22 | 0.4 -0.5 0.6 23 | 1.0 0.8 1.5 24 | 25 | 26 | 0.85 27 | 28 | 29 | 30 | CCC; 31 | 32 | $im->colorDecisionListImage($ccc); 33 | 34 | echo "Ok" 35 | ?> 36 | --EXPECT-- 37 | Ok -------------------------------------------------------------------------------- /tests/281_imagick_houghLineImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, houghLineImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | readImage($path); 22 | $imagick->setbackgroundcolor('rgb(64, 64, 64)'); 23 | $imagick->houghLineImage(20,40, 40); 24 | $imagick->writeImage(__DIR__ . '/houghline_output_image.png'); 25 | } 26 | 27 | houghLineImage() ; 28 | echo "Ok"; 29 | ?> 30 | --CLEAN-- 31 | 37 | --EXPECTF-- 38 | Ok 39 | -------------------------------------------------------------------------------- /tests/102_Imagick_radialBlurImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, radialBlurImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->radialBlurImage(3); 17 | $imagick->radialBlurImage(5); 18 | $imagick->radialBlurImage(7); 19 | $bytes = $imagick->getImageBlob(); 20 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 21 | } 22 | 23 | radialBlurImage() ; 24 | echo "Ok"; 25 | ?> 26 | --EXPECTF-- 27 | Deprecated: %s Imagick::radialBlurImage() is deprecated in %s 28 | 29 | Deprecated: %s Imagick::radialBlurImage() is deprecated in %s 30 | 31 | Deprecated: %s Imagick::radialBlurImage() is deprecated in %s 32 | Ok 33 | -------------------------------------------------------------------------------- /tests/139_Imagick_sigmoidalContrastImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, sigmoidalContrastImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 18 | //Need some stereo image to work with. 19 | $imagick->sigmoidalcontrastimage( 20 | $sharpening, //sharpen 21 | $midpoint, 22 | $sigmoidalContrast * \Imagick::getQuantum() 23 | ); 24 | $bytes = $imagick->getImageBlob(); 25 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 26 | } 27 | 28 | sigmoidalContrastImage($sharpening, $midpoint, $sigmoidalContrast) ; 29 | echo "Ok"; 30 | ?> 31 | --EXPECTF-- 32 | Ok -------------------------------------------------------------------------------- /tests/316_Imagick_getImageKurtosis.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getImageKurtosis 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getImageKurtosis(); 16 | 17 | check_value_posibilities( 18 | $values, 19 | "kurtosis", 20 | [-0.9379261035010518, -0.70925995674921] 21 | ); 22 | check_value_posibilities( 23 | $values, 24 | "skewness", 25 | [0.4562517200972045, 0.56839010636614] 26 | ); 27 | } 28 | 29 | getImageKurtosis() ; 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | Value for 'kurtosis' is %f which is close enough to expected %f 34 | Value for 'skewness' is %f which is close enough to expected %f 35 | Ok -------------------------------------------------------------------------------- /tests/007_thumbnail_fill.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test filling thumbnail with color 3 | --SKIPIF-- 4 | = 0x660 && $v ['versionNumber'] < 0x670) 11 | die ('skip seems to be broken in this version of ImageMagick'); 12 | ?> 13 | --FILE-- 14 | setImageBackgroundColor("pink"); 18 | $im->thumbnailImage(200, 200, true, true); 19 | 20 | $color = $im->getImagePixelColor(5, 5); 21 | if ($color->isPixelSimilar("pink", 0)) 22 | echo "Similar" . PHP_EOL; 23 | else 24 | var_dump ($color->getColorAsString()); 25 | 26 | $color = $im->getImagePixelColor(199, 5); 27 | if ($color->isPixelSimilar("pink", 0)) 28 | echo "Similar" . PHP_EOL; 29 | else 30 | var_dump ($color->getColorAsString()); 31 | ?> 32 | --EXPECT-- 33 | Similar 34 | Similar -------------------------------------------------------------------------------- /tests/303_Imagick_averageImages.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, averageImages 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:LOGO"); 15 | $imagick2 = new \Imagick(); 16 | $imagick2->newPseudoImage(640, 480, "gradient:black-white"); 17 | 18 | 19 | $imagick->addImage($imagick2); 20 | $imagick->setIteratorIndex(0); 21 | 22 | $result_imagick = $imagick->averageImages(); 23 | $result_imagick->setImageFormat('png'); 24 | $result_imagick->writeImage(__DIR__ . '/averageImages_output_image.png'); 25 | $result_imagick->getImageBlob(); 26 | } 27 | 28 | averageImages() ; 29 | echo "Ok"; 30 | ?> 31 | --CLEAN-- 32 | 35 | --EXPECTF-- 36 | Ok 37 | -------------------------------------------------------------------------------- /tests/317_Imagick_getImageMean.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getImageMean 3 | --SKIPIF-- 4 | 11 | --FILE-- 12 | getImageMean(); 19 | 20 | check_value_with_epsilon($values, "mean", 29267.518515000003, 0.2); 21 | check_value_with_epsilon($values, "standard_deviation", 18075.35838235082, 0.2); 22 | } 23 | 24 | getImageMean(); 25 | echo "Ok"; 26 | ?> 27 | --EXPECTF-- 28 | Value for 'mean' is %f which is close enough to expected %f 29 | Value for 'standard_deviation' is %f which is close enough to expected %f 30 | Ok 31 | -------------------------------------------------------------------------------- /tests/160_Imagick_transparentPaintImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, transparentPaintImage 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 15 | 16 | //Need to be in a format that supports transparency 17 | $imagick->setimageformat('png'); 18 | 19 | $imagick->transparentPaintImage( 20 | $color, $alpha, $fuzz * \Imagick::getQuantum(), false 21 | ); 22 | 23 | //Not required, but helps tidy up left over pixels 24 | $imagick->despeckleimage(); 25 | 26 | $bytes = $imagick->getImageBlob(); 27 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 28 | } 29 | 30 | transparentPaintImage($color, $alpha, $fuzz) ; 31 | echo "Ok"; 32 | ?> 33 | --EXPECTF-- 34 | Ok -------------------------------------------------------------------------------- /tests/288_imagick_prevent_zero_size_images.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Prevent zero dimension images and check exception 3 | --SKIPIF-- 4 | 10 | --FILE-- 11 | newPseudoImage(0, 100, "magick:logo"); 16 | $im->newPseudoImage(100, 0, "magick:logo"); 17 | 18 | ini_set("imagick.allow_zero_dimension_images", 1); 19 | $im->newPseudoImage(0, 100, "magick:logo"); 20 | echo "Well done, you have a zero dimension image. Now what?\n"; 21 | 22 | echo "Ok"; 23 | 24 | ?> 25 | --EXPECTF-- 26 | Deprecated: Creating images with zero columns is deprecated. If you think you need to do this, please open an issue at https://phpimagick.com/issues in %s on line %d 27 | 28 | Deprecated: Creating images with zero rows is deprecated. If you think you need to do this, please open an issue at https://phpimagick.com/issues in %s on line %d 29 | Well done, you have a zero dimension image. Now what? 30 | Ok -------------------------------------------------------------------------------- /tests/328_Imagick_polaroidImageWithTextAndMethod_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, polaroidWithTextAndMethod 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | 17 | $imagickDraw = new \ImagickDraw(); 18 | $font = findDefaultFont(); 19 | $imagickDraw->setFont($font); 20 | 21 | $src1->polaroidWithTextAndMethod( 22 | $imagickDraw, 23 | 15, 24 | "Hello world!", 25 | Imagick::INTERPOLATE_SPLINE 26 | ); 27 | 28 | $src1->setImageFormat('png'); 29 | $bytes = $src1->getImagesBlob(); 30 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 31 | } 32 | 33 | polaroidWithTextAndMethod() ; 34 | echo "Ok"; 35 | ?> 36 | --EXPECTF-- 37 | Ok -------------------------------------------------------------------------------- /docker/testing7_2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:9 2 | 3 | USER root 4 | 5 | # Get Debian up-to-date 6 | RUN apt-get update -qq \ 7 | && DEBIAN_FRONTEND=noninteractive apt-get install -y git \ 8 | mariadb-client wget curl \ 9 | ca-certificates lsb-release apt-transport-https gnupg bsdmainutils 10 | 11 | # Install 3rd party PHP 7.2 packages 12 | RUN echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee -a /etc/apt/sources.list.d/php.list 13 | RUN curl -L https://packages.sury.org/php/apt.gpg | apt-key add - 14 | 15 | RUN apt-get update -qq \ 16 | && DEBIAN_FRONTEND=noninteractive apt-get install -y php7.2 php7.2-common php7.2-cli php7.2-fpm \ 17 | php7.2-mysql php7.2-curl php7.2-xml php7.2-mbstring \ 18 | php7.2-intl php7.2-redis php7.2-zip php7.2-sqlite \ 19 | php7.2-imagick 20 | 21 | # Make the default directory you 22 | WORKDIR /var/app 23 | 24 | # Run the process that this container will serve 25 | 26 | CMD tail -f /var/app/docker/testing7_2/README.md 27 | -------------------------------------------------------------------------------- /tests/059_Imagick_distortImage_Polar.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 16 | $points = array( 17 | 0 18 | ); 19 | 20 | //Only do partial arc 21 | // $points = array( 22 | // 60,20, 0,0, -60,60 23 | // ); 24 | 25 | // HorizontalTile 26 | 27 | $imagick->setimagebackgroundcolor("#fad888"); 28 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_HORIZONTALTILE); 29 | $imagick->distortImage(\Imagick::DISTORTION_POLAR, $points, TRUE); 30 | 31 | $bytes = $imagick; 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | 34 | echo "Ok"; 35 | ?> 36 | --EXPECTF-- 37 | Ok -------------------------------------------------------------------------------- /.github/workflows/release_validate.yml: -------------------------------------------------------------------------------- 1 | name: Validate pecl package 2 | 3 | on: 4 | push: 5 | pull_request: 6 | types: [opened, synchronize, reopened] 7 | release: 8 | types: [created] 9 | 10 | jobs: 11 | test_package_valid: 12 | name: basic PHP ${{ matrix.php }} 13 | runs-on: ubuntu-22.04 14 | if: github.ref == 'refs/heads/master' 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | os: [ ubuntu-latest ] 19 | php: [ 5.6 ] 20 | 21 | steps: 22 | - name: Checkout code 23 | uses: actions/checkout@v5 24 | 25 | - name: Setup PHP 26 | uses: shivammathur/setup-php@v2 27 | with: 28 | php-version: ${{ matrix.php }} 29 | 30 | - name: Sanity check package.xml and install ImageMagick 31 | run: | 32 | bash validate_package.sh 33 | for file in tests/*.phpt; do grep $(basename $file) package.xml >/dev/null || (echo "Missing $file from package.xml" ; exit 1); done 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /docker/nixos/Dockerfile: -------------------------------------------------------------------------------- 1 | # Start from the latest NixOS unstable. 2 | FROM nixos/nix 3 | RUN nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs 4 | RUN nix-channel --update 5 | 6 | # Prepare the build environment. 7 | # This is appropriate for production or CI containers, but for 8 | # development environments, it's better to leave the shell.nix 9 | # where it is, so that updates to it don't require a rebuild of the 10 | # container, as that is annoying to do. 11 | # COPY shell.nix /opt 12 | # RUN nix-shell /opt/shell.nix --run 'echo OK' 13 | 14 | # Keep a symlink to ImageMagick headers. 15 | RUN nix-build '' -A imagemagick7.dev -o /opt/imagemagick 16 | 17 | # Prepare the README. 18 | COPY README.md /opt/ 19 | RUN sed -i \ 20 | -e "s|@@IM_DEV@@|$(readlink -f /opt/imagemagick-dev)|g" \ 21 | /opt/README.md 22 | 23 | # Make the default directory the mounted source code. 24 | WORKDIR /var/app 25 | 26 | # Run the process that this container will serve. 27 | CMD tail -f /opt/README.md 28 | -------------------------------------------------------------------------------- /tests/054_Imagick_distortImage_Bilinear.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $points = array( 16 | 0,0, 25,25, # top left 17 | 176,0, 126,0, # top right 18 | 0,135, 0,105, # bottom right 19 | 176,135, 176,135 # bottum left 20 | ); 21 | $imagick->setImageBackgroundColor("#fad888"); 22 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND ); 23 | $imagick->distortImage( \Imagick::DISTORTION_BILINEAR, $points, TRUE ); 24 | header( "Content-Type: image/jpeg" ); 25 | $bytes = $imagick; 26 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 27 | 28 | echo "Ok"; 29 | ?> 30 | --EXPECTF-- 31 | Ok -------------------------------------------------------------------------------- /tests/261_compositeImageGravity.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test compositeImageGravity 3 | --SKIPIF-- 4 | = 0x660 && $v ['versionNumber'] < 0x670) 11 | // die ('skip seems to be broken in this version of ImageMagick'); 12 | ?> 13 | --FILE-- 14 | scaleImage( 22 | $im2->getImageWidth() / 2, 23 | $im2->getImageHeight() / 2 24 | ); 25 | 26 | $im1->compositeImageGravity( 27 | $im2, 28 | \Imagick::COMPOSITE_ATOP, 29 | \Imagick::GRAVITY_NORTHEAST 30 | ); 31 | 32 | $im1->compositeImageGravity( 33 | $im2, 34 | \Imagick::COMPOSITE_ATOP, 35 | \Imagick::GRAVITY_SOUTH 36 | ); 37 | 38 | // $im1->setImageFormat('png'); 39 | // $im1->writeImage('compositeImageGravity.png'); 40 | 41 | echo "Ok"; 42 | 43 | ?> 44 | --EXPECT-- 45 | Ok -------------------------------------------------------------------------------- /docker/repro/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:latest AS env 2 | 3 | USER root 4 | 5 | RUN echo 'deb http://deb.debian.org/debian testing main' >> /etc/apt/sources.list 6 | 7 | # Get Debian up-to-date 8 | RUN apt-get update -qq \ 9 | && DEBIAN_FRONTEND=noninteractive apt-get install -y \ 10 | apt-transport-https autoconf bison bsdmainutils ca-certificates curl \ 11 | gcc git gnupg lsb-release make pkg-config re2c wget \ 12 | libpng-dev libjpeg-dev ghostscript libxml2-dev libfreetype6-dev \ 13 | libonig-dev libwebp-dev vim strace valgrind \ 14 | libssl-dev libcurl4-openssl-dev fontconfig fonts-urw-base35 15 | 16 | RUN echo "Probably run 'ldconfig /usr/local/lib' so that you can run command line programs like " 17 | RUN echo "'convert -list font' to check if ImageMagick can find fonts." 18 | RUN echo "" 19 | RUN echo "****************************" 20 | RUN echo "****************************" 21 | 22 | # Make the default directory you 23 | WORKDIR /var/app 24 | 25 | CMD tail -f -n 1000 /var/app/docker/repro/README.md 26 | 27 | -------------------------------------------------------------------------------- /tests/003_cast_color_opacity.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Casting color and opacity to pixel 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newImage(100, 100, "red"); 12 | $im->tintImage("red", "gray(50%)"); 13 | echo "Casting color and opacity succeeded\n"; 14 | } catch (Exception $e) { 15 | echo "Casting color and opacity failed: " , $e->getMessage() . PHP_EOL; 16 | } 17 | 18 | try { 19 | $im = new Imagick(); 20 | $pixel = new ImagickPixel("red"); 21 | $strengthPixel = new ImagickPixel("gray"); 22 | $im->newImage(100, 100, $pixel); 23 | $im->tintImage($pixel, $strengthPixel); 24 | echo "Setting color and opacity without cast succeeded\n"; 25 | } catch (Exception $e) { 26 | echo "Setting color and opacity without cast failed: " , $e->getMessage() . PHP_EOL; 27 | } 28 | 29 | ?> 30 | --EXPECTF-- 31 | --- Testing casts 32 | Casting color and opacity succeeded 33 | Setting color and opacity without cast succeeded -------------------------------------------------------------------------------- /tests/133_Imagick_setSamplingFactors_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setSamplingFactors 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, "magick:logo"); 14 | $imagick->setImageFormat('jpg'); 15 | $imagick->setSamplingFactors(array('2x2', '1x1', '1x1')); 16 | 17 | $compressed = $imagick->getImageBlob(); 18 | 19 | 20 | $reopen = new \Imagick(); 21 | $reopen->readImageBlob($compressed); 22 | 23 | $reopen->resizeImage( 24 | $reopen->getImageWidth() * 4, 25 | $reopen->getImageHeight() * 4, 26 | \Imagick::FILTER_POINT, 27 | 1 28 | ); 29 | 30 | $bytes = $reopen->getImageBlob(); 31 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 32 | } 33 | 34 | setSamplingFactors() ; 35 | echo "Ok"; 36 | ?> 37 | --EXPECTF-- 38 | Ok -------------------------------------------------------------------------------- /tests/324_Imagick_polynomialImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, polynomialImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage( 15 | $imagick->getImageWidth(), 16 | $imagick->getImageHeight(), 17 | "gradient:black-white" 18 | ); 19 | 20 | $imagick->addImage($imagick_gradient); 21 | 22 | $terms = [1, 1, 0.1, 0.1]; 23 | 24 | // is 2 x (number_terms + 1 (the constant). 25 | $imagick->polynomialImage($terms); 26 | $imagick->writeImage(__DIR__ . '/polynomialImage_output_image.png'); 27 | $imagick->getImageBlob(); 28 | } 29 | 30 | polynomialImage() ; 31 | echo "Ok"; 32 | ?> 33 | --CLEAN-- 34 | 37 | --EXPECTF-- 38 | Ok 39 | -------------------------------------------------------------------------------- /tests/172_ImagickPixel_setColorValueQuantum_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixel, setColorValueQuantum 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | getQuantumRange(); 13 | 14 | $draw = new \ImagickDraw(); 15 | $color = new \ImagickPixel('blue'); 16 | $color->setcolorValueQuantum(\Imagick::COLOR_RED, (int)(128 * $quantumRange['quantumRangeLong'] / 256)); 17 | 18 | $draw->setstrokewidth(1.0); 19 | $draw->setStrokeColor($color); 20 | $draw->setFillColor($color); 21 | $draw->rectangle(200, 200, 300, 300); 22 | 23 | $image->newImage(500, 500, "SteelBlue2"); 24 | $image->setImageFormat("png"); 25 | 26 | $image->drawImage($draw); 27 | 28 | $bytes = $image->getImageBlob(); 29 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 30 | } 31 | 32 | setColorValueQuantum() ; 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok 37 | -------------------------------------------------------------------------------- /docker/testing8_0/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:9 2 | 3 | USER root 4 | 5 | # Get Debian up-to-date 6 | RUN apt-get update -qq \ 7 | && DEBIAN_FRONTEND=noninteractive apt-get install -y git \ 8 | mariadb-client wget curl \ 9 | ca-certificates lsb-release apt-transport-https gnupg bsdmainutils 10 | 11 | 12 | RUN echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee -a /etc/apt/sources.list.d/php.list 13 | RUN curl -L https://packages.sury.org/php/apt.gpg | apt-key add - 14 | 15 | RUN apt-get update -qq \ 16 | && DEBIAN_FRONTEND=noninteractive apt-get install -y php8.0 php8.0-common php8.0-cli php8.0-fpm \ 17 | php8.0-mysql php8.0-curl php8.0-xml php8.0-mbstring \ 18 | php8.0-intl php8.0-redis php8.0-zip php8.0-sqlite \ 19 | # How weird is this? Able to use Imagick when I haven't done a release for PHP 8 yet. 20 | php8.0-imagick 21 | 22 | # Make the default directory you 23 | WORKDIR /var/app 24 | 25 | # Run the process that this container will serve 26 | 27 | CMD tail -f /var/app/docker/testing8_0/README.md 28 | -------------------------------------------------------------------------------- /tests/179_ImagickDraw_line_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, line 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setFillColor($fillColor); 18 | 19 | $draw->setStrokeWidth(2); 20 | $draw->setFontSize(72); 21 | 22 | $draw->line(125, 70, 100, 50); 23 | $draw->line(350, 170, 100, 150); 24 | 25 | $imagick = new \Imagick(); 26 | $imagick->newImage(500, 500, $backgroundColor); 27 | $imagick->setImageFormat("png"); 28 | $imagick->drawImage($draw); 29 | 30 | $bytes = $imagick->getImageBlob(); 31 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 32 | } 33 | 34 | line($strokeColor, $fillColor, $backgroundColor) ; 35 | echo "Ok"; 36 | ?> 37 | --EXPECTF-- 38 | Ok -------------------------------------------------------------------------------- /tests/062_Imagick_distortImage_BarrelInverse.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | 20 | $points = array( 21 | //0.2, 0.0, 0.0, 1.0 22 | 0.2, 0.1, 0.0, 1.0 23 | ); 24 | 25 | $imagick->setimagebackgroundcolor("#fad888"); 26 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_EDGE); 27 | $imagick->distortImage(\Imagick::DISTORTION_BARRELINVERSE, $points, TRUE); 28 | $bytes = $imagick; 29 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 30 | 31 | echo "Ok"; 32 | ?> 33 | --EXPECTF-- 34 | Ok -------------------------------------------------------------------------------- /tests/092_Imagick_mergeImageLayers_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, mergeImageLayers 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(640, 480, $imageName); 23 | $imagick->addImage($nextImage); 24 | } 25 | 26 | $imagick->resetIterator(); 27 | 28 | $imagick->setImageFormat('png'); 29 | 30 | $result = $imagick->mergeImageLayers($layerMethodType); 31 | $bytes = $result->getImageBlob(); 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | mergeImageLayers($layerMethodType); 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok 40 | -------------------------------------------------------------------------------- /tests/121_Imagick_setImageBias_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setImageBias 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | 18 | $xKernel = array( 19 | -0.70, 0, 0.70, 20 | -0.70, 0, 0.70, 21 | -0.70, 0, 0.70 22 | ); 23 | 24 | $imagick->setImageBias($bias * \Imagick::getQuantum()); 25 | $imagick->convolveImage($xKernel, \Imagick::CHANNEL_ALL); 26 | 27 | $imagick->setImageFormat('png'); 28 | 29 | $bytes = $imagick->getImageBlob(); 30 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 31 | } 32 | 33 | setImageBias($bias) ; 34 | echo "Ok"; 35 | ?> 36 | --EXPECTF-- 37 | Deprecated: %s Imagick::setImageBias() is deprecated in %s 38 | Ok 39 | -------------------------------------------------------------------------------- /tests/008_newpseudoimage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test pseudo formats 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | newPseudoImage(100, 100, "XC:red"); 10 | var_dump($im->getImageGeometry()); 11 | 12 | $im->newPseudoImage(10, 10, "magick:logo"); 13 | var_dump($im->getImageGeometry()); 14 | 15 | $im->readImage("magick:logo"); 16 | var_dump($im->getImageGeometry()); 17 | 18 | $im->newPseudoImage(10, 10, "rose:"); 19 | var_dump($im->getImageGeometry()); 20 | 21 | try { 22 | $im->newPseudoImage(10, 10, "png:"); 23 | var_dump($im->getImageGeometry()); 24 | } catch (Exception $e) { 25 | echo "fail\n"; 26 | } 27 | 28 | ?> 29 | --EXPECTF-- 30 | array(2) { 31 | ["width"]=> 32 | int(%d) 33 | ["height"]=> 34 | int(%d) 35 | } 36 | array(2) { 37 | ["width"]=> 38 | int(%d) 39 | ["height"]=> 40 | int(%d) 41 | } 42 | array(2) { 43 | ["width"]=> 44 | int(%d) 45 | ["height"]=> 46 | int(%d) 47 | } 48 | array(2) { 49 | ["width"]=> 50 | int(%d) 51 | ["height"]=> 52 | int(%d) 53 | } 54 | fail -------------------------------------------------------------------------------- /tests/047_Imagick_convolveImage_6.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, convolveImage 3 | --SKIPIF-- 4 | 9 | --FILE-- 10 | -1, 15 | 1 => -1, 16 | 2 => -1, 17 | 3 => -1, 18 | 4 => 8, 19 | 5 => -1, 20 | 6 => -1, 21 | 7 => -1, 22 | 8 => -1, 23 | ); 24 | 25 | function convolveImage($bias, $kernelMatrix) { 26 | $imagick = new \Imagick(); 27 | $imagick->newPseudoImage(640, 480, "magick:logo"); 28 | 29 | //$edgeFindingKernel = [-1, -1, -1, -1, 8, -1, -1, -1, -1,]; 30 | 31 | $imagick->setImageBias($bias * \Imagick::getQuantum()); 32 | $imagick->convolveImage($kernelMatrix); 33 | $bytes = $imagick->getImageBlob(); 34 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 35 | } 36 | 37 | convolveImage($bias, $kernelMatrix) ; 38 | echo "Ok"; 39 | ?> 40 | --EXPECTF-- 41 | Deprecated: %s Imagick::setImageBias() is deprecated in %s 42 | Ok 43 | -------------------------------------------------------------------------------- /tests/075_Imagick_floodFillPaintImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, floodFillPaintImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 22 | 23 | $imagick->floodFillPaintImage( 24 | $fillColor, 25 | $fuzz * \Imagick::getQuantum(), 26 | $targetColor, 27 | $x, $y, 28 | $inverse, 29 | $channel 30 | ); 31 | $bytes = $imagick->getImageBlob(); 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | floodFillPaintImage($fillColor, $fuzz, $targetColor, $x, $y, $inverse, $channel) ; 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok -------------------------------------------------------------------------------- /tests/236_Imagick_identify_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, identifyImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 13 | $imagick->setImageFormat('png'); 14 | $data = $imagick->identifyimage(); 15 | 16 | echo "format: " . strtolower($data["format"]) . "\n"; 17 | echo "units: " . strtolower($data["units"]) . "\n"; 18 | echo "type: " . strtolower($data["type"]) . "\n"; 19 | 20 | if (array_key_exists('geometry', $data)) { 21 | $geometry = $data['geometry']; 22 | if (array_key_exists('width', $geometry) && array_key_exists('height', $geometry)) { 23 | printf( 24 | "Image geometry %dx%d", 25 | $geometry['width'], 26 | $geometry['height'] 27 | ); 28 | exit(0); 29 | } 30 | } 31 | 32 | echo "Failed get geometry from identifyimage:\n"; 33 | var_dump($data); 34 | 35 | ?> 36 | --EXPECTF-- 37 | format: png (portable network graphics) 38 | units: undefined 39 | type: palette 40 | Image geometry 640x480 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .libs/ 3 | imagemagick_src/ 4 | php_src/ 5 | 6 | # Object files 7 | *.o 8 | *.lo 9 | 10 | # Libraries 11 | *.lib 12 | *.a 13 | *.la 14 | 15 | # Shared objects (inc. Windows DLLs) 16 | *.dll 17 | *.so 18 | *.so.* 19 | *.dylib 20 | 21 | # Executables 22 | *.exe 23 | *.out 24 | *.app 25 | 26 | # archives 27 | imagick-*.tgz 28 | 29 | # autotools 30 | .deps 31 | .libs 32 | config.cache 33 | config.guess 34 | config.h 35 | config.h.in 36 | config.h.in~ 37 | config.log 38 | config.nice 39 | config.status 40 | config.sub 41 | configure 42 | configure~ 43 | configure.in 44 | configure.ac 45 | conftest 46 | conftest.c 47 | Makefile 48 | Makefile.fragments 49 | Makefile.global 50 | Makefile.objects 51 | acinclude.m4 52 | aclocal.m4 53 | autom4te.cache 54 | build 55 | install-sh 56 | libtool 57 | ltmain.sh 58 | ltmain.sh.backup 59 | missing 60 | mkinstalldirs 61 | modules 62 | run-tests.php 63 | run-tests.log 64 | tmp-php.ini 65 | 66 | # Failed Test results 67 | tests/*.diff 68 | tests/*.exp 69 | tests/*.log 70 | tests/*.php 71 | tests/*.sh 72 | bugReports 73 | data 74 | *.dep 75 | bugs 76 | inkscape 77 | -------------------------------------------------------------------------------- /tests/120_Imagick_setCompressionQuality_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, setCompressionQuality 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 17 | 18 | $imagick = new \Imagick(); 19 | $imagick->setCompressionQuality($quality); 20 | $imagick->newPseudoImage( 21 | $backgroundImagick->getImageWidth(), 22 | $backgroundImagick->getImageHeight(), 23 | 'canvas:white' 24 | ); 25 | 26 | $imagick->compositeImage( 27 | $backgroundImagick, 28 | \Imagick::COMPOSITE_ATOP, 29 | 0, 30 | 0 31 | ); 32 | 33 | $imagick->setFormat("jpg"); 34 | $bytes = $imagick->getImageBlob(); 35 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 36 | } 37 | 38 | setCompressionQuality($quality) ; 39 | echo "Ok"; 40 | ?> 41 | --EXPECTF-- 42 | Ok -------------------------------------------------------------------------------- /tests/320_Imagick_getOptions.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getOptions 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | getOptions(); 14 | 15 | if ($result !== []) { 16 | echo "unexpected contents of options:\n"; 17 | var_dump($result); 18 | } 19 | 20 | $imagick->setOption("jpeg:preserve", "yes"); 21 | 22 | $result = $imagick->getOptions(); 23 | $expected = ["jpeg:preserve" => "yes"]; 24 | 25 | if ($result !== $expected) { 26 | echo "unexpected contents of options:\n"; 27 | var_dump($result); 28 | } 29 | 30 | $imagick->deleteOption("jpeg:preserve"); 31 | $result = $imagick->getOptions(); 32 | 33 | if ($result !== []) { 34 | echo "unexpected contents of options, failed to delete the set one:\n"; 35 | var_dump($result); 36 | } 37 | } 38 | 39 | getOptions() ; 40 | echo "Ok"; 41 | ?> 42 | --EXPECTF-- 43 | Ok 44 | -------------------------------------------------------------------------------- /tests/201_ImagickDraw_setFillAlpha_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, setFillAlpha 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setFillColor($fillColor); 18 | $draw->setStrokeOpacity(1); 19 | $draw->setStrokeWidth(2); 20 | $draw->rectangle(100, 200, 200, 300); 21 | @$draw->setFillAlpha(0.4); 22 | $draw->rectangle(300, 200, 400, 300); 23 | 24 | $imagick = new \Imagick(); 25 | $imagick->newImage(500, 500, $backgroundColor); 26 | $imagick->setImageFormat("png"); 27 | $imagick->drawImage($draw); 28 | 29 | $bytes = $imagick->getImageBlob(); 30 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 31 | } 32 | 33 | setFillAlpha($strokeColor, $fillColor, $backgroundColor) ; 34 | echo "Ok"; 35 | ?> 36 | --EXPECTF-- 37 | Ok -------------------------------------------------------------------------------- /tests/257_Imagick_setImageChannelMask_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, Imagick::exportImagePixels 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(256, 256, "gradient:black-white"); 13 | 14 | $initialMask = $imagick->setImageChannelMask(\Imagick::CHANNEL_RED); 15 | $imagick->brightnessContrastImage(-20, 20); 16 | $imagick->setImageFormat("png"); 17 | $imagick->writeImage(__DIR__ . "/maskTest.png"); 18 | 19 | $redMask = $imagick->setImageChannelMask(\Imagick::CHANNEL_DEFAULT); 20 | 21 | if ($initialMask != \Imagick::CHANNEL_DEFAULT) { 22 | echo "initialMask is not equal to \Imagick::CHANNEL_DEFAULT but instead is $initialMask\n"; 23 | } 24 | 25 | if ($redMask != \Imagick::CHANNEL_RED) { 26 | echo "redMask is not equal to \Imagick::CHANNEL_RED but instead is $redMask\n"; 27 | } 28 | 29 | echo "Ok"; 30 | ?> 31 | --CLEAN-- 32 | 38 | --EXPECTF-- 39 | Ok 40 | -------------------------------------------------------------------------------- /util/analyze_params.php: -------------------------------------------------------------------------------- 1 | getMethods(); 22 | 23 | foreach ($classMethods as $imagickMethod) { 24 | $parameters = $imagickMethod->getParameters(); 25 | foreach ($parameters as $parameter) { 26 | $name = $parameter->getName(); 27 | $nameCounts[$name] = ($nameCounts[$name] ?? 0) + 1; 28 | } 29 | } 30 | 31 | arsort($nameCounts); 32 | 33 | foreach ($nameCounts as $name => $count) { 34 | echo "$name: $count \n"; 35 | } 36 | 37 | echo "\n\n"; 38 | } 39 | -------------------------------------------------------------------------------- /tests/194_ImagickDraw_rectangle_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, rectangle 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 18 | $draw->setFillColor($fillColor); 19 | $draw->setStrokeOpacity(1); 20 | $draw->setStrokeWidth(2); 21 | 22 | $draw->rectangle(200, 200, 300, 300); 23 | $imagick = new \Imagick(); 24 | $imagick->newImage(500, 500, $backgroundColor); 25 | $imagick->setImageFormat("png"); 26 | 27 | $imagick->drawImage($draw); 28 | 29 | $bytes = $imagick->getImageBlob(); 30 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 31 | } 32 | 33 | rectangle($strokeColor, $fillColor, $backgroundColor) ; 34 | echo "Ok"; 35 | ?> 36 | --EXPECTF-- 37 | Ok -------------------------------------------------------------------------------- /tests/202_ImagickDraw_setFillColor_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, setFillColor 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeOpacity(1); 17 | $draw->setStrokeWidth(1.5); 18 | $draw->setStrokeColor($strokeColor); 19 | $draw->setFillColor($fillColor); 20 | $draw->rectangle(50, 50, 150, 150); 21 | 22 | $draw->setFillColor("rgb(200, 32, 32)"); 23 | $draw->rectangle(200, 50, 300, 150); 24 | 25 | $image = new \Imagick(); 26 | $image->newImage(500, 500, $backgroundColor); 27 | $image->setImageFormat("png"); 28 | 29 | $image->drawImage($draw); 30 | 31 | $bytes = $image->getImageBlob(); 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | setFillColor($strokeColor, $fillColor, $backgroundColor) ; 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok -------------------------------------------------------------------------------- /tests/204_ImagickDraw_setFillOpacity_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, setFillOpacity 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setFillColor($fillColor); 18 | $draw->setStrokeOpacity(1); 19 | $draw->setStrokeWidth(2); 20 | 21 | $draw->rectangle(100, 200, 200, 300); 22 | 23 | $draw->setFillOpacity(0.4); 24 | $draw->rectangle(300, 200, 400, 300); 25 | 26 | $imagick = new \Imagick(); 27 | $imagick->newImage(500, 500, $backgroundColor); 28 | $imagick->setImageFormat("png"); 29 | $imagick->drawImage($draw); 30 | 31 | $bytes = $imagick->getImageBlob(); 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | setFillOpacity($strokeColor, $fillColor, $backgroundColor) ; 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok -------------------------------------------------------------------------------- /tests/052_Imagick_distortImage_Arc.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 21 | $degrees = array( 180 ); 22 | $imagick->setimagebackgroundcolor("#fad888"); 23 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND ); 24 | $imagick->distortImage( \Imagick::DISTORTION_ARC, $degrees, TRUE ); 25 | header( "Content-Type: image/jpeg" ); 26 | $bytes = $imagick; 27 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 28 | 29 | echo "Ok"; 30 | ?> 31 | --EXPECTF-- 32 | Ok -------------------------------------------------------------------------------- /tests/019-readimages.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Imagick::readImages 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | readImages (array ( 28 | 'magick:rose', 29 | 'magick:rose', 30 | 'magick:rose', 31 | )); 32 | echo 'OK readImages' . PHP_EOL; 33 | try{ 34 | $imagick->readImages (array ( 35 | 'magick:rose', 36 | 'fail_this_does_not_exist.jpg', 37 | )); 38 | echo 'Fail' . PHP_EOL; 39 | } catch (ImagickException $e) { 40 | echo 'OK readImages exception'. PHP_EOL; 41 | } 42 | 43 | ?> 44 | --EXPECT-- 45 | OK construct exception 46 | OK construct 47 | OK readImages 48 | OK readImages exception -------------------------------------------------------------------------------- /tests/195_ImagickDraw_rotate_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, rotate 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 16 | $draw->setStrokeOpacity(1); 17 | $draw->setFillColor($fillColor); 18 | $draw->rectangle(200, 200, 300, 300); 19 | $draw->setFillColor($fillModifiedColor); 20 | $draw->rotate(15); 21 | $draw->rectangle(200, 200, 300, 300); 22 | 23 | $image = new \Imagick(); 24 | $image->newImage(500, 500, $backgroundColor); 25 | $image->setImageFormat("png"); 26 | $image->drawImage($draw); 27 | 28 | $bytes = $image->getImageBlob(); 29 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 30 | } 31 | 32 | rotate($strokeColor, $fillColor, $backgroundColor, $fillModifiedColor) ; 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok -------------------------------------------------------------------------------- /tests/221_ImagickDraw_setStrokeWidth_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, setStrokeWidth 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeWidth(1); 17 | $draw->setStrokeColor($strokeColor); 18 | $draw->setFillColor($fillColor); 19 | $draw->line(100, 100, 400, 145); 20 | $draw->rectangle(100, 200, 225, 350); 21 | $draw->setStrokeWidth(5); 22 | $draw->line(100, 120, 400, 165); 23 | $draw->rectangle(275, 200, 400, 350); 24 | 25 | $image = new \Imagick(); 26 | $image->newImage(500, 400, $backgroundColor); 27 | $image->setImageFormat("png"); 28 | $image->drawImage($draw); 29 | 30 | $bytes = $image->getImageBlob(); 31 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 32 | } 33 | 34 | setStrokeWidth($strokeColor, $fillColor, $backgroundColor) ; 35 | echo "Ok"; 36 | ?> 37 | --EXPECTF-- 38 | Ok -------------------------------------------------------------------------------- /tests/196_ImagickDraw_scale_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, scale 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setStrokeWidth(4); 18 | $draw->setFillColor($fillColor); 19 | $draw->rectangle(200, 200, 300, 300); 20 | $draw->setFillColor($fillModifiedColor); 21 | $draw->scale(1.4, 1.4); 22 | $draw->rectangle(200, 200, 300, 300); 23 | 24 | $image = new \Imagick(); 25 | $image->newImage(500, 500, $backgroundColor); 26 | $image->setImageFormat("png"); 27 | $image->drawImage($draw); 28 | 29 | $bytes = $image->getImageBlob(); 30 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 31 | } 32 | 33 | scale($strokeColor, $fillColor, $backgroundColor, $fillModifiedColor) ; 34 | echo "Ok"; 35 | ?> 36 | --EXPECTF-- 37 | Ok -------------------------------------------------------------------------------- /tests/213_ImagickDraw_setStrokeAlpha_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, setStrokeAlpha 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setFillColor($fillColor); 18 | $draw->setStrokeWidth(4); 19 | $draw->line(100, 100, 400, 145); 20 | $draw->rectangle(100, 200, 225, 350); 21 | $draw->setStrokeOpacity(0.1); 22 | $draw->line(100, 120, 400, 165); 23 | $draw->rectangle(275, 200, 400, 350); 24 | 25 | $image = new \Imagick(); 26 | $image->newImage(500, 400, $backgroundColor); 27 | $image->setImageFormat("png"); 28 | 29 | $image->drawImage($draw); 30 | 31 | $bytes = $image->getImageBlob(); 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | setStrokeAlpha($strokeColor, $fillColor, $backgroundColor) ; 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok -------------------------------------------------------------------------------- /tests/311_Imagick_channelFxImage.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, channelFxImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | exchange two channels (e.g. red<=>blue) 16 | // => transfer a channel to another (e.g. red=>green) 17 | // , separate channel operations (e.g. red, green) 18 | // | read channels from next input image (e.g. red | green) 19 | // ; write channels to next output image (e.g. red; green; blue) 20 | 21 | function whiteBalanceImage() { 22 | $imagick = new \Imagick(__DIR__ . '/Biter_500.jpg'); 23 | $result = $imagick->channelFxImage("red<=>blue"); 24 | // $result->writeImage(__DIR__ . '/complexImages_output_image.png'); 25 | 26 | $result->getImageBlob(); 27 | } 28 | 29 | whiteBalanceImage() ; 30 | echo "Ok"; 31 | ?> 32 | --EXPECTF-- 33 | Ok 34 | -------------------------------------------------------------------------------- /tests/057_Imagick_distortImage_PerspectiveProjection.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, distortImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 22 | $points = array( 23 | 1.945622, 0.071451, 24 | -12.187838, 0.799032, 25 | 1.276214, -24.470275, 0.006258, 0.000715 26 | ); 27 | $imagick->setimagebackgroundcolor("#fad888"); 28 | $imagick->setImageVirtualPixelMethod( \Imagick::VIRTUALPIXELMETHOD_BACKGROUND); 29 | $imagick->distortImage(\Imagick::DISTORTION_PERSPECTIVEPROJECTION, $points, TRUE); 30 | $bytes = $imagick; 31 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 32 | 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok -------------------------------------------------------------------------------- /util/genSymbols.sh: -------------------------------------------------------------------------------- 1 | 2 | set -x 3 | 4 | ls /home/travis/im/imagemagick-${IMAGEMAGICK_VERSION}/lib 5 | 6 | for arg in libMagickWand-6.Q16.so libMagickWand.so libMagickWand-7.Q16HDRI.so; do 7 | filename="/home/travis/im/imagemagick-${IMAGEMAGICK_VERSION}/lib/${arg}" 8 | if [ -f "$filename" ] 9 | then 10 | nm -gC "$filename" > ./util/symbols.magickwand.txt 11 | fi 12 | done 13 | 14 | for arg in libMagickCore-6.Q16.so libMagickCore.so libMagickCore-7.Q16HDRI.so; do 15 | filename="/home/travis/im/imagemagick-${IMAGEMAGICK_VERSION}/lib/${arg}" 16 | if [ -f "$filename" ] 17 | then 18 | nm -gC "$filename" > ./util/symbols.magickcore.txt 19 | fi 20 | done 21 | 22 | if [ ! -f ./util/symbols.magickwand.txt ]; then 23 | echo "Failed to get symbols for magickwand" 24 | fi 25 | 26 | if [ ! -f ./util/symbols.magickcore.txt ]; then 27 | echo "Failed to get symbols for magickcore" 28 | fi 29 | 30 | 31 | nm -gC ./modules/imagick.so > ./util/symbols.imagick.txt 32 | 33 | # debugging only 34 | # cat ./util/symbols.magickwand.txt 35 | # cat ./util/symbols.magickcore.txt 36 | # cat ./util/symbols.imagick.txt 37 | 38 | php ./util/checkSymbols.php 39 | -------------------------------------------------------------------------------- /tests/112_Imagick_roundCorners_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, roundCorners 3 | --SKIPIF-- 4 | 10 | --FILE-- 11 | newPseudoImage(640, 480, "magick:logo"); 16 | $imagick->setBackgroundColor('red'); 17 | 18 | $imagick->setbackgroundcolor('pink'); 19 | 20 | $x_rounding = 40; 21 | $y_rounding = 40; 22 | $stroke_width = 5; 23 | $displace = 0; 24 | $size_correction = 0; 25 | 26 | $imagick->roundCornersImage( 27 | $x_rounding, 28 | $y_rounding, 29 | $stroke_width, 30 | $displace, 31 | $size_correction 32 | ); 33 | 34 | $bytes = $imagick->getImageBlob(); 35 | $imagick->setImageFormat('png'); 36 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 37 | // $imagick->writeImage(__DIR__ . "/112_round_corner.png"); 38 | } 39 | 40 | roundCorners() ; 41 | echo "Ok"; 42 | ?> 43 | --EXPECTF-- 44 | Ok 45 | -------------------------------------------------------------------------------- /tests/247_ImagickPixelIterator_construct_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixelIterator, construct 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imageIterator = new \ImagickPixelIterator($imagick); 16 | 17 | /* Loop through pixel rows */ 18 | foreach ($imageIterator as $pixels) { 19 | /* Loop through the pixels in the row (columns) */ 20 | foreach ($pixels as $column => $pixel) { 21 | /** @var $pixel \ImagickPixel */ 22 | if ($column % 2) { 23 | /* Paint every second pixel black*/ 24 | $pixel->setColor("rgba(0, 0, 0, 0)"); 25 | } 26 | } 27 | /* Sync the iterator, this is important to do on each iteration */ 28 | $imageIterator->syncIterator(); 29 | } 30 | 31 | $bytes = $imagick; 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | construct() ; 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok -------------------------------------------------------------------------------- /tests/083_Imagick_getPixelIterator_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, getPixelIterator 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imageIterator = $imagick->getPixelIterator(); 16 | 17 | /** @noinspection PhpUnusedLocalVariableInspection */ 18 | foreach ($imageIterator as $row => $pixels) { /* Loop trough pixel rows */ 19 | foreach ($pixels as $column => $pixel) { /* Loop through the pixels in the row (columns) */ 20 | /** @var $pixel \ImagickPixel */ 21 | if ($column % 2) { 22 | $pixel->setColor("rgba(0, 0, 0, 0)"); /* Paint every second pixel black*/ 23 | } 24 | } 25 | $imageIterator->syncIterator(); /* Sync the iterator, this is important to do on each iteration */ 26 | } 27 | 28 | $bytes = $imagick; 29 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 30 | } 31 | 32 | getPixelIterator() ; 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok -------------------------------------------------------------------------------- /tests/215_ImagickDraw_setStrokeColor_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, setStrokeColor 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setFillColor($fillColor); 18 | 19 | $draw->setStrokeWidth(5); 20 | 21 | $draw->line(100, 100, 400, 145); 22 | $draw->rectangle(100, 200, 225, 350); 23 | 24 | $draw->setStrokeOpacity(0.1); 25 | $draw->line(100, 120, 400, 165); 26 | $draw->rectangle(275, 200, 400, 350); 27 | 28 | $image = new \Imagick(); 29 | $image->newImage(500, 400, $backgroundColor); 30 | $image->setImageFormat("png"); 31 | 32 | $image->drawImage($draw); 33 | 34 | $bytes = $image->getImageBlob(); 35 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 36 | } 37 | 38 | setStrokeColor($strokeColor, $fillColor, $backgroundColor) ; 39 | echo "Ok"; 40 | ?> 41 | --EXPECTF-- 42 | Ok -------------------------------------------------------------------------------- /tests/252_ImagickPixelIterator_construct_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickPixelIterator, construct 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 15 | $imageIterator = new \ImagickPixelIterator($imagick); 16 | 17 | /* Loop through pixel rows */ 18 | foreach ($imageIterator as $pixels) { 19 | /* Loop through the pixels in the row (columns) */ 20 | foreach ($pixels as $column => $pixel) { 21 | /** @var $pixel \ImagickPixel */ 22 | if ($column % 2) { 23 | /* Paint every second pixel black*/ 24 | $pixel->setColor("rgba(0, 0, 0, 0)"); 25 | } 26 | } 27 | /* Sync the iterator, this is important to do on each iteration */ 28 | $imageIterator->syncIterator(); 29 | } 30 | 31 | $bytes = $imagick; 32 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 33 | } 34 | 35 | construct() ; 36 | echo "Ok"; 37 | ?> 38 | --EXPECTF-- 39 | Ok 40 | -------------------------------------------------------------------------------- /tests/242_Tutorial_levelizeImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Tutorial, levelizeImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoimage(300, 300, 'gradient:black-white'); 18 | $maxQuantum = $imagick->getQuantum(); 19 | $imagick->evaluateimage(\Imagick::EVALUATE_POW, 1 / $gamma); 20 | 21 | //Adjust the scale from black to white to the new 'distance' between black and white 22 | $imagick->evaluateimage(\Imagick::EVALUATE_MULTIPLY, ($whitePoint - $blackPoint) / 100 ); 23 | 24 | //Add move the black point to it's new value 25 | $imagick->evaluateimage(\Imagick::EVALUATE_ADD, ($blackPoint / 100) * $maxQuantum); 26 | $imagick->setFormat("png"); 27 | 28 | $bytes = $imagick->getImageBlob(); 29 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 30 | } 31 | 32 | levelizeImage($blackPoint, $gamma, $whitePoint) ; 33 | echo "Ok"; 34 | ?> 35 | --EXPECTF-- 36 | Ok -------------------------------------------------------------------------------- /tests/034_Imagick_annotateImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, annotateImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 19 | 20 | $draw = new \ImagickDraw(); 21 | $draw->setStrokeColor($strokeColor); 22 | $draw->setFillColor($fillColor); 23 | 24 | $draw->setStrokeWidth(1); 25 | $draw->setFontSize(36); 26 | 27 | $text = "Imagick is a native php \nextension to create and \nmodify images using the\nImageMagick API."; 28 | 29 | setFontForImagick($imagick); 30 | setFontForImagickDraw($draw); 31 | $imagick->annotateimage($draw, 40, 40, 0, $text); 32 | 33 | $bytes = $imagick->getImageBlob(); 34 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 35 | } 36 | 37 | annotateImage($strokeColor, $fillColor) ; 38 | echo "Ok"; 39 | ?> 40 | --EXPECTF-- 41 | Ok -------------------------------------------------------------------------------- /tests/190_ImagickDraw_popDefs_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test ImagickDraw, popDefs 3 | --SKIPIF-- 4 | 5 | --FILE-- 6 | setStrokeColor($strokeColor); 17 | $draw->setFillColor($fillColor); 18 | $draw->setstrokeOpacity(1); 19 | $draw->setStrokeWidth(2); 20 | $draw->setFontSize(72); 21 | $draw->pushDefs(); 22 | $draw->setStrokeColor('white'); 23 | $draw->rectangle(50, 50, 200, 200); 24 | $draw->popDefs(); 25 | 26 | $draw->rectangle(300, 50, 450, 200); 27 | 28 | $imagick = new \Imagick(); 29 | $imagick->newImage(500, 500, $backgroundColor); 30 | $imagick->setImageFormat("png"); 31 | 32 | $imagick->drawImage($draw); 33 | 34 | $bytes = $imagick->getImageBlob(); 35 | if (strlen($bytes) <= 0) { echo "Failed to generate image.";} 36 | } 37 | 38 | popDefs($strokeColor, $fillColor, $backgroundColor) ; 39 | echo "Ok"; 40 | ?> 41 | --EXPECTF-- 42 | Ok -------------------------------------------------------------------------------- /tests/114_Imagick_scaleImage_basic.phpt: -------------------------------------------------------------------------------- 1 | --TEST-- 2 | Test Imagick, scaleImage 3 | --SKIPIF-- 4 | 8 | --FILE-- 9 | newPseudoImage(640, 480, "magick:logo"); 23 | $imagick->scaleImage($width, $height, $bestFit); 24 | 25 | $imageWidth = $imagick->getImageWidth(); 26 | $imageHeight = $imagick->getImageHeight(); 27 | 28 | $error = false; 29 | 30 | if ($imageWidth != $expectedWidth) { 31 | echo "Width $imageWidth does not match expected.\n"; 32 | $error = true; 33 | } 34 | 35 | if ($imageHeight != $expectedHeight) { 36 | echo "Height $imageHeight does not match expected.\n"; 37 | $error = true; 38 | } 39 | 40 | if ($error) { 41 | echo "test was ".var_export($test, true)."\n"; 42 | }; 43 | } 44 | 45 | 46 | echo "Ok"; 47 | ?> 48 | --EXPECTF-- 49 | Ok --------------------------------------------------------------------------------