PHP图像使用最近邻插值调整大小?

时间:2010-12-25 16:22:33

标签: php resize image-manipulation

我有一个PNG或GIF图像格式的16x16精灵,并希望在64 x 64的所有像素化荣耀的网站上显示它。在Firefox 3.6+和IE中,我可以使用image-rendering and -ms-interpolation-mode使用CSS轻松完成此操作,但由于这在所有浏览器中都不起作用,所以我希望使用PHP来动态调整图像大小。在PHP中使用最近邻插值调整图像大小的最佳方法是什么?

5 个答案:

答案 0 :(得分:6)

如果你想在调整大小期间保持像素化,你会想要使用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函数。希望这会有所帮助。

答案 1 :(得分:1)

如果您还需要调整GIF大小,可以使用ImageMagick项目。

您可以使用GD,但是,您可能会丢失一些EXIF数据。

KusabaX项目具有很强的转换图像功能。检查第58行的文件“/inc/func/posts.php”。 - )

答案 2 :(得分:1)

http://www.imagemagick.org/Usage/misc/#interpolate

http://www.francodacosta.com/blog/phmagick/examples/resizing-images

这是关于imagemagick中插值的一些信息。 第二个链接是一个名为phMagick的类,它是一个围绕imagemagick库的全功能包装器。链接的示例用于基本调整大小操作,但没有为库的命令行调用设置插值标记。

可以通过类完全访问命令行,如果缺少插值标志支持,则有一种通过插件扩展类的简单机制。它也是php5准备好了。

如果这不能指向正确的方向,我不知道会发生什么。如果没有别的,那么phMagick课程应该为你写一个更精简的包装器给你一个很好的起点。

答案 3 :(得分:0)

答案是,没关系。缓存结果。保存结果的硬拷贝并输出。如果图像永远不会改变而且识别信息也没有改变,那么只做一次。

你可能会说这不是正确的答案。这不是你要求的。但这是最好的答案。随着时间的推移,它将节省大部分处理时间。在第一个地方调整图像的初始加载时间变得完全没有实际意义,渲染可能需要30秒,而且只会影响一个人一次。

答案 4 :(得分:0)

Symphony是一个很棒的PHP驱动框架,它使用JIT manipulator,这使得所有这一切都变得轻而易举! :P

您案例中的图片将是

<img src="http://yoursite.com/image/1/64/64/0/images/16pixels.jpg"/>