Zend PDF:旋转后计算坐标

5

不想深入细节 - 我从一个网络工具获取参数(x1,x2,y1,y2,a,b,α),需要使用包含绿色图片的Zend_PDF库生成PDF文档,并将其旋转并正确放置在精确坐标上。

enter image description here

现在,让我困惑的是Zend不允许元素旋转,而是旋转纸张。因此,我认为旋转需要这样做:

$page->rotate($x1 + ($x2 - $x1) / 2, $y1 + ($y2 - $y1) / 2, - deg2rad($rotation));

因为我们希望图像的中心点成为旋转点,并且我们以相反的方向旋转它,使得结果图像能够得到正确的旋转。

我遇到问题的棘手部分是如何绘制它。使用简单的调用

$page->drawImage($image, $x1, $y1, $x2, $y2);

我得到的结果如图所示 - 结果图像也需要进行平移,因为(x1,y1)和(x2,y2)不再是精确坐标,但我不确定如何计算它们?有什么想法吗?


你的rotatedrawImage调用中的(x1, y1)和(x2, y2)坐标是相同的吗?或者你的图像只是绿色矩形,在这种情况下, drawImage的值应该完全不同... - mkl
是的,它们是一样的。$image 是一个绿色的矩形,这也是正确的。我意识到 drawImage 调用得到了错误的坐标,但我不确定如何计算出正确的坐标。 - Relja
1个回答

2

OP在评论中确认,他在rotatedrawImage调用中使用了相同的值(x1,y1)和(X2,y2)。然而,从他的草图中可以很明显地看出后者的坐标必须不同。

幸运的是,我们知道绿色矩形嵌入在从(x1,y1)到(X2,y2)的矩形中,它具有与该矩形相同的中心点。此外,我们有绿色矩形的尺寸ab

因此,drawImage参数必须更改为:

$page->drawImage($image, $x1 + ($x2 - $x1) / 2 - $a / 2
                       , $y1 + ($y2 - $y1) / 2 - $b / 2
                       , $x1 + ($x2 - $x1) / 2 + $a / 2
                       , $y1 + ($y2 - $y1) / 2 + $b / 2);

伙计,感谢你的回复!解决方案几乎完美 - X坐标是完美的,但Y仍然需要向下移动一点(在常规未旋转的坐标系中)。 你知道为什么以及如何进行翻译吗?简单地改变drawImage中的y1和y2会扭曲结果图像,因为旋转系统中的Y轴是原始系统中X和Y的平移。 - Relja
请问您能否分享一下输入值和生成的PDF文件,以便分析时仍需要对Y进行一些翻译的案例? - mkl
话虽如此... @Relja * 仅仅更改drawImage中的y1和y2会使得结果图像倾斜* - 更改旋转和drawImage的y值。 - mkl
@Relja,现在它是否按照预期工作了,还是你仍然需要帮助? - mkl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接