4

我们有一个 Ruby on Rails 应用程序,它需要将 PDF 转换为具有透明背景的 PNG。我们正在使用 rmagick 2.13.1。在我们的开发机器上,下面的代码完全按照我们想要的方式工作。

pages = Magick::Image.from_blob(book.to_pdf.render){ self.density = 300 }
page = pages[0]

image_file = Tempfile.new(['preview_image', '.png'])
image_file.binmode
image_file.write( page.to_blob { |opt| opt.format = "PNG" } )

然后我们保存 image_file,一切都很好。但是,当我们部署到 Heroku 上的评论服务器时,生成的图像具有白色背景。事实证明,Heroku 的 cedar 堆栈使用的是 imagemagick ImageMagick 6.5.7-8 2010-12-02,而我们在开发机器上使用的是 ImageMagick 6.7.5-7 2012-05-08。

我已经在网上搜索了可能适用于旧版本的旧帖子,以尝试找出如何生成透明 PNG。它肯定是受支持的,但是到目前为止,我还无法找出正确的设置组合。

为了验证问题不是 PDF 生成,我下载了在 Heroku 上生成的 PDF,并使用上面的代码(稍作修改以读取文件而不是生成文件)成功地将其转换为透明的 PNG。

我在各种组合中尝试过的一些事情是:

  • page.matte = true
  • page.format = "PNG32"
  • page.background_color = "none"
  • page.transparent_color = "white"
  • page.transparent("white")

所以,问题是“这可能吗?”。如果是这样,在写出图像之前我需要在图像上设置哪些设置?

我还在研究在 Heroku 上包含一个更新的 Imagemagick 的编译二进制文件。

任何帮助表示赞赏。

4

1 回答 1

0

这应该不再是问题,因为 Heroku 在其各种堆栈上都有 ImageMagick 版本 6.7-6.9。

于 2020-02-23T17:49:36.410 回答