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 );
,创建了相同的弧...如何解决这个问题?
答案 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);