class Axlsx::Pic
a Pic
object represents an image in your worksheet Worksheet#add_image
is the recommended way to manage images in your sheets @see Worksheet#add_image
Constants
- ALLOWED_MIME_TYPES
allowed mime types
Attributes
The anchor for this image @return [OneCellAnchor]
A description of the picture @return [String]
The path to the image you want to include Only local images are supported at this time. @return [String]
The name to use for this picture @return [String]
Picture opacity @return [Integer]
The picture locking attributes for this picture
Public Class Methods
Creates a new Pic(ture) object @param [Anchor] anchor the anchor that holds this image @option options [String] :name @option options [String] :descr @option options [String] :image_src @option options [Array] :start_at @option options [Integer] :width @option options [Integer] :height @option options [Float] :opacity - set the picture opacity, accepts a value between 0.0 and 1.0
# File lib/axlsx/drawing/pic.rb, line 19 def initialize(anchor, options={}) @anchor = anchor @hyperlink = nil @anchor.drawing.worksheet.workbook.images << self parse_options options start_at(*options[:start_at]) if options[:start_at] yield self if block_given? @picture_locking = PictureLocking.new(options) @opacity = (options[:opacity] * 100000).round if options[:opacity] end
Public Instance Methods
@see descr
# File lib/axlsx/drawing/pic.rb, line 85 def descr=(v) Axlsx::validate_string(v); @descr = v; end
noop if not using a two cell anchor @param [Integer] x The column @param [Integer] y The row @return [Marker]
# File lib/axlsx/drawing/pic.rb, line 161 def end_at(x, y=nil) use_two_cell_anchor unless @anchor.is_a?(TwoCellAnchor) @anchor.end_at x, y @anchor.to end
returns the extension of image_src
without the preceeding '.' @return [String]
# File lib/axlsx/drawing/pic.rb, line 95 def extname File.extname(image_src).delete('.') unless image_src.nil? end
The file name of image_src
without any path information @return [String]
# File lib/axlsx/drawing/pic.rb, line 89 def file_name File.basename(image_src) unless image_src.nil? end
providing access to update the anchor's height attribute @param [Integer] v @see OneCellAnchor.width
@note this is a noop if you are using a TwoCellAnchor
# File lib/axlsx/drawing/pic.rb, line 135 def height @anchor.height end
@see height @note This is a noop if you are using a TwoCellAnchor
# File lib/axlsx/drawing/pic.rb, line 141 def height=(v) use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor) @anchor.height = v end
sets or updates a hyperlink for this image. @param [String] v The href value for the hyper link @option options @see Hyperlink#initialize All options available to the Hyperlink
class apply - however href will be overridden with the v parameter value.
# File lib/axlsx/drawing/pic.rb, line 62 def hyperlink=(v, options={}) options[:href] = v if hyperlink.is_a?(Hyperlink) options.each do |o| hyperlink.send("#{o[0]}=", o[1]) if hyperlink.respond_to? "#{o[0]}=" end else @hyperlink = Hyperlink.new(self, options) end hyperlink end
# File lib/axlsx/drawing/pic.rb, line 74 def image_src=(v) Axlsx::validate_string(v) RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeTypeUtils.get_mime_type(v) raise ArgumentError, "File does not exist" unless File.exist?(v) @image_src = v end
The index of this image in the workbooks images collections @return [Index]
# File lib/axlsx/drawing/pic.rb, line 101 def index @anchor.drawing.worksheet.workbook.images.index(self) end
@see name
# File lib/axlsx/drawing/pic.rb, line 82 def name=(v) Axlsx::validate_string(v); @name = v; end
The part name for this image used in serialization and relationship building @return [String]
# File lib/axlsx/drawing/pic.rb, line 107 def pn "#{IMAGE_PN % [(index+1), extname]}" end
The relationship object for this pic. @return [Relationship]
# File lib/axlsx/drawing/pic.rb, line 113 def relationship Relationship.new(self, IMAGE_R, "../#{pn}") end
This is a short cut method to set the start anchor position If you need finer granularity in positioning use graphic_frame.anchor.from.colOff / rowOff @param [Integer] x The column @param [Integer] y The row @return [Marker]
# File lib/axlsx/drawing/pic.rb, line 152 def start_at(x, y=nil) @anchor.start_at x, y @anchor.from end
Serializes the object @param [String] str @return [String]
# File lib/axlsx/drawing/pic.rb, line 170 def to_xml_string(str = '') str << '<xdr:pic>' str << '<xdr:nvPicPr>' str << ('<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">') hyperlink.to_xml_string(str) if hyperlink.is_a?(Hyperlink) str << '</xdr:cNvPr><xdr:cNvPicPr>' picture_locking.to_xml_string(str) str << '</xdr:cNvPicPr></xdr:nvPicPr>' str << '<xdr:blipFill>' str << ('<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '">') if opacity str << "<a:alphaModFix amt=\"#{opacity}\"/>" end str << '</a:blip>' str << '<a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr>' str << '<a:xfrm><a:off x="0" y="0"/><a:ext cx="2336800" cy="2161540"/></a:xfrm>' str << '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>' end
providing access to the anchor's width attribute @param [Integer] v @see OneCellAnchor.width
# File lib/axlsx/drawing/pic.rb, line 120 def width return unless @anchor.is_a?(OneCellAnchor) @anchor.width end
@see width
# File lib/axlsx/drawing/pic.rb, line 126 def width=(v) use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor) @anchor.width = v end
Private Instance Methods
refactoring of swapping code, law of demeter be damned!
# File lib/axlsx/drawing/pic.rb, line 206 def swap_anchor(new_anchor) new_anchor.drawing.anchors.delete(new_anchor) @anchor.drawing.anchors[@anchor.drawing.anchors.index(@anchor)] = new_anchor new_anchor.instance_variable_set "@object", @anchor.object @anchor = new_anchor end
Changes the anchor to a one cell anchor.
# File lib/axlsx/drawing/pic.rb, line 192 def use_one_cell_anchor return if @anchor.is_a?(OneCellAnchor) new_anchor = OneCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row]) swap_anchor(new_anchor) end
changes the anchor type to a two cell anchor
# File lib/axlsx/drawing/pic.rb, line 199 def use_two_cell_anchor return if @anchor.is_a?(TwoCellAnchor) new_anchor = TwoCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row]) swap_anchor(new_anchor) end