使用 imagick 扩展图像
Extend an image with imagick
我有一张尺寸为 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);
但是现在图像莫名其妙地在垂直和水平方向上都被拉伸了
如果有人能阐明点数组的结构以便图像仅垂直扩展,我将不胜感激。
谢谢!
西姆罗
同时扩展宽度、高度或两者的最简单通用方法 (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");
For PHP < 5.4 将以 $im->distortImage () 开头的行替换为:
$im->distortImage (imagick::DISTORTION_SCALEROTATETRANSLATE, array (0), false);
如果这不起作用,请告诉我!干杯,李
我有一张尺寸为 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);
但是现在图像莫名其妙地在垂直和水平方向上都被拉伸了
如果有人能阐明点数组的结构以便图像仅垂直扩展,我将不胜感激。
谢谢!
西姆罗
同时扩展宽度、高度或两者的最简单通用方法 (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");
For PHP < 5.4 将以 $im->distortImage () 开头的行替换为:
$im->distortImage (imagick::DISTORTION_SCALEROTATETRANSLATE, array (0), false);
如果这不起作用,请告诉我!干杯,李