Class: Ea::Render::ImageConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/ea/render/image_converter.rb

Overview

Converts SVG strings to PNG and PDF using available system tools. Detects rsvg-convert, ImageMagick convert, and headless Chrome (chromium --headless). Raises a clear error when no converter is available.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(svg) ⇒ ImageConverter

Returns a new instance of ImageConverter.

Parameters:

  • svg (String)

    SVG markup



13
14
15
# File 'lib/ea/render/image_converter.rb', line 13

def initialize(svg)
  @svg = svg
end

Instance Attribute Details

#svgObject (readonly)

Returns the value of attribute svg.



10
11
12
# File 'lib/ea/render/image_converter.rb', line 10

def svg
  @svg
end

Class Method Details

.available_converterSymbol?

Returns the first available converter executable, or nil.

Returns:

  • (Symbol, nil)

    :rsvg_convert | :magick | :chrome



35
36
37
38
39
40
41
# File 'lib/ea/render/image_converter.rb', line 35

def self.available_converter
  return :rsvg_convert if system("which rsvg-convert > /dev/null 2>&1")
  return :magick if system("which convert > /dev/null 2>&1")
  return :chrome if chromium_executable

  nil
end

.chromium_executableObject



43
44
45
46
47
48
# File 'lib/ea/render/image_converter.rb', line 43

def self.chromium_executable
  %w[chromium chromium-browser google-chrome
     /Applications/Chromium.app/Contents/MacOS/Chromium
     /Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome]
    .find { |exe| File.executable?(exe) || system("which #{exe} > /dev/null 2>&1") }
end

Instance Method Details

#to_pdfString

Returns PDF bytes.

Returns:

  • (String)

    PDF bytes



26
27
28
29
30
31
# File 'lib/ea/render/image_converter.rb', line 26

def to_pdf
  with_tempfile(".svg") do |svg_path|
    File.write(svg_path, svg)
    convert(svg_path, :pdf)
  end
end

#to_pngString

Returns PNG bytes.

Returns:

  • (String)

    PNG bytes



18
19
20
21
22
23
# File 'lib/ea/render/image_converter.rb', line 18

def to_png
  with_tempfile(".svg") do |svg_path|
    File.write(svg_path, svg)
    convert(svg_path, :png)
  end
end