【问题标题】:PHP resize and watermarking images on the fly or create multiple versions?PHP 即时调整图像大小和水印或创建多个版本?
【发布时间】:2013-12-04 09:51:53
【问题描述】:

我收集了 500 多张图片,这些图片的大小已重新调整为最大 800 像素 x 533 像素,需要根据特定类别中的数量以各种尺寸显示这些缩略图,因此部分宽度比如说 650px 填充在 2/3/4 列的照片中。这些图像将被计划用于多个不同的域,每个域都有单独的水印。

因此,我编写了一个脚本,它根据某些参数(宽度/高度/纵横比)重新调整图像大小,然后动态添加水印。我这样做是因为我想节省服务器空间并尽可能动态地显示,这将允许带水印的缩略图和完整照片在多个域上以不同的大小显示。

我的问题是:

  1. 我在使用动态水印方法方面做对了吗?

  2. 我最好保存一份较小尺寸(300 像素 x 200 像素)的无水印照片副本并参考这些照片作为缩略图吗?

  3. 我是否应该为每张带有指定徽标的已添加水印的照片(可能还有缩略图)创建一个单独的副本并将其保存到单独的域文件夹中?即使这意味着大量复制

非常感谢您的建议

【问题讨论】:

  • 为什么批量复制图像处理工作量(选项 1)比批量复制文件(选项 3)更好?无需初始化 PHP 即可提供文件并由代理缓存。
  • @DCoder 关于不为缩略图初始化 PHP,这是一个很好的观点,现在认为最好的解决方案是降低缩略图的质量而不是给它们加水印,并将照片列的数量设置为固定非移动/平板设备的价值。但仍将水印应用于全分辨率或大缩略图

标签: php image-processing gd bandwidth watermark


【解决方案1】:

你使用 Image Magick 吗?

您希望动态地执行它以及为什么不这样做是有原因的。两种方法都有效。以下是优缺点:

  • 如果缓存图像,性能会更好。服务器空间 - 您认为这是一个问题 - 现在很便宜,不应该成为一个因素。另一方面,延迟会造成糟糕的用户体验
  • 您的脚本可能无权执行您编写的图像处理脚本,如果您动态执行,您将更加依赖服务器。
  • 如果您决定更改缩略图的大小,在动态场景中,您无需重新生成所有缩略图,因为您不存储它们。
  • 水印:选择为要保护的图像添加水印。如果缩略图用于快速查看大文件(“敏感”资产),则不要为缩略图添加水印。

这些只是一般规则。没有什么是一成不变的。

在我自己的服务器(我使用 wordpress)上,缩略图是在图片上传时生成的。当访问者点击我的页面时,这给了我更好的观看效果。但是,如果我决定重新设计我的网站并更改缩略图格式,我必须重新生成所有图片。

【讨论】:

  • 感谢您的意见@David Brossard。现在认为最好的解决方案是创建一个 60% 质量的缩略图而不给它加水印,因为这无疑会节省带宽,我只会给高分辨率版本加水印。另外,我有一个 htaccess 规则来阻止来自其他域的热链接。
  • 不,我没有使用 ImageMagick,而是从站点点上的脚本中获取位并添加到 re-sizer sitepoint.com/watermark-images-php
  • 如果您决定降低图像质量,请确保将其写在网站上的某个位置,以免人们误以为您的图像质量很差 - 我怀疑这就是使用水印的原因过度质量下降。
  • 当然,我已经获得了一些关于以幻灯片形式查看完整分辨率版本的信息文本
猜你喜欢
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
相关资源
最近更新 更多