我有一个维为x和y的图像。我想使用imagick将图像扩展到x和y+10。这里有一个实现这一点的例子:
http://phpimagick.com/Tutorial/edgeExtend
代码示例显示了如何水平扩展,但不是垂直扩展。
当我使用该示例进行水平扩展时,它可以工作:
function EdgeExtendHorizontal(&$img)
{
$originalWidth=$img->getImageWidth();
$desiredWidth=$originalWidth+120;
$Factor=$originalWidth/$desiredWidth;
$Offset=($desiredWidth-$originalWidth)/2;
$img->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_MIRROR);
$img->sampleimage($desiredWidth,$img->getImageHeight());
$points=array($Factor,0,0,1,$Offset,0);
$img->distortImage(Imagick::DISTORTION_AFFINEPROJECTION,$points,false);
}

但是,当我试图切换参数以使图像垂直扩展时,它不起作用:
function EdgeExtendVertical(&$img)
{
global $LanguageName;
$originalHeight=$img->getImageHeight();
$desiredHeight=$originalHeight+100;
$Factor=$originalHeight/$desiredHeight;
$Offset=($desiredHeight-$originalHeight)/2;
$img->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_MIRROR);
$img->sampleimage($img->getImageWidth(),$desiredHeight);
$points=array(0,$Factor,0,1,0,$Offset);
$img->distortImage(Imagick::DISTORTION_AFFINEPROJECTION,$points,false);
}

按以下方式修改点数组确实会带来一个结果:
$points=array($Factor,0,0,1,0,$Offset);

但是现在图像在垂直和水平上都有莫名其妙的延伸。
如果有人能对点阵列的结构有所了解,使图像仅垂直延伸,就会很感激了。
谢谢!
西姆罗
发布于 2018-06-30 18:54:12
一次扩展宽度、高度或两者的最简单的一般方法(PHPPHM5.4):
$im = new Imagick ("myfile.png");
$im->setImageVirtualPixelMethod (imagick::VIRTUALPIXELMETHOD_MIRROR);
list ($width, $height) = array_values ($im->getImageGeometry ());
$extend_width = 0;
$extend_height = 100;
$new_width = $width + $extend_width;
$new_height = $height + $extend_height;
$extend_width /= 2;
$extend_height /= 2;
$im->setImageArtifact ("distort:viewport", "{$new_width}x$new_height-$extend_width-$extend_height");
$im->distortImage (imagick::DISTORTION_SCALEROTATETRANSLATE, [0], false);
$im->writeImage (getcwd () . "/my_extended_image.png");对于PHP < 5.4,将以$im->失真图像()开头的行替换为:
$im->distortImage (imagick::DISTORTION_SCALEROTATETRANSLATE, array (0), false);如果这不管用就告诉我!干杯,李
https://stackoverflow.com/questions/51115438
复制相似问题