Class: Barby::RmagickOutputter
- Defined in:
- lib/barby/outputter/rmagick_outputter.rb
Overview
Renders images from barcodes using RMagick
Registers the to_png, to_gif, to_jpg and to_image methods
Options:
* xdim -
* ydim - 2D only
* height - 1D only
* margin -
* foreground - RMagick "colorspec"
* background - ^
Instance Attribute Summary collapse
- #background ⇒ Object
- #foreground ⇒ Object
-
#height ⇒ Object
The height of the barcode in px For 2D barcodes this is the number of “lines” * ydim.
-
#margin ⇒ Object
The margin of each edge surrounding the barcode in pixels.
-
#xdim ⇒ Object
X dimension.
-
#ydim ⇒ Object
Y dimension.
Attributes inherited from Outputter
Instance Method Summary collapse
-
#full_height ⇒ Object
The height of the image.
-
#full_width ⇒ Object
The full width of the image.
-
#length ⇒ Object
Number of modules (xdims) on the x axis.
- #to_blob(format, *a) ⇒ Object
-
#to_gif(*a) ⇒ Object
Returns a string containint a GIF image.
-
#to_image(opts = {}) ⇒ Object
Returns an instance of Magick::Image.
-
#to_jpg(*a) ⇒ Object
Returns a string containing a JPEG image.
-
#to_png(*a) ⇒ Object
Returns a string containing a PNG image.
-
#width ⇒ Object
The width of the barcode in px.
Methods inherited from Outputter
#boolean_groups, #booleans, #encoding, #initialize, register, #two_dimensional?
Constructor Details
This class inherits a constructor from Barby::Outputter
Instance Attribute Details
#background ⇒ Object
159 160 161 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 159 def background @background || 'white' end |
#foreground ⇒ Object
155 156 157 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 155 def foreground @foreground || 'black' end |
#height ⇒ Object
The height of the barcode in px For 2D barcodes this is the number of “lines” * ydim
113 114 115 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 113 def height .two_dimensional? ? (ydim * encoding.length) : (@height || 100) end |
#margin ⇒ Object
The margin of each edge surrounding the barcode in pixels
138 139 140 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 138 def margin @margin || 10 end |
#xdim ⇒ Object
X dimension. 1X == 1px
128 129 130 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 128 def xdim @xdim || 1 end |
#ydim ⇒ Object
Y dimension. Only for 2D codes
133 134 135 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 133 def ydim @ydim || xdim end |
Instance Method Details
#full_height ⇒ Object
The height of the image. This is the height of the barcode + the top and bottom margin
150 151 152 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 150 def full_height height + (margin * 2) end |
#full_width ⇒ Object
The full width of the image. This is the width of the barcode + the left and right margin
144 145 146 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 144 def full_width width + (margin * 2) end |
#length ⇒ Object
Number of modules (xdims) on the x axis
123 124 125 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 123 def length .two_dimensional? ? encoding.first.length : encoding.length end |
#to_blob(format, *a) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 41 def to_blob(format, *a) img = to_image(*a) blob = img.to_blob{|i| i.format = format } #Release the memory used by RMagick explicitly. Ruby's GC #isn't aware of it and can't clean it up automatically img.destroy! if img.respond_to?(:destroy!) blob end |
#to_gif(*a) ⇒ Object
Returns a string containint a GIF image
32 33 34 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 32 def to_gif(*a) to_blob('gif', *a) end |
#to_image(opts = {}) ⇒ Object
Returns an instance of Magick::Image
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 53 def to_image(opts={}) opts do b = background #Capture locally because Magick::Image.new block uses instance_eval canvas = Magick::Image.new(full_width, full_height){ self.background_color = b } = Magick::Draw.new .fill = foreground x1 = margin y1 = margin if .two_dimensional? encoding.each do |line| line.split(//).map{|c| c == '1' }.each do || if x2 = x1+(xdim-1) y2 = y1+(ydim-1) # For single pixels use point if x1 == x2 && y1 == y2 .point(x1,y1) else # For single pixel lines, use line if x1 == x2 .line(x1, y1, x1, y2) elsif y1 == y2 .line(x1, y1, x2, y1) else .rectangle(x1, y1, x2, y2) end end end x1 += xdim end x1 = margin y1 += ydim end else booleans.each do || if x2 = x1+(xdim-1) y2 = y1+(height-1) # For single pixel width, use line if x1 == x2 .line(x1, y1, x1, y2) else .rectangle(x1, y1, x2, y2) end end x1 += xdim end end .draw(canvas) canvas end end |
#to_jpg(*a) ⇒ Object
Returns a string containing a JPEG image
37 38 39 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 37 def to_jpg(*a) to_blob('jpg', *a) end |
#to_png(*a) ⇒ Object
Returns a string containing a PNG image
27 28 29 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 27 def to_png(*a) to_blob('png', *a) end |
#width ⇒ Object
The width of the barcode in px
118 119 120 |
# File 'lib/barby/outputter/rmagick_outputter.rb', line 118 def width length * xdim end |