Ah, je crois que je touche au but.

Avec le code suivant :

>> mgk_img = Magick::Image.from_blob(image.db_file.data).first.crop!(10, 10,
50, 50)
=>  JPEG 200x250=>50x50 200x250+10+10 DirectClass 8-bit 24kb
>> thumb.db_file.data = mgk_img.to_blob
=> ...
>> thumb.db_file.save!
=> true

J'ai obtenu ce que je voulais en console (l'onglet :thumb de l'image s'est
bien sauvegardé recadré comme souhaité dans la base de données).

Du coup j'ai adapté mes méthodes dans l'object Image :

  def recrop_image_or_thumbnail!(img, top, left)
    if (!respond_to?(:parent_id) || parent_id.nil?) &&
attachment_options[:resize_to] # parent image
      recrop_image!(img, top, left, attachment_options[:resize_to])
    elsif thumbnail_resize_options # thumbnail
      recrop_image!(img, top, left, thumbnail_resize_options)
    end
  end

  def recrop_image!(img, top, left, size)
    size = size.first if size.is_a?(Array) && size.length == 1
    size = [size.to_i, size.to_i] if ! size.is_a?(Array)
    mgk_img = Magick::Image.from_blob(img.db_file.data).first.crop!(top,
left, size[0], size[1])
    self.db_file.data = mgk_img.to_blob
    self.db_file.save!
  end

Et ça marche... rait, si thumbnail_resize_options n'était pas vide dans la
ligne :

    elsif thumbnail_resize_options # thumbnail

Je ne vois aucune raison pour qu'il soit vide, après tout il est censé être
rempli lorsque je fais has_attachment avec le tableau [50,50]. Quand je le
test dans la console, j'obtiens :
>> image.thumbnail_resize_options
=> nil

C'est agaçant de se trouver bloqué comme ça tout près du but. C'est sûr, je
pourrais m'en moquer et mettre les valeurs en dûr ou les passer en
paramètres, mais ce serait nettement moins élégant puisque je veux de toute
façon conserver les mêmes dimensions que celles définies dans has_attachment
.

Si quelqu'un à encore une idée, merci d'avance...

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Répondre à