2010-10-30 6 views
0

Я сделал небольшой кусок кода для загрузки файла, а затем изменил его размер с помощью imagemagik. Я использую функцию системы («команда»), чтобы вызвать imagemagik для изменения размера изображения, но выход представляет собой файл размером 0 байт. любая идея, что может пойти не так?рельсы, загрузка изображения и изменение размера с помощью imagemagik

ответ

2

Я бы предложил использовать RMagick, который представляет собой рубиновый обертку вокруг imagemagick. Это поможет сохранить вещи более рубинообразными, и, как правило, полезно знать.

Google поможет (или StackOverflow для RMagick), но шаги что-то вроде (я предполагаю, что Rails 3):

в application.config:

gem 'rmagick' 

Затем в контроллере :

require 'RMagick' 

def create 
    @upload_io = params[:image_field] 
    @filename = @upload_io.original_filename 
    @filepath = Rails.root.join('public', 'images', @filename) 
    File.open(@filepath) do |file| 
    file.write(image_io.read) 
    end 

    @original = Magick::Image.read(@filepath) 

    @thumbnail = @original.resize_to_fit 75 75 
    @thumbnail.write(Rails.root.join('public', 'images', 'sm_' + filename) 
end 

Если вы не так заинтересованы в RMagick, я хотел бы также предложить убедившись, что вы сохраняете файл, прежде чем изменить его размер (это оригинал существует?), и убедитесь, что ваши пути являются и что вы на самом деле попадаете в нужное место в файловой системе.

+0

hi ... я посмотрел вариант rmagick, но проголосовал за него, так как он говорит, что он больше не поддерживается ... – Amit

+0

Также, что касается путей к файлу, я уверен, что пути в порядке, потому что есть новый файл размером 0 байт, поэтому я уверен, что команда запущена в правильном файле. Я сомневаюсь, что его пользовательский экземпляр rails вызывает prblems, но даже после создания папки до 777, я все равно получаю ту же ошибку – Amit

+0

Я использую ее с большим успехом. Я не знал, что он не поддерживается, но он очень функциональный, как есть. Я все равно скажу, что пойти с RMagick, а затем спуститься, чтобы командовать только при необходимости. Но, до вас :-) – Travis