2011-06-08 94 views
2

我一直在环顾四周,想知道每个人用来调整图像的大小,以防万一我错过了。PHP图片大小调整 - 需要的意见

我正在使用php imageGD库imagejpeg()等。

我已经不断更新我的课,试图“解决”这一种情况:

如果图像的用户上传是说469x358和显示结束画面必须或设计,以适应一个120x80框内例如。如果我根据宽度调整大小,所得到的大小调整后的图像将为120x92,那么我可以修改高度,但这会像素化或挤压图像,我也可以用imageGD或CSS溢出隐藏来裁剪结束。

我已经快速浏览过,并且看到有一些算法(bicubic ect)可以用来缩小图像,使图像变得锐利,所以它看起来并不像我看到的imageGD一样。有没有人使用过这种算法?

我也看过ImageMagick有人用过这个软件吗?它是否更好地缩小图像?

我目前正在修剪隐藏溢出的结尾,但有没有更好的方法?

+0

[Image Scaling](http://en.wikipedia.org/wiki/Image_scaling)给出了各种方法(算法)的粗略概述 - 至少是最常见的方法。什么更好取决于你想达到什么。 – hakre 2011-06-08 17:02:01

+0

我认为在阅读ImageMagick文档大约5分钟后,它就是要走的路我很震惊,我从来没有真正听说过或使用过它。它具有我希望http://www.imagemagick.org/Usage/resize/#resize的功能,它只会缩小较大的图像并调整大小以适应指定的某个尺寸。这是其他人使用的吗? – 2011-06-08 17:08:26

+0

总是依赖。如果它适合你,请使用它。我知道很多人对imagemagick充满信心,所以继续。我知道有一个新的版本可以更好地支持内存和处理器,但这仅仅是保证金 – hakre 2011-06-08 17:10:09

回答

2

如果图像的用户上传是说 469x358和显示结束画面 需要是或者被设计为一个盒子120x80例如内适合 。如果我 resize在基于宽度所产生的 调整后的图像是120x92,我可以 就在这时,固定高度,但将 像素化或压扁的图像,我可以 也裁剪结束了与任何 imageGD或CSS溢出隐藏。

如果你的形象是358x469(纵向),并希望将其调整为120x80,使图像看起来不扭曲,这里是数学:

358/469 = width/80 => width = 358*80/469 = 61px (approx) 

我们有一个更高的图像我们”将使用最大高度和约束宽度。所需的120px宽度意味着图像水平延伸;使用更好的算法,只能达到平滑度,但不能使用更好的算法使压缩/拉伸的图像看起来正常。

如果需要安装,我建议您裁剪到合适的尺寸。您可以通过GD库/ ImageMagick在服务器端执行此操作,或使用CSS背景定位在客户端执行此操作。如果您使用GD,裁剪就像使用负偏移调整图像的大小一样简单(有点类似于背景位置为负的CSS背景)。

编辑1

如果是是否使用GD或IM的一个问题,我建议IM。我不确定输出的质量,但就性能而言,IM将超越GD,特别是在处理高分辨率图像时。如果您更喜欢GD,GD库函数imagecopyresampledimagecopyresized相比会给您更好的结果,但CPU和/或内存使用率更高。

编辑2

我忘了提,我早就停止使用GD并切换到phpThumb。照顾大部分家务。它在内部使用GD和/或IM - 内置智能可以为给定操作选择最佳的可用方法。

0

有几点可能会帮助您做出决定。

  • ImageMagick和gd2的重采样输出在很大程度上是相似的。我不确定重新采样gd2执行什么样的操作,并且我相当肯定ImageMagick使用双三次插值,但是无论哪种方式,在大多数情况下,双三次和双线性重采样生成的输出在缩小尺寸时几乎相同。放大小图像是双三次插值真正分开的地方。 (即使如此,也存在一些病态情况,其中双三次插值和双线性插值之间的差异可能是惊人的 - 检出http://en.wikipedia.org/wiki/Aliasing

  • 我没有太多机会在​​PHP中使用ImageMagick模块,但CLI版本快速重新采样图像。假设Imagick模块速度相当快,您应该看到快速的性能。然而,在gd2的情况下,速度一直是一个问题 - 我经常使用它来生成每页50多个缩略图,并且延迟是显而易见的。

  • gd2是大多数PHP安装的一部分,并且API使用相当简单。 Imagick似乎是一个PECL扩展。取决于您的托管服务提供商,这可能会也可能不是问题。

这就是说,我要指出,它的几乎总是一个更好的主意,缓存大小调整图像 - 特别是如果你是确保相同的图像将被频繁调整。例如,如果您正在创建一些在线商店,并且想要显示图像缩略图,那么如果您一次又一次通过调整器运行同一组图像,则会特别吸引人。 OTOH适用于图像变化更大的应用,实时调整大小可能是更好的选择。

+0

我已经去了ImageMagick,它的linux命令实际上更容易编写代码。如果你使用linux命令,我会选择使用ImageMagick,这对我的网站的外观产生了巨大的影响,因为我现在指定适合120x80的盒子,并且我获得了适合它的优化图像,不会再隐藏溢出! – 2011-06-10 17:09:45

+0

尽管如此,如果这与您的案例相关,请考虑缓存调整大小的图像所带来的好处。 – susmits 2011-06-13 05:43:58