【问题标题】:Batch resizing 50+ large images in ColdFusion在 ColdFusion 中批量调整 50 多个大图像的大小
【发布时间】:2011-09-10 01:46:41
【问题描述】:

我正在尝试升级照片库系统,我们必须能够获取一个包含 50-100 个大 (~500K-1MB) 图像的文件夹,并为每个 (并将每个记录添加到数据库中)。

我写了一个<cffunction> 就是这样做的。它适用于包含较小图像的小文件夹,但是在完成我抛出的 50 个或更多图像中的大约 10 个后,较大的大图像文件夹会产生严重的性能问题并引发随机错误(超时或文件权限问题)。

我的问题:我如何才能完成如此密集的任务,同时尽量减少对整个服务器的性能影响?单独使用 ColdFusion 是否有可能,还是我需要查看其他服务器插件? (我在这方面没有任何经验。)

更新:由于我的共享主机限制,我目前正在将注意力转移到上传前的客户端调整大小 (Flash),因此服务器只需上传/移动和创建数据库记录。但是,我需要将原始图像的大小调整为拇指/中/大版本,并将它们全部上传。目前我只看到上传一张调整大小图像的示例,但我会尝试使用源代码。

更新 2: 我看到了一些非常酷的演示,展示了使用 HTML5 <canvas> 调整图像大小,我将尝试一下。我会发回任何结果。

【问题讨论】:

  • 为什么在 CF 中这样做? ofzenandcomputing.com/zanswers/1028 怎么样?
  • 如果只有我,我会在 Photoshop 中批量处理它们,但它是我同事的内部工具,最终可能会推广给我们的客户,我需要一个 Web 界面。不过还是谢谢。
  • 我认为在 CF 中执行此操作似乎是适合这项工作的错误工具。如果图像位于文件夹中,使用 C/C++ 编写的命令行实用程序执行 cfexecute 可能会比使用 CF/Java 更快。

标签: coldfusion batch-processing image-resizing


【解决方案1】:

【讨论】:

  • 听起来像是我需要的东西,但它是一个共享主机帐户,我认为我无法访问 ColdFusion 管理员来添加网关实例。很高兴知道这个选项就在那里。
【解决方案2】:

<cfexecute>ImageMagik 在速度和效率方面将优于使用 <cfimage> 调整大小。

http://www.imagemagick.org/www/mogrify.html

【讨论】:

    【解决方案3】:

    嗯,也许是异步网关、JVM 调优、可能添加更多 RAM 或将图像处理拆分到不运行主应用程序的单独物理服务器上的组合。

    【讨论】:

    • 感谢您的建议。现在我在共享主机上,所以很遗憾我的选择非常有限。
    【解决方案4】:

    问题是否可能更多是您试图在一个过程中完成所有这些?

    有几个建议是:-

    使用 cfthread 可以让您并行运行相同的进程,每个进程可以同时处理少量图像。说您在共享主机上,但我不确定您是否可以使用。您必须与供应商核实。

    另一种选择可能是设置每分钟左右运行的计划任务。这需要 XX 数量的图像,完成工作然后停止。下一个时间表将接收下一批,依此类推...

    这将减少流程密集度,但我不确定如果用户期望返回某种结果,您将如何管理用户交互。您还需要考虑时间安排,即如果之前的计划任务没有完成怎么办。

    詹姆斯

    【讨论】:

    • 感谢您的想法。我喜欢cfschedule 选项。我目前正在将它们解压缩到一个临时文件夹中,然后在创建调整大小的版本后删除它们。所以,文件夹本身可能是我的队列。如果我无法弄清楚如何在任何上传之前调整所有客户端的大小,这可能是我唯一的选择。
    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多