RMagick с прямой формой представленного изображения из Синатры - PullRequest
3 голосов
/ 27 августа 2010

Я пытаюсь сделать что-то довольно простое, используя Sinatra и RMagick .

  1. Снимите изображение, загрузив файл простой формы
  2. Используйте RMagick, чтобы изменить его размер
  3. Затем сохраните его в базе данных для сохранения (не имеет значения)

Но после прохождения RDocs и бесконечных ударов головойЯ не могу получить изображение формы для объекта RMagick чисто .

Это ужасная вещь, которая в настоящее время работает для меня:

def image_resize(img_data)
    filecount = rand
    writer = File.new("/tmp/#{filecount}.jpg", "w")
    writer.puts(img_data)
    writer.close

    resized_image = Magick::ImageList.new("/tmp/#{filecount}.jpg").first
    resized_image.crop_resized!(100,100, Magick::NorthGravity)
    resized.format = 'jpeg'
    resized_image.to_blob
end

#call the method with my form image data
image_resize(params[:image][:tempfile].read)

Итак, как мне сделать очевидную правильную вещь и просто вставить данные изображения формы прямо в объект RMagick без необходимости записывать и читать диск.

Я пробовал различные способы чтения вMagick :: Image и ImageLists, но у меня есть только множество ошибок.


Спасибо за любое направление

-1.2.

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Вам нужно получить путь из временного файла и передать его в Magick :: Image's read.

Вот пример:

post "/upload-photo" do
  image = Magick::Image.read(params[:image][:tempfile].path)[0]
  image.crop_resized! 100, 100, Magick::CenterGravity
  store_image_data image.to_blob

  redirect "/done"
end
0 голосов
/ 15 июля 2015

Или вы можете читать прямо из ActionDispatch :: Http :: UploadedFile примерно так:

image = Magick::Image.from_blob(params[:image].read)
...