2016-09-28 7 views
0

私は矢印の画像を取得し、設定した角度だけ回転させるスクリプトを作成しています。下のコードを使用すると、角度が90の倍数になると、画像が回転して期待通りに表示されます。PHP imagerotateは画像を切り抜いています

ソース画像は、この(74 X 74)のように見える:90によって回転させた後

enter image description here

画像:他の数で回転させた後

enter image description hereenter 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); 

答えて

0

あなたは(より大きなNまたはMと等しいSQRT(N^2 + M^2である))対角線を取得する45度を言うことができますによってnXm画素の正方形を回転させること新しい回転イメージの幅と高さ

この関数は、イメージの元の寸法、つまりnとmを使用して回転イメージを切り抜きます。

問題を解決するには、適切なサイズ(sqrt(width_original_image^2 + height_original_image^2))の大きな空白イメージを作成し、imagecopyを使用して元のイメージを新しいイメージにコピーします。その後、新しい画像にimagerotateを使用することができます

+0

あなたの答えAmitayに感謝します。別の方法でやりたいことを達成するためのソリューションを勧めたり、コードを変更したりすることで、あなたはソリューションをお勧めしますか? – jskidd3

+0

「n」とは何ですか?「m」とは何ですか?私があなたの答えを受け入れるために、もう少し詳細が必要です – jskidd3

+0

私はあなたが提案したものを試しました。残念なことに、空白の画像が大きくなると問題は解決されません。作成された空白の画像のサイズにかかわらず、常に矢印が切り取られて表示されます。 – jskidd3

0

ImageMagick PHPライブラリをインストールして使用しました。ローテーションには回転の度合いに関係なく、非画像が表示されます。

関連する問題