cvs: pear /PECL/imagick TODO imagick.c package.xml php_imagick.h /PECL/imagick/examples composite.php

From: Date: Fri, 06 Dec 2002 20:05:44 +0000
Subject: cvs: pear /PECL/imagick TODO imagick.c package.xml php_imagick.h /PECL/imagick/examples composite.php
Groups: php.pear.cvs 
Request: Send a blank email to pear-cvs+get-7757@lists.php.net to get a copy of this message
mcmontero Fri Dec 6 15:05:44 2002 EDT Added files: /pear/PECL/imagick/examples composite.php Modified files: /pear/PECL/imagick TODO imagick.c package.xml php_imagick.h Log: Added imagick_composite() and required IMAGICK_COMPOSITE_OP_* defines.

Index: pear/PECL/imagick/TODO diff -u pear/PECL/imagick/TODO:1.4 pear/PECL/imagick/TODO:1.5 --- pear/PECL/imagick/TODO:1.4 Thu Dec 5 17:17:39 2002 +++ pear/PECL/imagick/TODO Fri Dec 6 15:05:43 2002 @@ -3,7 +3,6 @@ Nov 20, 2002 o better commenting (adding protos) -o imagick_composite() => CompositeImage() o imagick_append() => AppendImages() o imagick_average() => AverageImages() o imagick_clip() => ClipImage() Index: pear/PECL/imagick/imagick.c diff -u pear/PECL/imagick/imagick.c:1.15 pear/PECL/imagick/imagick.c:1.16 --- pear/PECL/imagick/imagick.c:1.15 Thu Dec 5 17:17:39 2002 +++ pear/PECL/imagick/imagick.c Fri Dec 6 15:05:43 2002 @@ -16,7 +16,7 @@ | Christian Stocker (chregu@bitflux.ch) | +----------------------------------------------------------------------+ - $Id: imagick.c,v 1.15 2002/12/05 22:17:39 mcmontero Exp $ + $Id: imagick.c,v 1.16 2002/12/06 20:05:43 mcmontero Exp $ */ #ifdef HAVE_CONFIG_H @@ -220,6 +220,14 @@ /***** + Composite an image. + + *****/ + + PHP_FE( imagick_composite, NULL ) + + /***** + Clean up. *****/ @@ -358,6 +366,109 @@ REGISTER_LONG_CONSTANT( "IMAGICK_LOWER", 0, CONST_CS | CONST_PERSISTENT ) ; + /***** + + Register constants for composite types. + + *****/ + + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_UNDEFINED", + UndefinedCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_OVER", + OverCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_IN", + InCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_OUT", + OutCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_ATOP", + AtopCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_XOR", + XorCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_PLUS", + PlusCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_MINUS", + MinusCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_ADD", + AddCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_SUBTRACT", + SubtractCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_DIFFERENCE", + DifferenceCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_MULTIPLY", + MultiplyCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_BUMPMAP", + BumpmapCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_COPY", + CopyCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_COPYRED", + CopyRedCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_COPYGREEN", + CopyGreenCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_COPYBLUE", + CopyBlueCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_COPYOPACITY", + CopyOpacityCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_CLEAR", + ClearCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_DISSOLVE", + DissolveCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_DISPLACE", + DisplaceCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_MODULATE", + ModulateCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_THRESHOLD", + ThresholdCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_NONE", + NoCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_DARKEN", + DarkenCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_LIGHTEN", + LightenCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_HUE", + HueCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_SATURATE", + SaturateCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_COLORIZE", + ColorizeCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_LUMINIZE", + LuminizeCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_SCREEN", + ScreenCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + REGISTER_LONG_CONSTANT( "IMAGICK_COMPOSITE_OP_OVERLAY", + OverlayCompositeOp, + CONST_CS | CONST_PERSISTENT ) ; + return SUCCESS ; } @@ -4065,6 +4176,67 @@ OrderedDitherImage( handle->image ) ; if ( _php_imagick_is_error( handle ) ) + { + RETURN_FALSE ; + } + + RETURN_TRUE ; +} + +/*****************************************************************************/ + +/****************************************************************************** + * + * Composite an image. + * + */ + +PHP_FUNCTION( imagick_composite ) +{ + zval* handle_id_1 ; /* the handle identifier coming from + the PHP environment */ + long composite_type ; /* one of IMAGICK_COMPOSITE_OP_* */ + zval* handle_id_2 ; /* the handle identifier coming from + the PHP environment */ + long x_offset ; /* the column offset of the composited + image */ + long y_offset ; /* the row offset of the composited + image */ + imagick_t* handle_1 ; /* the actual imagick_t struct for the + handle */ + imagick_t* handle_2 ; /* the actual imagick_t struct for the + handle */ + + if ( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "rlrll", + &handle_id_1, &composite_type, &handle_id_2, + &x_offset, &y_offset ) == FAILURE ) + { + return ; + } + + handle_1 = _php_imagick_get_handle_struct_from_list( &handle_id_1 TSRMLS_CC ) ; + if ( !handle_1 ) + { + php_error( E_WARNING, "%s(): handle 1 is invalid", + get_active_function_name( TSRMLS_C ) ) ; + RETURN_FALSE ; + } + + handle_2 = _php_imagick_get_handle_struct_from_list( &handle_id_2 TSRMLS_CC ) ; + if ( !handle_2 ) + { + php_error( E_WARNING, "%s(): handle 2 is invalid", + get_active_function_name( TSRMLS_C ) ) ; + RETURN_FALSE ; + } + + _php_imagick_clear_errors( handle_1 ) ; + _php_imagick_clear_errors( handle_2 ) ; + + CompositeImage( handle_1->image, ( CompositeOperator )composite_type, + handle_2->image, x_offset, y_offset ) ; + if ( _php_imagick_is_error( handle_1 ) || + _php_imagick_is_error( handle_2 ) ) { RETURN_FALSE ; } Index: pear/PECL/imagick/package.xml diff -u pear/PECL/imagick/package.xml:1.15 pear/PECL/imagick/package.xml:1.16 --- pear/PECL/imagick/package.xml:1.15 Thu Dec 5 17:17:39 2002 +++ pear/PECL/imagick/package.xml Fri Dec 6 15:05:43 2002 @@ -37,6 +37,8 @@ imagick_isopaqueimage() imagick_ispaletteimage() imagick_ordereddither() + imagick_composite() + - Added IMAGICK_COMPOSITE_OP_* for use with imagick_composite(). </notes> </release> <release> Index: pear/PECL/imagick/php_imagick.h diff -u pear/PECL/imagick/php_imagick.h:1.9 pear/PECL/imagick/php_imagick.h:1.10 --- pear/PECL/imagick/php_imagick.h:1.9 Thu Dec 5 17:17:39 2002 +++ pear/PECL/imagick/php_imagick.h Fri Dec 6 15:05:43 2002 @@ -16,7 +16,7 @@ | Christian Stocker (chregu@bitflux.ch) | +----------------------------------------------------------------------+ - $Id: php_imagick.h,v 1.9 2002/12/05 22:17:39 mcmontero Exp $ + $Id: php_imagick.h,v 1.10 2002/12/06 20:05:43 mcmontero Exp $ */ #ifndef PHP_IMAGICK_H @@ -229,6 +229,14 @@ *****/ PHP_FUNCTION( imagick_ordereddither ) ; + + /***** + + Composite an image. + + *****/ + + PHP_FUNCTION( imagick_composite ) ; /***** Index: pear/PECL/imagick/examples/composite.php +++ pear/PECL/imagick/examples/composite.php <? $handle = imagick_readimage( "./animated.gif" ) ; if ( imagick_iserror( $handle ) ) { $reason = imagick_failedreason( $handle ) ; $description = imagick_faileddescription( $handle ) ; print "handle2 failed!<BR>\nReason: $reason<BR>\nDescription: $description<BR>\n" ; exit ; } // // Extract the first frame of the animted image to use as the // composite image. // $comp_handle = imagick_getimagefromlist( $handle ) ; imagick_destroyhandle( $handle ) ; $handle = imagick_readimage( "./image.jpg" ) ; if ( imagick_iserror( $handle ) ) { $reason = imagick_failedreason( $handle ) ; $description = imagick_faileddescription( $handle ) ; print "handle2 failed!<BR>\nReason: $reason<BR>\nDescription: $description<BR>\n" ; exit ; } // // Use any one of these for the 2nd argument: // // IMAGICK_COMPOSITE_OP_OVER // IMAGICK_COMPOSITE_OP_IN // IMAGICK_COMPOSITE_OP_OUT // IMAGICK_COMPOSITE_OP_ATOP // IMAGICK_COMPOSITE_OP_XOR // IMAGICK_COMPOSITE_OP_PLUS // IMAGICK_COMPOSITE_OP_MINUS // IMAGICK_COMPOSITE_OP_ADD // IMAGICK_COMPOSITE_OP_SUBTRACT // IMAGICK_COMPOSITE_OP_DIFFERENCE // IMAGICK_COMPOSITE_OP_MULTIPLY // IMAGICK_COMPOSITE_OP_BUMPMAP // IMAGICK_COMPOSITE_OP_COPY // IMAGICK_COMPOSITE_OP_COPYRED // IMAGICK_COMPOSITE_OP_COPYGREEN // IMAGICK_COMPOSITE_OP_COPYBLUE // IMAGICK_COMPOSITE_OP_COPYOPACITY // IMAGICK_COMPOSITE_OP_CLEAR // IMAGICK_COMPOSITE_OP_DISSOLVE // IMAGICK_COMPOSITE_OP_DISPLACE // IMAGICK_COMPOSITE_OP_MODULATE // IMAGICK_COMPOSITE_OP_THRESHOLD // IMAGICK_COMPOSITE_OP_NONE // IMAGICK_COMPOSITE_OP_DARKEN // IMAGICK_COMPOSITE_OP_LIGHTEN // IMAGICK_COMPOSITE_OP_HUE // IMAGICK_COMPOSITE_OP_SATURATE // IMAGICK_COMPOSITE_OP_COLORIZE // IMAGICK_COMPOSITE_OP_LUMINIZE // IMAGICK_COMPOSITE_OP_SCREEN // IMAGICK_COMPOSITE_OP_OVERLAY // imagick_composite( $handle, IMAGICK_COMPOSITE_OP_OVER, $comp_handle, 200, 200 ) ; // // The image represented by handle now has the image from comp_handle // placed on top of it at x 200, y 200. // if ( imagick_iserror( $handle ) ) { $reason = imagick_failedreason( $handle ) ; $description = imagick_faileddescription( $handle ) ; print "handle failed!<BR>\nReason: $reason<BR>\nDescription: $description<BR>\n" ; exit ; } if ( imagick_iserror( $comp_handle ) ) { $reason = imagick_failedreason( $comp_handle ) ; $description = imagick_faileddescription( $comp_handle ) ; print "comp_handle failed!<BR>\nReason: $reason<BR>\nDescription: $description<BR>\n" ; exit ; } error_log( "writing!" ) ; if ( !imagick_writeimage( $handle, "./new_image.jpg" ) ) { $reason = imagick_failedreason( $handle ) ; $description = imagick_faileddescription( $handle ) ; print "imagick_writeimage() failed<BR>\nReason: $reason<BR>\nDescription: $description<BR>\n" ; exit ; } print "Done!<BR>\n" ; ?>
« previous php.pear.cvs (#7757) next »