3


4

こんにちはそれはそれが画像の視点を変換することが可能です…​ それでそれは新しい形の二等辺三角形ですか? 私はimagemagickを使った解決策を見ましたが、それはおそらく私の全体の画像操作スクリプトを書き直すことを含むでしょう…​ (学習は言うまでもありませんが、私のアレルギーです)

2 Answer


10


Jamesが投稿した機能を改善しました。

追加:

  • 垂直/水平遠近法サポート

  • 透明度

  • 今では、3Dでオブジェクトを回転させるように見えます(オブジェクトが近いほど大きく、遠くなるほど小さくなります)。

これが私の機能です:

define( "TOP"、0); define( "BOTTOM"、1); define( "LEFT"、2); define( "RIGHT"、3);

関数パースペクティブ($ i、$ gradient = 0.85、$ rightdown = TOP、$ background = 0xFFFFFF、$ alpha = 0) $ h = imagesy($ i); $ col = imagecolorallocatealpha($ i、($ background >> 16)

$ mult = 5。 $ li = imagecreatetruecolor($ w * $ mult、$ h * $ mult); imagealphablending($ li、false); imagefilledrectangle($ li、0,0、$ w * $ mult、$ h * $ mult、$ col); imagesavealpha($ li、true);

imagecopyresized($ li、$ i、0,0,0,0、$ w * $ mult、$ h * $ mult、$ w、$ h); imagedestroy($ i); $ w * = $ mult; $ h * = $ mult;

$ image = imagecreatetruecolor($ w、$ h); imagealphablending($ image、false); imagefilledrectangle($ image、0,0、$ w、$ h、$ col); imagealphablending($ image、true);

imageantialias($ image、true); $ test = $ h * $ gradient;

$ rdmod = $ rightdown%2; $ min = 1 ($ rightdown <2){($ y = 0; $ y <$ h; $ y)の場合{$ ny = $ rdmod? $ y:$ h  -  $ y。 $ off = round((1- $ gradient)* $ w *($ ny / $ h)); $ t =((1-pow(1-pow(($ ny / $ h)、2)、0.5))*(1- $ gradient)($ ny / $ h)* $ gradient) $ nt = $ rdmod $ t:1- $ t。 if(abs(0.5- $ nt)<$ min){$ min = abs(0.5- $ nt); $ naty = $ off; imagecopyresampled($ image、$ li、ラウンド($ off / 2)、$ y、0、abs($ nt * $ h)、$ w- $ off、1、$ w、1); else {{($ x = 0; $ x <$ w; $ x)} {$ nx = $ rdmod?} $ x:$ w  -  $ x; $ off = round((1- $ gradient)* $ h *($ nx / $ w)); $ t =((1-pow(1-pow(($ nx / $ w)、2)、0.5))*(1- $ gradient)($ nx / $ w)* $ gradient) $ nt = $ rdmod $ t:1- $ t。 if(abs(0.5- $ nt)<$ min){$ min = abs(0.5- $ nt); $ natx = $ off; imagecopyresampled($ image、$ li、$ x、ラウンド($ off / 2)、abs($ nt * $ w)、0、1、$ h- $ off、1、$ h); imagedestroy($ li);

imageantialias($ image、false); imagealphablending($ image、false); imagesavealpha($ image、true);

$ i = imagecreatetruecolor(($ w $ naty)/ $ mult、($ h $ natx)/ $ mult); imagealphablending($ i、false)。 imagefilledrectangle($ i、0,0、($ w $ naty)/ $ mult、($ h $ natx)/ $ mult、$ col); imagealphablending($ i、true)。 imageantialias($ i、true); imagecopyresampled($ i、$ image、0,0,0,0、($ w $ naty)/ $ mult、($ h $ natx)/ $ mult、$ w、$ h); imagedestroy($ image); imagealphablending($ i、false)。 imageantialias($ i、false)。 imagesavealpha($ i、true); $ iを返します。 }

例:

元の画像:http://imgur.com/iX5Aski

機能を使用する:

$ img = perspective($ img、0.5、TOP、0xFFFFFF、127);

結果:

画像:https://i.stack.imgur.com/jjLOu.png [画像]

$ img = perspective($ img、0.2、RIGHT、0xFFFFFF、127);

結果:

画像:https://i.stack.imgur.com/eBdah.png [画像]


4


GDは3D画像操作をサポートしていません:( ImageMagickを使用した解決策は複雑ではありません:http://valokuva.org/?p=112