我需要生成大量小型 (1-10KB) PNG 图像(>1000 万)并将其存储到数据库中。我唯一关心的是图像/秒吞吐量。目前我知道两种将GD图像对象存储到数据库的方法:
ob_start();
imagepng($image);
$imageData = ob_get_contents();
ob_end_clean();
Run Code Online (Sandbox Code Playgroud)
$tmpFilePath = '/dev/shm/file_000.png';
imagepng($image, $tmpFilePath);
$imageData = file_get_contents($thumbnail);
Run Code Online (Sandbox Code Playgroud)
// PHP streams are NOT supported
$tmpFilePath = 'php://memory';
imagepng($image, $tmpFilePath);
$imageData = file_get_contents($tmpFilePath);
Run Code Online (Sandbox Code Playgroud)
我的问题是还有其他方法将图像写入数据库吗?每种方法的优点/缺点。也许值得编写一个自定义流,将数据直接写入数据库?
注意:不能将图像存储到文件系统。

您可以尝试写入imagepng()内存流而不是文件。
$tmpFilePath = 'php://memory/file_000.png';
imagepng($image, $tmpFilePath);
$imageData = file_get_contents($tmpFilePath);
Run Code Online (Sandbox Code Playgroud)
虽然我不确定该imagepng()函数是否可以处理 I/O 流,但如果可以的话,它可能是一个不错的选择。