我正在编写一个脚本,它采用箭头图像并将其旋转一定的度数。使用下面的代码,当角度是90的倍数时,图像会旋转并按预期显示。
源图像看起来像这样(74 x 74):
旋转90后的图像:
旋转后的图像以任何其他数字(不是90的倍数)旋转,例如45:
从图像中可以看出,箭头的尖端已经从图像中裁剪掉了。谁能告诉我为什么会这样?同样,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);
答案 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库,旋转显示未旋转,无论旋转程度如何。