2010-12-30 17 views
13

Busco una forma de convertir etiquetas HTML para una imagen sobre la marcha ...rieles convertir html a la imagen

Eso significa, que yo quiero ser capaz de hacer una image_tag con una ruta a una método que devuelve la imagen creada desde html.

que estaba buscando una solución en eso, pero no podía llegar a una forma adecuada de resolver ese ...

alguna idea?

Maechi

+2

Después de leer esto dos veces, todavía estoy confundido lo que estamos tratando de lograr. – tybro0103

+0

Por favor, que todos lo sepan: 1) Por qué y 2) ¿De qué tipos de etiquetas está hablando? – jschorr

+0

¿Es la imagen una imagen de algún código html que muestra un conjunto de etiquetas, una imagen de una página como se representaría en un navegador en particular, o está tratando de tomar una parte particular de la página, digamos una etiqueta de párrafo y convertir esa información? en una imagen que muestra ese párrafo como una imagen, un generador de texto a imagen de manera efectiva. ¿O es algo completamente diferente? – stef

Respuesta

1

voy a tomar una conjetura salvaje aquí y supongo que desea convertir HTML a una imagen, a fin de tomar una "instantánea" de una página web o algo. No estoy seguro de cómo hacerlo en un solo paso, pero una forma de hacerlo es usar PDFKit para convertir a PDF y luego usar RMagick para convertir al formato de imagen que desee.

+3

La razón por la cual alguien querría hacer esto es convertir diseños complejos de HTML en diseños amigables para el correo electrónico. –

26

IMGkit puede hacer el trabajo (details on github)

Crear archivos JPG usando el viejo y simple HTML + CSS

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

o en su controlador

@kit = IMGKit.new(render_as_string) 

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

¿Qué render_as_string sin ningún parámetro? No lo entiendo ... ¿alguien podría señalarme en algún lado? Y debería ser render_to_string? En cualquier caso, ¿qué hace? –

+0

¿Podría editar uno de esos 'kits' en un archivo para enviarlo a través de FTP? –

+0

@JakubKuchar http://api.rubyonrails.org/classes/AbstractController/Rendering.html#method-i-render_to_string El primer arg puede ser una ruta a la vista que desea representar como cadena, por ejemplo 'orders/summary' . Los documentos lo dicen mejor: _Es similar al render, excepto que no establece el response_body y se debe garantizar que siempre devuelva un string_. –

1

IMGKIT css reqiured con url absoluta para cualquier imagen de fondo u otros activos. Así se puede generar de forma dinámica siguiendo este enlace https://coderwall.com/p/exj0ig y algunos pasos que

A) Pon todas las imágenes en assets/images carpeta de rieles aplicación

B) Instalar Gem 'Sass-carriles' si no se instala https://github.com/rails/sass-rails

C) crear otro nombre de archivo css como css_file_name.css.sccs.erb

D) ponga el resto del contenido de su archivo css.

E) En archivo css sólo hay que poner el nombre de archivo de imagen de la siguiente manera: Imagen de fondo: imagen-url ('image.png');

F) Use activos pipline (http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline) Ejecutar a continuación comando como el modo de aplicación: (1) el modo de desarrollo: RAILS_ENV activos = desarrollo paquete ejecutivo de rastrillo: precompilación (2) Modo de producción: RAILS_ENV = paquete de producción activos rastrillo exec: precompilación

G) En sus config/ambientes/

(1) En development.rb config.action_controller.asset_host = "su local de URL HOST es decir YOUR_LOCALHOST_ADDRES S "

(2) En production.rb config.action_controller.asset_host = "http://assets.example.com"/SU DIRECCIÓN/

H) Y por último, se relacionan con su hoja de estilo IMGKIT como a continuación

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) Reiniciar el servidor y disfrutar !!!!!

[NOTA:. Después de cada cambio Por favor, ejecute comandos activos pipline para recibir las últimas application.css que está hecho de archivo de extensión .sccs.erb]