Ama - O mümkündür : Yani burada
.kodunuz GD ve hızlı! ImageMagick ile karşılaştırmalı
(2x SourceWidth)/PI boyutunda yeni bir görüntü yaratın.
Yeni görüntünün her bir pikseli boyunca yürüyün ve merkezden mesafeyi bulun. d kaynak = hypot (x-centerX, y-Centery)
d hedef ile kaynak görüntüde karşılık gelen mesafe bulun. = 2 * R * asin (d kaynak/r)/2
r hedef görüntünün yansı kadardır. tezgah işareti ile
bakınız örnekler: http://meindesign.net/picture2bubble/picture2bubble.php
function fisheye($infilename,$outfilename){
$im=imagecreatefrompng($infilename);
$ux=imagesx($im);//Source imgage width(x)
$uy=imagesy($im);//Source imgage height(y)
$umx=$ux/2;//Source middle
$umy=$uy/2;
if($ux>$uy)$ow=2*$uy/pi();//Width for the destionation image
else $ow=2*$ux/pi();
$out=imagecreatetruecolor($ow+1,$ow+1);
$trans=imagecolortransparent($out,ImageColorAllocate($out,0,0,0));
imagefill($im,1,1,$trans);
for($c=0;$c<imagecolorstotal($im);$c++){//Copy palette
$col=imagecolorsforindex($im,$c);
imagecolorset($out,$c,$col[red],$col[green],$col[blue]);
}
$om=$ow/2;//destination middle
for($x=0;$x<=$ow;++$x){//Loop X in destination image
for($y=0;$y<=$ow;++$y){//Loop y in destination image
$otx=$x-$om;//X in relation to the middle
$oty=$y-$om;//Y in relation to the middle
$oh=hypot($otx,$oty);//distance
$arc=(2*$om*asin($oh/$om))/(2);
$factor=$arc/$oh;
if($oh<=$om){//if pixle inside radius
$color=imagecolorat($im,round($otx*$factor+$umx),round($oty*$factor+$umy));
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
$temp=imagecolorexact($out, $r, $g, $b);
imagesetpixel($out,$x,$y,$temp);
}
}
}
imagepng($out,$outfilename);
}
Sen SLOOOWWWW olacak ki, doğrudan kendisi algo balık gözü uygulamak gerekecek ya. Ya da bunu yapmanın başka bir yolunu bul. Exec() veya benzeri ile photoshop içine macro'n gibi ... Bunu yapan herhangi birisini bilmiyorum ... – DampeS8N
C programlama bilgisine sahipseniz, * gd * kaynak kodunu yükleyebilir ve uygulayabilirsiniz. yeni bir özellik - ve yayınla! Bu kod çok eski ... Neyse, bir çözüm bulursanız, lütfen gönderin! Ben de merak ediyorum ... Btw OS nedir? –
Bu yapılabilir, ancak MATLAB kodundan daha fazla içerir. PHP, bayt aritmetiği için uygun değildir ve muhtemelen 3 katmanlı bir diziye (R, G, B) ihtiyacınız olacaktır. Bu yüzden ben de exec (imagemagick) 'e başvurmayı öneririm. – mario