【问题标题】:Imagick Code - ImageMagick not workingImagick 代码-ImageMagick 不工作
【发布时间】:2014-06-10 22:16:39
【问题描述】:

大家好,下面是我的代码...

    $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-&gt;setGravity( Imagick::GRAVITY_WEST );,另一个文本位置为$draw1-&gt;setGravity( Imagick::GRAVITY_EAST );,在创建的同一弧内...如何解决这个问题?

【问题讨论】:

    标签: php imagemagick imagick


    【解决方案1】:

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

    第一

    图片$im2 需要在distortImage 之前调用annotateImage,否则您的文字将浮出弧线

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

    第二

    将出现“通过零大小图像字符串”的错误消息,因为$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);
    

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 2020-04-20
      • 2017-02-18
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2018-02-27
      • 2012-06-04
      • 2011-02-27
      相关资源
      最近更新 更多