图像保存,调整大小

时间:2011-09-23 21:41:01

标签: php html css performance

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

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

我使用getimagesize()来计算显示宽度和高度的比例, 或者我设置了max-widht和max-height,我把它留给浏览器(浏览器为我制作), 或者我设置宽度保持高度:自动(但我也想限制最大高度)

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

并且...另一个想法,在上传时我保存到DB还有大小信息,为此我必须保存3 img(现在只有原始版本)的数据,这使一切变得复杂。

所以...任何想法?你的练习是什么? THX。

2 个答案:

答案 0 :(得分:1)

最多两张图片:缩略图,原始图片就足够了。确保您的上传页面安全可靠,因为我已经看到通过DoS删除了一个网站(滥用未受保护的图像大小调整页面)。同时限制最大上传大小,以防止滥用。

您可以使用max-widthmax-height CSS属性来限制图片的大小。

答案 1 :(得分:1)

我的方法

我刚才在php中编写了一个非常简单的图库应用程序,这就是它的工作原理:

图像存储在一个文件夹中,子文件夹代表专辑(和子标题)。它们通过FTP上传,网络服务器只对它们具有读取权限。

对于每张图片,有三个版本:

  • 一个完整的(原始的)
  • “mid”(最大1024x768px)
  • 一个“拇指”(最大250x250px)

浏览器对图像的所有请求都由php提供,并且即时生成尚未存在的版本。实际数据通过X-Sendfile提供,但这是一个实现细节。

我将较小的版本存储在不同的目录中。当给出原始图像的路径时,找到相应的缩小文件(并检查存在和修改时间)是微不足道的。

关于你的问题的想法

使用HTML / CSS缩放图像被认为是不好的做法,原因有两个:如果要进行放大,则图像模糊。如果您缩小规模,则会浪费带宽并使页面变得更慢,没有任何理由。所以不要这样做。

应该可以确定每个文件的一小部分所需版本(例如在我的情况下在布局中使用的那些版本)。根据项目的大小和要求,有一些创建这些版本的可能性:

  • 动态:在请求时生成/更新它们
  • 在上传期间:让上传过程中调用的例程执行工作
  • 在后台:让upload-routine将作业添加到后台处理的队列中(可能最具可扩展性但实现和部署起来相当复杂)

缩小大图像是一个相当慢的操作(通常需要几秒钟)。你可能想以某种方式限制它以防止滥用/ DoS。还限制尺寸和文件大小。压缩时100 MP(或更大)纯白(或任何颜色)JPG可能非常小,但在缩放期间会使用大量RAM。同样大的PNG需要很长时间才能解压缩(甚至更多的压缩)。

对于小型网站而言,无关紧要,您选择哪种方式。有效的东西(即使它没有缩放)也可以。如果您计划获得大量流量和稳定的上传流量,请仔细选择并仔细进行基准测试。

相关问题