【问题标题】:Store multiple size of image or resize current image on a webserver [closed]在网络服务器上存储多种尺寸的图像或调整当前图像的大小[关闭]
【发布时间】:2015-07-06 22:02:50
【问题描述】:

我想知道在网络服务器上存储和显示图像的最佳方式是什么。目前我已经用 PHP 编写了一个脚本,它使用 GD 库来调整我想要的任何图像的大小,然后输出图像。

例如,我的原始图像有 3000 像素 x 4000 像素,我想将该图像显示为缩略图。我只是输入<img src="image.php?n=image&w=300&h=400" alt="test" />。如果单击该图像,我想查看原始大小,因此我将再次调用该脚本,但没有 &h 和 &w 参数。

我的问题是
当我在我的服务器上上传图像(缩略图大小、中等大小,例如 800 像素 x 600 像素和原始大小)时生成 3 个图像,或者通过我的 PHP 脚本为每个外观调整大小,最好是生成 3 个图像?

我的服务器有 4GB RAM 和 60GB 存储容量,我预计每天至少有 1k 访问者。回答时也请考虑服务器性能。

附:我需要一个详细的答案,并且我已经在 stackoverflow 中搜索了类似的信息。我还没有找到任何东西,这就是我问的原因。

【问题讨论】:

  • 将生成的图像存储为高清文件。限制可用的不同宽度和高度,这样人们就不会填满你的硬盘。使用 cli cron 脚本清理旧生成的文件。
  • @OIS 这是可能的最佳解决方案,我将在未来这样做。但是现在,我想知道以上哪个是最好的解决方案。

标签: php html css image


【解决方案1】:

在几乎所有情况下,最好在上传时生成缩略图图像并将它们作为准备好的图像存储在磁盘上。磁盘空间比计算能力(和内存)便宜。

在替代选项中,您必须为每个缩略图运行调整大小脚本,并且每次它处理一个 10+ 百万像素的图像。乘以您显示的缩略图数量,然后乘以访问次数。

假设您的 API 无法更改,即通过 <img src="image.php?n=image&w=300&h=400" alt="test" /> 访问缩略图和图像,您的 image.php 可能如下所示:

// generate file name according to dimensions
if ($_GET['w'] == '300' && $_GET['h'] == '400') {
    $filename = $_GET['n'] . '-thumbnail.jpg';
}
else if ($_GET['w'] == '600' && $_GET['h'] == '800') {
    $filename = $_GET['n'] . '-midsize.jpg';
}
else {
    $filename = $_GET['n'] . '-fullsize.jpg';
}

// Serve image 
header('Content-type: image/jpeg');
readfile('/path/to/imgs/'.$filename);

显然,您应该包括安全检查/过滤器。该代码还可以轻松增强以支持其他类型,例如 image/pngimage/svg 等。

【讨论】:

  • 这是我一直在寻找的答案。谢谢!
  • 正如我所说,将生成的调整大小的图像保存在磁盘上。然后添加清理,几天后将其删除而不被阅读。为您想要的每个可能的宽度和高度添加一个文件夹,并且只允许按照这些尺寸生成文件。真的很简单。
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多