我在我的一个项目中使用IMGKIT,并且必须使用带有html选项的css来满足要求。我注意到如果样式表设置如下:
kit = IMGKit.new(html, :quality => 50)
kit.stylesheets << '/path/to/css/file'
并且样式表有一个带有相对url('image.png')的background属性,使用kit.to_file导出时不会生成图像:
(Rails.root + "public/pngs/" + "image.png")
请求挂起,如果我们用协议,主机和端口将后台网址替换为完整网址,则会很好地导出。
我是否需要在样式表中为所有图像添加绝对网址?
我已经尝试在我的development.rb文件中定义asset_host:
config.action_controller.asset_host = Proc.new { |source|
"#{request.protocol}#{request.host_with_port}"
}
如果我检查浏览器,它确实替换了css中的url,但是当通过IMGKIT导出时仍然没有生成图像。
答案 0 :(得分:4)
IMGKIT使用绝对网址为任何背景图片或其他资源重新提供css。 因此,您可以按照此链接https://coderwall.com/p/exj0ig和一些步骤
动态生成它A)将所有图片放入rails app的assets / images文件夹
B)如果没有安装https://github.com/rails/sass-rails
,请安装gem'sass-rails'C)创建另一个css文件名为css_file_name.css.sccs.erb
D)将所有其他css文件内容放入其中。
E)在css文件中,只需输入您的图像文件名如下: background-image:image-url('image.png');
F)使用资产pipline(http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline) 以app模式运行以下命令: (1)开发模式:RAILS_ENV =开发包exec rake资产:预编译 (2)生产模式:RAILS_ENV =生产包exec rake资产:预编译
G)在您的config / environments /
中(1)在development.rb config.action_controller.asset_host =“你的本地主机网址,即YOUR_LOCALHOST_ADDRESS”
(2)在production.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*/
I)重新启动服务器并享受!!!!!
[注意:在每次更改后,请运行assets pipline命令以获取最新的application.css,该文件来自.sccs.erb扩展文件。]