[英]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.