簡體   English   中英

PHP imagerotate正在裁剪圖像

[英]PHP imagerotate is cropping image

我正在編寫一個腳本,該腳本需要一個箭頭圖像並將其旋轉一定的角度。 使用下面的代碼,當角度為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);

當您將nXm像素的正方形旋轉45度時,您將獲得圖像的對角線(大於n或m且等於sqrt(n ^ 2 + m ^ 2))為新的旋轉圖像寬度和高度。

該函數使用圖像的原始尺寸(即n和m)裁剪旋轉的圖像。

解決該問題的一種方法是通過創建一個較大的空白圖像並使用適當的大小sqrt(width_original_image ^ 2 + height_original_image ^ 2),然后使用imagecopy將原始圖像復制到新圖像。 之后,您可以在新圖像上使用imagerotate

我安裝並使用了ImageMagick PHP庫,無論旋轉的程度如何,旋轉都顯示為未裁剪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM