class HexaPDF::Layout::ImageBox
An Image box object is used for displaying an image.
How an image is displayed inside an image box, depends on whether the width
and/or height
of the box has been set:
-
If one of them has been set, the other is adjusted to retain the image ratio.
-
If both have been set, both are used as is.
-
If neither has been set, the image is scaled to fit the available space.
Also see: HexaPDF::Content::Canvas#image
Attributes
image[R]
The image that is shown in the box.
Public Class Methods
new(image, **kwargs)
click to toggle source
Creates a new Image box object for the given image
argument which needs to be an image object (e.g. returned by HexaPDF::Document::Images#add
).
Calls superclass method
HexaPDF::Layout::Box::new
# File lib/hexapdf/layout/image_box.rb, line 57 def initialize(image, **kwargs) super(**kwargs, &:unused_draw_block) @image = image end
Public Instance Methods
fit(available_width, available_height, _)
click to toggle source
Fits the image into the available space.
# File lib/hexapdf/layout/image_box.rb, line 63 def fit(available_width, available_height, _) image_width = @image.width.to_f image_height = @image.height.to_f image_ratio = image_width / image_height if @initial_width > 0 && @initial_height > 0 @width = @initial_width @height = @initial_height elsif @initial_width > 0 @width = @initial_width @height = (@width - reserved_width) / image_ratio + reserved_height elsif @initial_height > 0 @height = @initial_height @width = (@height - reserved_height) * image_ratio + reserved_width else rw = reserved_width rh = reserved_height ratio = [(available_width - rw) / image_width, (available_height - rh) / image_height].min @width = image_width * ratio + rw @height = image_height * ratio + rh end @width <= available_width && @height <= available_height end
Private Instance Methods
draw_content(canvas, x, y)
click to toggle source
Draws the image onto the canvas at position [x, y].
# File lib/hexapdf/layout/image_box.rb, line 91 def draw_content(canvas, x, y) canvas.image(@image, at: [x, y], width: content_width, height: content_height) end