2017-01-12 3 views
0

Я работаю над небольшим рельсом 5.0.0.1, которое генерирует текст поверх изображений, подобных мемам. У меня есть базовый код, написанный в модели как таковой.Написание текста с помощью пробелов с использованием mini_magick и ruby ​​

class Meme < ApplicationRecord 
    require 'mini_magick' 
    mount_uploader :attachment, AttachmentUploader 

    def process_image(img_id, top_text, bottom_text) 
    image = MiniMagick::Image.open(Img.find(img_id).attachment.current_path) 
    image.combine_options do |c| 
     c.gravity 'Center' 
     c.pointsize '22' 
     c.draw "text 200,200 #{top_text}" 
     c.fill 'white' 
     c.draw "text 100,100 #{bottom_text}" 
     c.fill 'white' 
    end 
    self.attachment = image 
    self.save 
    end 
end 

Когда я бегу это из консоли и выполните следующие действия:

m = Meme.new 
m.process_image(Img.last.id, "Good", "Stuff") 

Он генерирует изображение с текстом обложил правильно.

Теперь, когда я делаю то же самое, и включают в себя пробелы в титрах, как это:

m = Meme.new 
m.process_image(Img.last.id, "This is", "Totally Weird") 

я получаю исключение, поднятую в консоли, как так:

mogrify: non-conforming drawing primitive definition `is' @ error/draw.c/DrawImage/3259. 
mogrify: non-conforming drawing primitive definition `Weird' @ error/draw.c/DrawImage/3259. 
mogrify: non-conforming drawing primitive definition `is' @ error/draw.c/DrawImage/3259. 
mogrify: non-conforming drawing primitive definition `Weird' @ error/draw.c/DrawImage/3259. 

Я посмотрел на API docs для mini_magick и не видел ничего, связанного с whitespacing. Я вижу, что тонны ссылок говорят о том, как заставить ядро ​​ImageMagick правильно вводить пробелы, но не использовать оболочку mini_magick.

Я что-то упускаю или должен делать какую-то замену пробелов?

ответ

2

Пространства материи:

# on "This is" input is becomes 
    #       ⇓⇓ mini_magick does not expect that 
    # c.draw "text 200,200 This is" 
    #     ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓ HERE 
    c.draw "text 200,200 #{top_text}" 
    c.fill 'white' 
    c.draw "text 100,100 #{bottom_text}" 

процитировать строки для mini_magick:

#     ⇓   ⇓ HERE 
    c.draw "text 200,200 '#{top_text}'" 
    c.fill 'white' 
    c.draw "text 100,100 '#{bottom_text}'" 
+0

спасибо, я знал, что это было что-то простое, что я был с видом. Работал как чемпион. :) – nulltek

Смежные вопросы