【问题标题】:Can file paths be replaced by memory resources?文件路径可以用内存资源代替吗?
【发布时间】:2012-10-06 19:53:39
【问题描述】:

我正在编写一个使用 Montage 的 PHP 脚本,Montage 是 ImageMagick 的扩展,可以创建图像的平铺数组。蒙太奇语法很简单:

montage image1.png image2.png image3.png -tile x1 -geometry 50x50 out.png

但是,我正在动态生成这些图像,我不想为了运行这个命令而不得不将它们写入磁盘。有什么方法可以在不将资源写入文件的情况下传递资源吗?

(这实际上不是一个蒙太奇问题,而是一个适用于许多不同情况的一般问题。)

任何帮助都会很棒!

【问题讨论】:

  • 您可以使用基于内存的文件系统,例如 tmpfs
  • 您现在如何将蒙太奇与动态图像和 PHP 集成?它是用 PHP 生成图像然后让 PHP 对 montage 进行 shell 调用吗?
  • @FoolishSeth:图像由自定义 C 脚本生成,然后我使用 passthru 获取原始图像数据。我一直在将其写入文件,然后使用蒙太奇,但我想跳过写入文件部分...
  • @BasileStarynkevitch:这是我第一次听说 tmpfs - 听起来很有趣。我想设置是相当复杂的?
  • @BasileStarynkevitch:经过一番阅读,听起来我可以将文件保存到/dev/shm(在 Ubuntu 上),这实际上会将其保存到 RAM 中。那是对的吗?如果是这样,那就是完美的解决方案!

标签: php mysql resources imagemagick montage


【解决方案1】:

正如我评论的那样,您可以找到一些tmpfs 文件系统(例如df | grep tmpfs),例如/run 并将您的文件放入其中。然后它们将存在于虚拟内存中(通常不需要任何磁盘 I/O)。当然,它们占用的空间正在消耗虚拟内存资源(因此受到限制)。

顺便说一句,在许多 Linux 系统上,写入小文件不会使用大量磁盘 I/O,因为它们位于文件系统缓存中。

当然,任何tmpfs 文件系统在每次重新启动时都会丢失其所有内容,因此您不希望在其中保留重要的不可恢复数据。

【讨论】:

    【解决方案2】:

    ImageMagick 有适用于 C 和 PHP 的 API。 PHP IMagick 似乎有蒙太奇钩子。

    http://us3.php.net/manual/en/imagick.montageimage.php

    关于 PHP IMagick 使用的一般信息: http://us3.php.net/manual/en/imagick.examples-1.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多