想象代码 - ImageMagick无法正常工作

时间:2014-04-25 09:21:11

标签: php imagemagick imagick

Hello People这里是我的代码......

    $width = 1200;
    $height = 100;
    $output="C:\wamp\www\latest\im\arc.gif";

    try
    {
    $pixel = new ImagickPixel( "lightblue" );
    $text = 'srinivas';
    $arcArray = array(360);


    $draw1 = new ImagickDraw();
    $draw1->setFont('Arial');
    $draw1->setFontSize( 120 );
    $draw1->setGravity( Imagick::GRAVITY_WEST );

    $draw2 = new ImagickDraw();
    $draw2->setFont('Arial');
    $draw2->setFontSize( 120 );
    $draw2->setGravity( Imagick::GRAVITY_EAST );

    $im1 = new Imagick();
    $im1->newImage($width, $height, $pixel);
    $im1->annotateImage($draw1, 0, 0, 0, $text);
    $im1->setImageVirtualPixelMethod( Imagick::VIRTUALPIXELMETHOD_WHITE );
    $im1->distortImage( Imagick::DISTORTION_ARC, $arcArray, false );


    $im2 = new Imagick();

    $im2->newImage($width, $height, $pixel);
    $im2->setImageVirtualPixelMethod( Imagick::VIRTUALPIXELMETHOD_WHITE );
    $im2->distortImage( Imagick::DISTORTION_ARC, $arcArray, false );
    $im2->annotateImage($draw2, 0, 0, 0, $text);


    $frame = new Imagick();
    $frame->readImageBlob($im2);
    for ($i = 1; $i < 3; ++$i) {

        $frame = new Imagick();
         $GIF = new Imagick();
        $frame->readImageBlob(${'im'.$i});
        $frame->setImageDispose(2);
        $frame->setImageDelay(100);
        $GIF->addImage($frame);
        $GIF->setImageDelay(100);

    }
    $frame->writeImages("C:\wamp\www\latest\im\arc.gif" , true);


    }

    catch(Exception $e)
    {
            echo $e->getMessage();
    }

我收到异常错误消息Zero size image string passed我想要做的事情很简单,我创建两个图像,其中一个位置$draw1->setGravity( Imagick::GRAVITY_WEST );,另一个文本位置$draw1->setGravity( Imagick::GRAVITY_EAST );,创建了相同的弧...如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

提供示例代码存在一些问题。

<强>第一

图片$im2需要在annotateImage之前调用distortImage,否则您的文字会在弧外浮动

$im2->annotateImage($draw2, 0, 0, 0, $text);
$im2->distortImage( Imagick::DISTORTION_ARC, $arcArray, false );

<强>第二

&#34;传递零大小图像字符串的错误消息&#34;将会发生,因为$im2没有给出任何格式/上下文。这样(string)$im2将导致空字符串。通过设置图像格式

来解决此问题
$im2->setImageFormat('gif');
// ...
$frame->readImageBlob($im2);

Imagick::readImageBlob(Imagick)的行为有点令人困惑。一个干净的解决方案是定义图像blob。

$blob = $im2->getImageBlob();
$frame->readImageBlob($blob);

<强>第三

我也对for循环感到困惑。无论你宣称为$frame的是什么似乎都会被每次迭代覆盖,$GIF图像似乎没有做任何事情。我假设您只是想创建一个GIF动画;其中,只需要$frame的一个实例。

$frame = new Imagick();
$im2->setImageFormat('gif');
$frame->readImageBlob($im2->getImageBlob());
for ($i = 1; $i < 3; ++$i) {
  $frame->addImage(${'im'.$i});
  $frame->setImageDelay(100);
}
$frame->setImageDispose(2);
$frame->setImageIterations(0);
$frame->writeImages("C:\wamp\www\latest\im\arc.gif" , true);