rails 将 html 转换为图像

问题描述 投票:0回答:5

我正在寻找一种将 html 标签即时转换为图像的方法...

这意味着,我希望能够创建一个 image_tag,其中包含返回从 html 创建的图像的方法的路径。

我正在寻找解决方案,但无法想出正确的方法来解决这个问题......

有什么想法吗?

梅池

html ruby-on-rails ruby image rmagick
5个回答
33
投票

IMGkit 可以完成这项工作(github 上有详细信息

使用普通的旧式 HTML+CSS 创建 JPG

kit = IMGKit.new('http://google.com')
kit.to_jpg
kit.to_jpeg 
kit.to_png
kit.to_tif
kit.to_tiff

或在您的控制器中

@kit = IMGKit.new(render_as_string)

format.jpg do
  send_data(@kit.to_jpg, :type => "image/jpeg", :disposition => 'inline')
end

1
投票

我将在这里进行大胆的猜测,猜测您想要将 HTML 转换为图像,因此拍摄网页或其他内容的“快照”。我不确定如何一步完成此操作,但一种方法是使用 PDFKit 转换为 PDF,然后使用 RMagick 转换为您想要的任何图像格式。


1
投票

IMGKIT 需要带有绝对 url 的 css 来显示任何背景图像或其他资源。 因此,您可以按照此链接动态生成它https://coderwall.com/p/exj0ig以及一些步骤

A) 将所有图像放入rails应用程序的assets/images文件夹中

B) 如果没有安装,请安装 gem 'sass-rails' https://github.com/rails/sass-rails

C) 创建另一个 css 文件名称为 css_file_name.css.sccs.erb

D) 将所有其他 css 文件内容放入其中。

E) 在 css 文件中,只需输入图像文件名,如下所示: 背景图像: image-url('image.png');

F) 使用资产管道 (http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline) 作为您的应用程序模式运行以下命令: (1) 开发模式:RAILS_ENV=development bundle exec rake assets:precompile (2) 生产模式: RAILS_ENV=生产包 exec rake asset:precompile

G) 在您的配置/环境/

(1) 开发中.rb config.action_controller.asset_host = "您的本地主机 URL,即 YOUR_LOCALHOST_ADDRESS"

(2) 生产中.rb config.action_controller.asset_host = "http://assets.example.com" /您的地址/

H) 最后将您的样式表与 IMGKIT 相关联,如下所示

html_content = "YOUR HTML CONTENT"
kit = IMGKit.new(html_content, height: 900, transparent:true, quality:10) /*YOUR SETTING*/
kit.stylesheets << "#{Rails.root}/public/assets/application.css"
file = kit.to_file(Rails.root + "public/pngs/" + "screenshot.png") /*YOUR IMAGE NAME*/
send_file("#{Rails.root}/public/pngs/screenshot.png", :filename => "screenshot.png", :type => "image/png",:disposition => 'attachment',:streaming=> 'true') /*YOUR ADDRESS WHERE U WANT TO STORE PNG FILE*/

我) 重启服务器即可享受!!!!!!

[注意: 每次更改后,请运行 asset pipline 命令以获取由 .sccs.erb 扩展文件制成的最新 application.css。]


0
投票
  1. 编写一个常规动作,例如
    render_html_action
    渲染html页面
  2. 编写另一个操作,例如
    snapshot_action
    ,使用puppeteer-ruby
    render_html_action
    渲染的html快照为jpg或pdf

0
投票

我建议查看 Grover - 在幕后使用 Puppeteer。

我会警告不要使用 IMGKit,因为 wkhtmltoimage 本质上已经贬值了。 Wkhtmltopdf 基于 QtWebkit,但已被长期弃用。我们发现 wkhtmltoimage 存在许多问题,例如不支持某些现代 CSS(如 flexbox)。

© www.soinside.com 2019 - 2024. All rights reserved.