Метод MiniMagick Image.create, выдающий ArgumentError

Я создаю коллаж миниатюр, используя Ruby 1.9.3. Миниатюры загружаются следующим образом:

image1 = MiniMagick::Image.open("1.jpg")

image2 = MiniMagick::Image.open("2.jpg")
image2.rotate "-45>"

image3 = MiniMagick::Image.open("3.jpg")
image3.rotate "45>"

Я никогда раньше не использовал ImageMagick или MiniMagick, и у меня есть код для компоновки изображений со страницы minimagick GitHub.

collage = MiniMagick::Image.create "jpg", false do |c|
    c.size "1024x768"
    c.canvas "white"
end

collage = collage.composite image1 do |c|
    c.gravity "center"
end

collage = collage.composite image2 do |c|
    c.gravity "east"
end

collage = collage.composite image3 do |c|
    c.gravity "west"
end

collage.write("output.jpg")

Проблема возникает в команде Image.create. Когда я запускаю файл, используя

$ ruby prog.rb

Я получаю следующую ошибку

/Users/vinayshenoy/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/tempfile.rb:250:in `size': wrong number of arguments (1 for 0) (ArgumentError)
from prog.rb:14:in `block in <main>'
from /Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/mini_magick-3.4/lib/mini_magick.rb:158:in `call'
from /Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/mini_magick-3.4/lib/mini_magick.rb:158:in `create'
from prog.rb:13:in `<main>'

Файл сценария находится в том же каталоге, что и изображения. Я тестировал, записывая image1, image2 и image3 в отдельные файлы, и все они работают. Пожалуйста помоги.


person Vinay S Shenoy    schedule 29.02.2012    source источник
comment
См. github.com/minimagick/minimagick/issues/59.   -  person Ian Hunter    schedule 08.04.2014


Ответы (1)


Сообщение об ошибке немного странное, но согласно документации на http://www.imagemagick.org/script/command-line-options.php?#composite композитный принимает только 3 аргумента — два изображения, которые вы хотите объединить (изображение, которое вы создаете в строке 1, и то, которое называется image 1), а также «маска» оттенков серого (в данном случае изображение2).

Другими словами, похоже, вам придется сохраняться после каждой из трех композиций.

person Nils Landt    schedule 29.02.2012
comment
Ошибка возникает не в композите, а в Image.create. Вместо использования Image.create я открыл фоновое изображение, и программа заработала нормально. - person Vinay S Shenoy; 29.02.2012
comment
@VinaySShenoy, вы также можете сделать что-то вроде коллажа = MiniMagick::Image.create(.jpg, validate = false) {} arguments = %W(-size #{width}x#{height} xc:white #{collage.path} ) cmd = MiniMagick::CommandBuilder.new(convert, *arguments) collage.run(cmd) - person CÇ.; 17.09.2013