PHP imagerotate正在裁剪图像

时间:2016-09-28 19:00:09

标签: php image image-processing

我正在编写一个脚本,它采用箭头图像并将其旋转一定的度数。使用下面的代码,当角度是90的倍数时,图像会旋转并按预期显示。

源图像看起来像这样(74 x 74):

enter image description here

旋转90后的图像:

enter image description here enter image description here

旋转后的图像以任何其他数字(不是90的倍数)旋转,例如45:

enter image description here

从图像中可以看出,箭头的尖端已经从图像中裁剪掉了。谁能告诉我为什么会这样?同样,90的倍数很好,它只是发生异常裁剪的任何其他数字。

$props = ['w' => 74, 'h' => 74];
$angle = 360 - $_GET['angle'];

$final_img = imagecreatetruecolor($props['w'], $props['h']);
imagesavealpha($final_img, true);
$transColor = imagecolorallocatealpha($final_img, 0, 0, 0, 127);
imagefill($final_img, 0, 0, $transColor);

$rotate = imagecreatefrompng('arrow.png');
$src = imagerotate($rotate, $angle, $transColor); //rotated my image

$src_x = ImageSX($src); //find out new x width
$src_y = ImageSY($src); //find out new y height

$src_widthx = $src_x/2 - $props['w']/2;  // divide each by 2 and then subtract desired end width from wider rotated width
$src_heighty = $src_y/2 - $props['h']/2;  // and again for height

imagecopy($final_img, $src, 0, 0, $src_widthx, $src_heighty, $props['w'], $props['h']);

header('Content-Type: image/png');
imagepng($final_img);

2 个答案:

答案 0 :(得分:0)

当您旋转nXm像素的正方形时,让我们说45度,您将得到对角线(大于n或m且等于sqrt(n ^ 2 + m ^ 2))图像是新的旋转图像宽度和高度。

该功能使用图像的原始尺寸,即n和m来裁剪旋转的图像。

解决问题的方法是通过使用适当的大小(sq_(width_original_image ^ 2 + height_original_image ^ 2)创建更大的空白图像,然后使用imagecopy将原始图像复制到新图像。之后,您可以在新图像上使用imagerotate

答案 1 :(得分:0)

我安装并使用了ImageMagick PHP库,旋转显示未旋转,无论旋转程度如何。