【问题标题】:Efficiently rendering many images on a unified canvas在统一的画布上高效地渲染许多图像
【发布时间】:2011-05-17 13:41:05
【问题描述】:

我迷路了,需要方向。

我们正在尝试使用 imagemagick 将一堆小图像 (X) 渲染到一个统一的画布上。

不同的 X 可以是以下五种不同尺寸之一:20x20、40x40、60x60、80x80 或 100x100。大图的宽度始终设置为600,但高度可以根据需要调整。

在任何给定时刻,我们可以使用少至 10 个或多至 10,000 个 X。

目前,我们正在使用的基本概念证明类似于:

images.each do |image|

      image = Magick::Image.read("#{RAILS_ROOT}/public/images/#{image}").first

      w = image.columns
      h = image.rows

      pixels = image.export_pixels(0, 0, w, h, "RGB")

      img.import_pixels(x, y, w, h, "RGB", pixels)

      x += w

end

...它既简单又愚蠢,但它确实输出了一系列合并为一个的图像。快到了;-)

有谁知道一种有效的算法,我们可以用它迭代许多 X 并将它们并排放置,跨越多行并仍然优化空间? 这里的目标是创建一个没有空白的单一图像,由所有小图像构成。

如前所述,我希望你们对此有任何反馈。指针?想法?例子?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby image-processing imagemagick rmagick


    【解决方案1】:

    现在图像似乎是噪音。你想解决一个瓷砖问题。瓷砖有一些固定的尺寸,你想把它们放在一个固定宽度和最小高度的表面上。这可以通过 DFS、BFS、A* 等全局完成。您还可以查看一些局部方法,如模拟退火或爬山,这取决于您是否需要全局最优或只是一个好的、合理的解决方案。您可以在online source repository for AIMA 中找到这些方法的实现。

    一旦您解决了平铺问题,您就可以使用与您展示的代码类似的代码来覆盖图像。

    【讨论】:

    • 感谢您的回复 carlosdc!我花了一上午的时间试图找到您提到的方法的参考实现,但无济于事。你有什么想法吗?再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2015-01-31
    • 2017-04-26
    • 2022-12-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多