我有一个尺寸为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);
但是现在图像在垂直和水平方向都无法解释
如果有人可以阐明点数组的结构,使图像仅垂直延伸,我们将不胜感激。
谢谢!
Cymro
答案 0 :(得分:1)
一次扩展宽度,高度或同时扩展两者的最简单的通用方法(PHP> = 5.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-> distortImage()开头的行替换为:
$im->distortImage (imagick::DISTORTION_SCALEROTATETRANSLATE, array (0), false);
让我知道这是否行不通!干杯,李