लेकिन ... - यह के साथ संभव है:
तो यहाँ
अपने कोड है जीडी और तेज़ !! ImageMagick
(2 * स्रोतविड्थ)/पीआई के आकार के साथ एक नई छवि बनाएं।
नई छवि के प्रत्येक पिक्सेल को चलो और केंद्र से दूरी खोजें। घ स्रोत = hypot (एक्स centerX, y- centerY)
द्वारा घ गंतव्य स्रोत छवि में इसी दूरी का पता लगाएं। = 2 * आर * असिन (घ स्रोत/आर)/2
आर गंतव्य छवि के आधी चौड़ाई है। बेंच के निशान के साथ
उदाहरण देखें: 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);
}
स्रोत
2011-06-27 10:25:26
आप या तो सीधे ही algo फ़िशआई लागू करने के लिए है, जो SLOOOWWWW होने जा रहा है होगा। या ऐसा करने के लिए कुछ और तरीका खोजें। जैसे कि फ़ोटोशॉप में निष्पादन() या जैसा कि ... मुझे किसी भी व्यक्ति के बारे में पता नहीं है जिसने इसे किया है ... – DampeS8N
यदि आपके पास सी प्रोग्रामिंग ज्ञान है, तो आप * gd * स्रोत कोड डाउनलोड कर सकते हैं और कार्यान्वित कर सकते हैं एक नई सुविधा - और इसे प्रकाशित करें! वह कोड इतना पुराना है ... वैसे भी, अगर आपको कोई समाधान मिल जाए, तो कृपया इसे पोस्ट करें! मैं जानना भी उत्सुक हूं ... बीटीडब्ल्यू आपका ओएस क्या है? –
यह करने योग्य है, लेकिन यह MATLAB कोड से अधिक शामिल है। PHP बाइट अंकगणितीय के लिए उपयुक्त नहीं है और आपको शायद 3-परत सरणी (आर, जी, बी) की आवश्यकता होगी। तो मैं 'exec (imagemagick)' का सहारा लेने का सुझाव भी दूंगा। – mario