Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 标签是否最适合带有Rmagick的图像?_Ruby_Imagemagick_Rmagick - Fatal编程技术网

Ruby 标签是否最适合带有Rmagick的图像?

Ruby 标签是否最适合带有Rmagick的图像?,ruby,imagemagick,rmagick,Ruby,Imagemagick,Rmagick,使用标签生成特定大小图像的最大技巧是不为标签指定-pointsize。当这种情况发生时,IM将有权尝试并选择最适合所需图像大小的字体大小。也就是说,将调整绘制的文本以适合给定的大小 从ImageMagick文档中摘录的这段内容表明,强制文本适应图像大小非常容易 我试图找到一种在固定宽度的Rmagick图像中填充文本的方法,但没有成功 text = Draw.new text.annotate layer, layer_data['width'], layer_data['heig

使用标签生成特定大小图像的最大技巧是不为标签指定-pointsize。当这种情况发生时,IM将有权尝试并选择最适合所需图像大小的字体大小。也就是说,将调整绘制的文本以适合给定的大小

从ImageMagick文档中摘录的这段内容表明,强制文本适应图像大小非常容易

我试图找到一种在固定宽度的Rmagick图像中填充文本的方法,但没有成功

    text = Draw.new
    text.annotate layer, layer_data['width'], layer_data['height'], layer_data['x'], layer_data['y'], layer_content do

      self.font_family = 'arial'
      self.fill = '#000000'

    end
从逻辑上讲,我尝试在不使用pointsize的情况下使用annotate,但Rgmagick只是交换了默认的pointsize 12


Rmagick有没有办法让库计算出最佳的点大小,以便文本适合固定宽度的图像,如ImageMagick

我最近找到了一种实现这个结果的方法。我始终无法找到用于在边界框中匹配文本的点大小,最初使用get_type_度量来计算我要使用的X和Y比例

metrics = text.get_type_metrics(image_canvas, image_text)

x_scale = container_width > metrics.width ? (container_width / metrics.width) : (metrics.width / container_width)
y_scale = container_height > metrics.height ? (container_height / metrics.height) : (metrics.height / container_height)
scale = container_height > metrics.height ? [x_scale, y_scale].min : [x_scale, y_scale].max
然而,这感觉有点不对劲,最近我们使用了这个小片段

image_canvas = Magick::Image.new(canvas_width, canvas_height)

text_container = Magick::Image.read("label:#{image_text}") {
    self.stroke = 'transparent'
    self.fill = '#0000A9'
    self.size = "#{text_container_width}x#{text_container_height}"
}.first

image_canvas.composite!(text_container, text_x_offset, text_y_offset, Magick::SrcOverCompositeOp)
基本上,如果您希望在图像上有多个元素,那么这只需要创建一个主图像,并在主图像上覆盖一个Magick::image对象,作为自动调整大小的文本元素

或者,如果您要查找多行文本,可以将标签更改为标题,如:Magick::Image.readcaption:{Image\u text}