Php 图像保存、大小调整

Php 图像保存、大小调整,php,html,css,performance,Php,Html,Css,Performance,我有一个基本问题。我有一个项目,我需要一张图片的更多尺寸 是的。。。在上传过程中,你可以制作缩略图。。。等等我知道这个故事。。。性能与存储的可能性。 所以我保存了原始的img,a制作了两个缩略图副本,例如最大宽度100px和最大宽度200px。 现在我需要显示图像在150px的最大宽度,所以我采取保存的img(200px)和 我使用getimagesize()计算显示宽度和高度与比率的关系, 或者我设置了最大宽度和最大高度,并将其留给浏览器(浏览器为我制作), 或者我将宽度设置为“保持高度:自动

我有一个基本问题。我有一个项目,我需要一张图片的更多尺寸

是的。。。在上传过程中,你可以制作缩略图。。。等等我知道这个故事。。。性能与存储的可能性。 所以我保存了原始的img,a制作了两个缩略图副本,例如最大宽度100px和最大宽度200px。 现在我需要显示图像在150px的最大宽度,所以我采取保存的img(200px)和

我使用getimagesize()计算显示宽度和高度与比率的关系, 或者我设置了最大宽度和最大高度,并将其留给浏览器(浏览器为我制作), 或者我将宽度设置为“保持高度:自动”(但我还希望限制最大高度)

所以,实际上我使用php和getimagesize(),但是这个函数每次都可以处理文件,我有点害怕。当你处理1个img时,它是可以的,但是20或100个呢

而且。。。另一个想法是,在上传的同时,我还保存了数据库的大小信息,为此,我必须保存3img的数据(现在只有原来的一个),这使一切变得复杂


所以。。。有什么想法吗?你的做法是什么?THX.

最多两张图像:缩略图和原始图像就足够了。确保你的上传页面是安全的,因为我看到过一个网站通过DoS被关闭(滥用未受保护的图像调整页面)。还可以限制最大上载大小,以防止滥用

您可以使用
max width
max height
CSS属性来限制图像的大小。

My approach 不久前,我用php编写了一个非常简单的gallery应用程序,其工作原理如下:

图像存储在一个文件夹中,其中包含表示相册(和子相册)的子文件夹。它们是通过FTP上传的,Web服务器对它们只有读取权限

对于每个图像,有三个版本:

  • 完整的(原件)
  • 一个“中等”的(最大1024x768px)
  • 一个“拇指”型(最大250x250px)
浏览器对图像的所有请求都由php提供,并且还没有生成现有版本。实际数据是通过X-Sendfile提供的,但这是一个实现细节

我将较小的版本存储在单独的目录中。当给定原始图像的路径时,找到相应的缩小文件(并检查存在和修改时间)是很简单的

对你问题的思考 使用HTML/CSS缩放图像被认为是不好的做法,原因很简单:如果要放大,图像会模糊。如果你正在缩小,你会浪费带宽,毫无理由地使你的页面变慢。所以不要这样做

应该可以确定每个文件所需的一组非常小的版本(例如,在我的案例中布局中使用的版本)。根据项目的大小和要求,有几种可能创建这些版本:

  • 动态:在请求时生成/更新它们
  • 上传过程中:让上传过程中调用的例程完成工作
  • 在后台:让上载例程将作业添加到在后台工作的队列中(可能是最可伸缩的,但实现和部署起来也相当复杂)
缩小大型图像是一个非常缓慢的操作(通常需要几秒钟)。您可能希望以某种方式限制它,以防止滥用/拒绝。还可以限制尺寸和文件大小。100MP(甚至更大)的纯白色(或任何颜色)JPG在压缩时可能非常小,但在缩放过程中会使用大量的RAM。此外,大PNG需要很长时间来解压(甚至需要更多时间来压缩)


对于一个小网站来说,你选择哪种方法并不重要。一些有效的东西(即使它不能扩展)也可以。如果你打算获得大量的流量和稳定的上传流,那么明智地选择并仔细地进行基准测试。

如果你最终只使用CSS调整1mb+图像的大小,那就不太好了;导致用户无理由下载大型图像。至少应该实施某种形式的动态调整大小和缓存,除非你对上传的内容有很大的控制权。是的,再次。。。我们正在开始讨论存储更多大小的图像或调整大小。。。我真正的问题是如何处理存储的图像。。。“最大宽度”和“最大高度”看起来不错,但为什么像facebook这样有这么多照片的大网页不使用这种方法呢?它们与高度和宽度直接相关。我的问题是getimagesize()太糟糕了还是他们使用了其他东西。。。他们如何获得图像的宽度和高度?他们将这些信息存储在数据库中或使用一些软件……比如说,
150x150px
的缩略图足够小,可以调整大小为更小的缩略图。例如,可以通过链接来链接未缩放的图片@RobertMulinsky
getimagesize()
还不错。例如,我只是指出,您不应该实现
。您可以使用
file\u exists
filemtime
。如果原始文件较新,修改时间将与原始文件进行比较,并重新生成缩略图。