2010-03-08 8 views
0

Il s'agit de RMagick avec Ruby On Rails.RMAGICK: redimensionnement et modification du type de fichier des images (à la volée) ... Erreur d'en-tête d'image incorrecte

Je procédez comme suit:

image = params[:image] 
    # params[:image] is the image from the file-form. 
    name = image.original_filename.scan(/[^\/\\]+/).last 
    name = dir + t.day.to_s + t.month.to_s + t.year.to_s + t.hour.to_s + t.min.to_s + t.sec.to_s + name 
    f = File.new(name, "wb") 
    f.write image 
    f.close 
    image = Magick::Image.read(name) 
    image = image.resize_to_fit(200, 250) 
    f = File.new(name, "wb") 
    f.write image.to_blob 
    f.close 

Ai-je vraiment besoin d'enregistrer d'abord puis le changer? Et que diriez-vous de changer non seulement la taille, en changeant aussi le type de fichier? Je veux un JPG avec 60% de qualité.

Que signifie cette erreur?

Magick::ImageMagickError (Improper image header `public/images/avatars/Joern/83201018458ich2_kleiner.png'): 

Aidez-moi s'il vous plaît.

Vôtre, Joern.

Répondre

0

pour toute personne intéressée, c'est la solution:

t = Time.now 
    if !File.directory?(dir = "public/images/avatars/#{self.current_user.login}/") 
    Dir.mkdir(dir) 
    end 
    image = params[:image] 
    basename = t.day.to_s + t.month.to_s + t.year.to_s + t.hour.to_s + t.min.to_s + t.sec.to_s + ".jpg" 
    name = dir + basename 
    image = Magick::Image.from_blob(image.read).last 
    image = image.resize_to_fit(200, 250) 
    image.write(name) do self.quality = 60 end 
    picture = Picture.new 
    picture.path = "avatars/" + self.current_user.login + "/" + basename 
    picture.user_id = self.current_user.id 
    picture.save 
    redirect_to :action => :show, :id => picture.id