代码之家  ›  专栏  ›  技术社区  ›  VirtuosiMedia

在PHP中以编程方式组合图像

  •  3
  • VirtuosiMedia  · 技术社区  · 16 年前

    我是雅虎的忠实粉丝 recommendations 加快网站速度。其中一个建议是在可能的情况下组合图像,以减少大小和请求数量。不过,我注意到,虽然在布局中使用CSS sprite很容易,但其他图像的使用并没有那么容易组合。我想到的主要例子是一个博客或文章列表,其中每个博客或文章都有一个与之相关联的图像。这些图像会极大地影响加载时间和页面大小,尤其是在未优化的情况下。我在概念上或实践中寻找的是一种在使用PHP进行无损失压缩的同时动态组合这些图像的方法。

    一些额外的想法或顾虑:

    • 组合图像并生成 要定位的动态CSS样式表 图像的背景可能 想办法解决这个问题,但我 还担心可达性和 语义学。据我所知, CSS图像应用于布局 元素和img标记(带有 alt属性)应用于 要传达的图像 信息。我可以设置图像 作为DIV元素的背景 将标题属性替换为 alt属性,但我不确定 可访问性和语义 这样做的含义。
    • GD库可能是一个好的 像这样的候选人? 你能推荐其他的选择吗?
    2 回复  |  直到 16 年前
        1
  •  7
  •   ZombieSheep    16 年前

    如果我是你,我不会沿着这条路走。当然,您可以通过减少请求的数量来节省一些字节的协议开销,但这更可能导致自毁。

    想象一下这个场景: 一个博客网站,其首页一次有10篇文章。每一篇文章都有与之相关联的自己的图像。为了节省一个或两个传输时间,您可以通过编程创建所有10篇文章图像的合成图像。你现在有两个问题之一。

    1. 每次发布新文章时都必须更新合成图像,因为最近的10个图像将具有一组修改过的内容。
    2. 您决定动态地为每个请求创建一个新的组合。

    显然,1在这里更可取,并且不难实现。但是,如果用户搜索所有带有“sql”标签的文章怎么办?对于这个简单的查询,您不太可能已经创建了前10个结果的合成图像,更不用说更复杂的查询了。此外,如果要更新或删除图像,会发生什么情况?您必须再次触发组合的后台创建。

    像谷歌阅读器这样的RSS聚合器怎么样?它不需要逻辑来确定需要显示的合成图像的哪一部分,并且可能会显示完整的图像。(我提到谷歌阅读器是因为我很少直接访问博客网站,倾向于信任像阅读器这样的RSS聚合服务)

    如果是我的话,我会把这些单一的图像放在一边。随着现代连接速度的提高,额外的带宽开销和服务器上的处理时间之间的权衡不太可能为您赢得巨大的收益。

    尽管如此,如果你决定走这条路,我会说GD库是一个很好的起点。

        2
  •  1
  •   Dominic Rodger    16 年前

    几乎可以肯定的是,减少文章中图像的文件大小比合并它们要好。我同意您建议的方法可能存在可访问性问题。另外,我认为这取决于您所说的“动态”的含义——如果您考虑组合这些图像并为每个页面加载生成CSS,您可能会发现这会导致具有平均连接速度的用户的页面加载时间变慢。

    至于你的第二点,GD当然可以处理。更好地使用gd来减少页面加载时间,可能会降低文章图像的图像质量,以减少在文章创建时而不是在页面加载时的文件大小。