我有一张16x16像素的PNG或GIF图片,想要在网站上以64 x 64像素的大小展示它的像素风格。在Firefox 3.6+和IE浏览器中,我可以使用CSS的image-rendering和-ms-interpolation-mode属性轻松实现此功能。但由于这种方法不适用于所有浏览器,我想使用PHP动态调整图片大小。那么,在PHP中使用最近邻插值算法调整图像大小的最佳方法是什么?
我有一张16x16像素的PNG或GIF图片,想要在网站上以64 x 64像素的大小展示它的像素风格。在Firefox 3.6+和IE浏览器中,我可以使用CSS的image-rendering和-ms-interpolation-mode属性轻松实现此功能。但由于这种方法不适用于所有浏览器,我想使用PHP动态调整图片大小。那么,在PHP中使用最近邻插值算法调整图像大小的最佳方法是什么?
如果您想在调整大小时保留像素化效果,您需要使用GD库执行以下操作:
<?php
// create GD image resource from source image file
$src = imagecreatefromgif('test.gif');
// create new GD image resource with indexed color
$dest = imagecreate(64, 64);
// copy/resize image without resampling
imagecopyresized($dest, $src, 0, 0, 0, 0, 64, 64, 16, 16);
// output result
header('Content-type: image/gif');
imagegif($dest);
?>
我已经测试了这段代码,但是像素化问题仍然存在。你需要修改代码,使其也能够接受PNG文件作为输入,这应该很容易实现,因为GD gif函数的每个对应都有相应的PNG函数。希望这可以帮到你。
如果你需要调整GIF大小,你可以使用ImageMagick项目。
你可以使用GD库,但是可能会丢失一些EXIF数据。
KusabaX项目有一个很棒的图像转换功能。请查看文件“/inc/func/posts.php”的第58行。;-)
http://www.imagemagick.org/Usage/misc/#interpolate
http://www.francodacosta.com/blog/phmagick/examples/resizing-images
这是关于imagemagick中插值的一些信息。第二个链接是一个名为phMagick的类,它是对imagemagick库的完整封装。所提供的示例仅用于基本的调整大小操作,但没有设置插值标志以进行命令行调用。
通过该类,您可以完全访问命令行,如果缺乏插值标志支持,则可以通过插件轻松扩展该类的机制。它也已准备好php5。
如果这不能指引您朝正确的方向前进,那我不知道还有什么能。如果没有其他办法,phMagick类应该为编写适用于特定目的的更简洁的封装程序提供良好的起点。
答案是,这并不重要。缓存结果。保存结果的硬拷贝并输出。如果图像没有识别信息发生变化,则仅执行一次。
你可能会认为这不是正确的答案。它不是你所要求的。但这是最好的答案。随着时间的推移,它将节省最多的处理时间。到了一定程度,图片重新调整大小的初始加载时间完全无关紧要,它可能需要30秒才能呈现,并且只会影响一个人,一次。