1

我要设置图像透视。我有带有空白多边形的笔记本电脑的图像在此处输入图像描述

另一个图像需要拉到空白区域。像这样: 在此处输入图像描述

所以,我有这个动态失真的代码:

$controlPoints = array( 0, 0,
                             0, 0,
                             0, $im->getImageHeight(),
                             0, $im->getImageHeight(),
                             $im->getImageWidth(), 0,
                             $im->getImageWidth(), 0,
                             $im->getImageWidth(), $im->getImageHeight(),
                            $im->getImageWidth(), $im->getImageHeight());
     /* Perform the distortion */ 
     $im->distortImage(Imagick::DISTORTION_PERSPECTIVE, $controlPoints, true);

如何设置 $controlPoints 数组?我不能只为图像的每个角设置 4 个坐标吗?不幸的是, imageick::distort image 的文档很差。

通过使用另一种失真方法解决问题:

$im->cropImage( 125, 121, $center_x, $center_y ); 
     $controlPoints = array(
                    0,0, 35,20, # top left 
                    190,0, 150,30, # top right
                    0,205, -16,105, # bottom right
                    176,135, 115,105 # bottum left
                    );
     /* Perform the distortion */ 
     $im->distortImage(Imagick::DISTORTION_BILINEAR, $controlPoints, true);
4

1 回答 1

10

控制点应该是 4 对,只要你需要,但至少 3 对。控制点的含义是source_x,source_y,destination_x,destination_y

所以它基本上告诉源图像中的点应该在目标图像中的哪个位置。

在您的情况下,您将需要 4 对,矩形的每个角一个:

$controlPoints = array(
    0, 0, <destination_x>, <destination_y>,
    0, $im->getImageHeight(), <destination_x>, <destination_y>,
    $im->getImageWidth(), 0, <destination_x>, <destination_y>,
    $im->getImageWidth(), $im->getImageHeight(), <destination_x>, <destination_y>
);

显然,您必须找出每个目标坐标并在上面的数组中替换。

于 2011-12-03T12:41:06.333 回答