作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有办法用 PHP-GD 对图像进行鱼眼(或桶形变换)效果?我用一些代码找到了这个,但是我很难将它移植到 PHP。
How can I implement a fisheye lens effect (barrel transformation) in MATLAB?
最佳答案
带有 GD 的 PHP 不能以可接受的方式做这样的事情,逐像素处理图像会非常慢...
Imagick 确实支持一个功能,使您能够编写自己的表达式 (fximage),之后一切都将在 Imagick 内部处理。
所以我找到了一种方法来完成您在 Imagick 中的请求,我从 "Scott builds Software" blog - fisheye effect in imagick 中获取了表达式.您可以在他的博客中阅读该表达式的完整解释。有关此功能的更多文档,请访问官方 ImageMagick。站点,您可以在那里了解如何构建自己的表达式。
请注意关于返回值的 PHP 文档是不正确的,我也在那里发表了评论。该函数返回实际的 Imagick 对象。
这是你的代码:
<?php
/* Create new object */
$im = new Imagick();
/* Create new checkerboard pattern */
$im->newPseudoImage(100, 100, "pattern:checkerboard");
/* Set the image format to png */
$im->setImageFormat('png');
/* Fill background area with transparent */
$trans = Imagick::VIRTUALPIXELMETHOD_TRANSPARENT;
$im->setImageVirtualPixelMethod($trans);
/* Activate matte */
$im->setImageMatte(true);
/* This is the expression that define how to do the fisheye effect */
$distort_expression =
'kk=w*0.5;
ll=h*0.5;
dx=(i-kk);
dy=(j-ll);
aa=atan2(dy,dx);
rr=hypot(dy,dx);
rs=rr*rr/hypot(kk,ll);
px=kk+rs*cos(aa);
py=ll+rs*sin(aa);
p{px,py}';
/* Perform the distortion */
$im = $im->fxImage($distort_expression);
/* Ouput the image */
header("Content-Type: image/png");
echo $im;
?>
无论如何,记住这仍然很慢,无论你用它做什么都要小心......
关于php - 如何用PHP GD制作鱼眼效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399614/
我是一名优秀的程序员,十分优秀!