【发布时间】:2018-05-22 12:16:56
【问题描述】:
在我的应用中,用户上传多张照片(例如,每张 3000x2000,JPG 和 PNG 格式)。我的 PHP 程序需要对这些照片进行布局并将它们组合成 1 张大照片。
例如,用户上传了 4 张照片 - p1.jpg、p2.jpg、p3.jpg、p4.jpg,每张都是 3000x2000。我需要创建一个大图像,将 4 个图像放置在这样的 2x2 网格布局中 -
+-----+-----+ (overall witdh = 6000, overall height = 4000)
| p1 | p2 |
+-----+-----+
| p3 | p4 |
+-----+-----+
我可以将每张图片缩小(例如原图的 50%),这样整体尺寸可以缩小,但如果用户上传 8 张图片或 16 张图片,整体尺寸会再次变大。
生成的图像将在 PHP 中消耗非常高的内存,所以我的问题是,以最少的内存消耗创建大图像的最佳方法是什么。
我的一个想法是我们使用流来逐块处理大型数据文件。所以我想知道是否有允许逐块图像合并的解决方案/库。
【问题讨论】:
-
作业队列对于此类消耗内存的进程来说是个好主意...现在取决于您应用的技术堆栈
-
我会接受这样一个事实,即它会使用大量内存,创建一个后台工作程序来接受来自队列的图像转换作业,并保留一个足够大的服务器来运行预定数量的这些工作程序,所以你可以控制他们使用多少内存。您要做的最后一件事是在 Web 服务器线程中运行此类任务,更不用说其中许多不受控制的并行了。
标签: php image gd large-data