Page 1 of 1

Animated Rainbow Swirl

Posted: 2011-03-31T21:25:05-07:00
by DJ Mike
Just for fun -

Code: Select all

<?php
$file = "ani_circle_001.gif";
$w = 200;
$h = 100;
$delay = 10;
$deg = -360;

### First make a rainbow line 

# new imagick object
$img1 = new Imagick();

# some gradients
$img1->newPseudoImage( 10, 100, 'gradient:red-orange' );
$img1->newPseudoImage( 10, 100, 'gradient:orange-yellow' );
$img1->newPseudoImage( 10, 100, 'gradient:yellow-green' );
$img1->newPseudoImage( 10, 100, 'gradient:green-blue' );
$img1->newPseudoImage( 10, 100, 'gradient:blue-purple' );
$img1->newPseudoImage( 10, 100, 'gradient:purple-red' );

# go back to top of stack
$img1->resetIterator();

$line = $img1->appendImages(true);
# rotate
$line->rotateImage(new ImagickPixel(), 270);
# resize
$line->scaleimage($w, $h, FALSE ); 
$line->setimagebackgroundcolor("transparent");
$line->setImageVirtualPixelMethod( imagick::VIRTUALPIXELMETHOD_BACKGROUND );

# Clone line, arc it, resize, swirl

$frame_0 = $line->clone();
$frame_0->distortImage( Imagick::DISTORTION_ARC, array( 361 ), TRUE ); 
$frame_0->scaleimage($w, $w, FALSE );
$frame_0->swirlimage($deg); 

# Roll line 1/5th of width, clone, arc, swirl

$line->rollimage( $w/5, 0 );
$frame_1 = $line->clone();
$frame_1->distortImage( Imagick::DISTORTION_ARC, array( 361 ), TRUE ); 
$frame_1->scaleimage($w, $w, FALSE );
$frame_1->swirlimage($deg); 

# Roll line 1/5th of width, clone, arc, swirl

$line->rollimage( $w/5, 0 );
$frame_2 = $line->clone();
$frame_2->distortImage( Imagick::DISTORTION_ARC, array( 361 ), TRUE ); 
$frame_2->scaleimage($w, $w, FALSE );
$frame_2->swirlimage($deg); 

# Roll line 1/5th of width, clone, arc, swirl

$line->rollimage( $w/5, 0 );
$frame_3 = $line->clone();
$frame_3->distortImage( Imagick::DISTORTION_ARC, array( 361 ), TRUE ); 
$frame_3->scaleimage($w, $w, FALSE );
$frame_3->swirlimage($deg); 

# Roll line 1/5th of width, clone, arc, swirl

$line->rollimage( $w/5, 0 );
$frame_4 = $line->clone();
$frame_4->distortImage( Imagick::DISTORTION_ARC, array( 361 ), TRUE );
$frame_4->scaleimage($w, $w, FALSE );
$frame_4->swirlimage($deg); 

# new object to hold animation
#$ani = new Imagick();

# add frames
$ani = $frame_0->clone();
$ani->setImageDelay($delay);
$ani->addimage($frame_1);
$ani->setImageDelay($delay);
$ani->addimage($frame_2);
$ani->setImageDelay($delay);
$ani->addimage($frame_3);
$ani->setImageDelay($delay);
$ani->addimage($frame_4);
$ani->setImageDelay($delay);

# Write final image
$ani->writeimages( "$file", TRUE);

header( "location:$file" );
exit;
?>
Image