带有image_magick的多行

时间:2014-01-03 21:58:54

标签: ruby-on-rails image-processing ruby-on-rails-3.1 imagemagick minimagick

我正在尝试在多行上显示一长串文字。

有没有办法让文字自动换行?

  <%
  image = MiniMagick::Image.open("public/output4.jpg")
  image.combine_options do |c|
    c.font 'Arial'
    c.pointsize '30'
    c.gravity "center"
    c.size '360x'
    c.fill 'white'
    c.annotate '0,0', "this is a multi-line text paragraph this is a multi-line text paragraph"
  end
  image.write "public/output4.jpg"
    %>

UPDATE 我还尝试用标题替换注释...并收到以下错误

MiniMagick::Error (Command ("mogrify -pointsize 30 -gravity center -size 360x -fill white caption:this is a multi-line text paragraph this is a multi-line text paragraph /var/folders/1s/dh01tgyn3j39f673v1d_xywc0000gn/T/mini_magick20140103-15012-11w3xtz.jpg") failed: {:status_code=>1, :output=>"mogrify: no encode delegate for this image format `this is a multi-line text paragraph this is a multi-line text paragraph' @ error/constitute.c/WriteImage/1195.\n"}):

3 个答案:

答案 0 :(得分:1)

您应该能够为此使用段落启用标题,这样您就可以在需要休息的位置嵌入换行符。

有关标题指令和参数的完整文档,请访问:http://www.imagemagick.org/Usage/text/#caption_paragraphs

编辑:代码示例

问题是您的代码使用的是mogrify实用程序(默认情况下),而不是转换实用程序:

  <%
  image = MiniMagick::Image.open("public/output4.jpg")
  image.combine_options('convert') do |c|
    c.font 'Arial'
    c.pointsize '30'
    c.gravity "center"
    c.size '360x'
    c.fill 'white'
    c.annotate '0,0', "this is a multi-line text paragraph\n this is a multi-line text paragraph"
  end
  image.write "public/output4.jpg"
    %>

答案 1 :(得分:0)

您可以将注释文本拆分为单独的注释行,尽管这些文章相当笨拙,可能不是您正在寻找的内容。

答案 2 :(得分:0)

标题是您正在寻找的选项。 http://www.imagemagick.org/Usage/text/#caption

MiniMagick似乎有一个带有mogrify https://github.com/minimagick/minimagick/issues/191

字幕的错误

目前解决此问题的方法是在构建器上使用add命令方法。

image.combine_options do |c|
  c.add_command "caption", "a very long caption" 
end

你要做的就是首先找出你要在图像上应用的确切mogrify命令,参考imagemagick文档,然后验证minimagick是否正在构建相同的命令。

您可以看到由以下内容构建的命令:

image.combine_options do |c|
  c.add_command "caption", "a very long caption" 
  p c.command  # this should give out the command built
end