文字

ImagickDraw::bezier

(PECL imagick 2.0.0)

ImagickDraw::bezierDraws a bezier curve

说明

bool ImagickDraw::bezier ( array $coordinates )
Warning

本函数还未编写文档,仅有参数列表。

Draws a bezier curve through a set of points on the image.

参数

coordinates

Multidimensional array like array( array( 'x' => 1, 'y' => 2 ), array( 'x' => 3, 'y' => 4 ) )

返回值

没有返回值。

范例

Example #1 ImagickDraw::bezier()

<?php
function  bezier ( $strokeColor $fillColor $backgroundColor ) {

    
$draw  = new \ ImagickDraw ();

    
$strokeColor  = new \ ImagickPixel ( $strokeColor );
    
$fillColor  = new \ ImagickPixel ( $fillColor );

    
$draw -> setStrokeOpacity ( 1 );
    
$draw -> setStrokeColor ( $strokeColor );
    
$draw -> setFillColor ( $fillColor );

    
$draw -> setStrokeWidth ( 2 );

    
$smoothPointsSet  = [
        [
            [
'x'  =>  10.0  5 'y'  =>  10.0  5 ],
            [
'x'  =>  30.0  5 'y'  =>  90.0  5 ],
            [
'x'  =>  25.0  5 'y'  =>  10.0  5 ],
            [
'x'  =>  50.0  5 'y'  =>  50.0  5 ],
        ], 
        [
            [
'x'  =>  50.0  5 'y'  =>  50.0  5 ],
            [
'x'  =>  75.0  5 'y'  =>  90.0  5 ],
            [
'x'  =>  70.0  5 'y'  =>  10.0  5 ],
            [
'x'  =>  90.0  5 'y'  =>  40.0  5 ],
        ],
    ];

    foreach (
$smoothPointsSet  as  $points ) {
        
$draw -> bezier ( $points );
    }

    
$disjointPoints  = [
        [
            [
'x'  =>  10  5 'y'  =>  10  5 ], 
            [
'x'  =>  30  5 'y'  =>  90  5 ], 
            [
'x'  =>  25  5 'y'  =>  10  5 ],
            [
'x'  =>  50  5 'y'  =>  50  5 ],
        ],
        [
            [
'x'  =>  50  5 'y'  =>  50  5 ], 
            [
'x'  =>  80  5 'y'  =>  50  5 ],
            [
'x'  =>  70  5 'y'  =>  10  5 ],
            [
'x'  =>  90  5 'y'  =>  40  5 ],
         ]
    ];
    
$draw -> translate ( 0 200 );

    foreach (
$disjointPoints  as  $points ) {
        
$draw -> bezier ( $points );
    }

    
//Create an image object which the draw commands can be rendered into
    
$imagick  = new \ Imagick ();
    
$imagick -> newImage ( 500 500 $backgroundColor );
    
$imagick -> setImageFormat ( "png" );

    
//Render the draw commands in the ImagickDraw object 
    //into the image.
    
$imagick -> drawImage ( $draw );

    
//Send the image to the browser
    
header ( "Content-Type: image/png" );
    echo 
$imagick -> getImageBlob ();
}

?>

用户评论:

[#1] SkepticaLee [2014-01-26 16:19:17]

This function requires at least 3 points. The following code fails when there are only two points left in the array:

<?php
$im 
= new Imagick ();
$points = array (array ('x' => 10'y' => 10), array ('x' => 20'y' => 10), array ('x' => 30'y' => 40), array ('x' => 40'y' => 20), array ('x' => 50'y' => 60));
$n 0;
while (!empty (
$points))
{
    
$im->newImage (6464"white");
    
$draw = new ImagickDraw ();
    
$draw->setFillColor ("none");
    
$draw->setStrokeWidth (4);
    
$draw->setStrokeColor ("black");
    
$draw->setStrokeOpacity (0.9);
    
$draw->setStrokeAntiAlias (true);
    
$draw->bezier ($points);
    
$im->drawImage ($draw);
    
$im->writeImage ("IMG_$n.png");
    
$draw->destroy ();
    
$im->destroy ();
    echo 
count ($points) . ", $n: <img src=\"IMG_$n.png\"><br>";
    
$n++;
    
array_shift ($points);
}
?>

[#2] zombiebovine at gmail dot com [2009-09-14 03:43:38]

How to use:

<?php
    $width 
=  200;
    
$height 200;
    
$border 2;
    
    
$img = new Imagick();
    
$img->newImage$width$height, new ImagickPixel'transparent' ) );
    
    
$draw = new ImagickDraw();
    
$draw->setStrokeColor( new ImagickPixel'black' ) );
    
$draw->setStrokeWidth);
    
$draw->setFillColor( new ImagickPixel'transparent' ) );

    
// will fail in an obscure manner if the input data is invalid
    
$points = array
    ( 
        array( 
'x' => 0'y' => 200 ), 
        array( 
'x' => 0'y' => ), 
        array( 
'x' => 200'y' => 200 ), 
        array( 
'x' => 200'y' => )
    );
    
    
$draw->bezier($points);
            
    
$img->drawImage$draw );
    
$img->setImageFormat"png" );
    
    
header"Content-Type: image/png" );
    echo 
$img;
?>

上一篇: 下一篇: