簡體   English   中英

Imagick代碼-ImageMagick無法正常工作

[英]Imagick Code - ImageMagick not working

大家好,這是我的下面代碼...

    $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();
    }

Iam收到異常錯誤消息Zero size image string passed Iam嘗試執行的操作, Zero size image string passed非常簡單,Iam創建了兩個圖像,其中一個的位置$draw1->setGravity( Imagick::GRAVITY_WEST ); 以及位置$draw1->setGravity( Imagick::GRAVITY_EAST );的其他文本$draw1->setGravity( Imagick::GRAVITY_EAST ); ,在同一弧線內創建...如何解決?

提供的示例代碼存在一些問題。

第一

圖片$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)的行為Imagick::readImageBlob(Imagick)難以理解。 一個干凈的解決方案是定義圖像斑點。

$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM