2017-01-12 14 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") 

그것은 이미지를 생성합니다.

지금은 같은 일을하고 같은 캡션의 공백을 포함 할 때 :

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 바라 보았다 :

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

나는과 같이 콘솔에서 제기 예외가 docs for mini_magick 및 whitespacing과 관련된 내용을 보지 못했습니다. ImageMagick 코어를 사용하여 공백을 올바르게 삽입하는 방법에 대해 이야기했지만 mini_magick 래퍼를 사용하지 않는 방법에 대한 이야기가 많이 있습니다.

내가 누락되었거나 공백을 대체 할 수 있어야합니까?

답변

2

공간 중요 : mini_magick에 대한

# 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}" 

견적 문자열 :

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

덕분에 너무 많은, 나는 그것이 내가 바라 보는 것을 간단한 것을 알고 있었다. 챔피언처럼 일했습니다. :) – nulltek