10
votes

Orientation de l'image et validation avec paperclip?

Je cherche un moyen de déterminer l'orientation de l'image de préférence avec du papier, mais est-ce même possible ou dois-je avoir besoin d'utilisateur Rmagick ou une autre bibliothèque d'images pour cela?

Scénario d'affaire: Lorsqu'un utilisateur télécharge une image, je veux vérifier l'orientation / la taille / dimensions pour déterminer si l'image est en portrait / paysage ou carré et enregistrez cet attribut sur le modèle.


0 commentaires

3 Réponses :


1
votes

Quand je prends une photo avec mon appareil photo, les dimensions de l'image sont les mêmes, peu importe si la photo est un paysage ou un portrait. Cependant, ma caméra est assez intelligente pour faire pivoter l'image pour moi! Comme c'est pensif! La façon dont ce travail est qui est utilise quelque chose appelé eXif Data qui est des métadonnées placées sur l'image par la caméra. Il comprend des choses comme: le type de caméra, lorsque la photo a été prise, Orientation etc ...

Avec PaperClip Vous pouvez configurer des rappels, plus particulièrement ce que vous voudrez faire, c'est avoir un rappel sur avant_post_process qui vérifie l'orientation de l'image en lisant les données exif à l'aide d'une bibliothèque (vous pouvez. Trouvez une liste ICI: http: //blog.simplificator. COM / 2008/01/14 / RUBY-and-EXIF-DATA / ), puis en rotation de l'image dans le sens des aiguilles d'une montre ou dans le sens inverse des aiguilles d'une montre 90 degrés (vous ne saurez pas de quelle manière ils ont tourné la caméra quand ils ont pris la photo) .

J'espère que cela vous aidera!


1 commentaires

J'ai examiné cela et c'est aussi une excellente solution, bien que cette fois, les téléchargements d'image soient par les utilisateurs et je ne fais pas vraiment confiance à leur capacité à télécharger des images correctement.



5
votes

Merci pour la réponse Jonnii.

Bien que j'ai trouvé ce que je cherchais dans le module PaperClip :: Géométrie. P>

Ceci a travaillé Trouver: P>

class Image < ActiveRecord::Base
  after_save :set_orientation

  has_attached_file :data, :styles => { :large => "685x", :thumb => "100x100#" }
  validates_attachment_content_type :data, :content_type => ['image/jpeg', 'image/pjpeg'], :message => "has to be in jpeg format"

  private
  def set_orientation
    self.orientation = Paperclip::Geometry.from_file(self.data.to_file).horizontal? ? 'horizontal' : 'vertical'
  end
end


0 commentaires

12
votes

Voici ce que je fais généralement dans mes modèles d'image. Peut-être que cela aidera:

  • J'utilise l'option de GI-ORIVE lors de la conversion. Cela garantit des images sont toujours correctement tournées correctement après le téléchargement
  • j'ai lu le EXIF ​​Data après traitement et obtenez la largeur et la hauteur (entre autres)
  • Vous pouvez alors simplement avoir une méthode d'instance qui génère une chaîne d'orientation basée sur la largeur et la hauteur xxx

3 commentaires

Le rappel est-il appelé après_post_process ?


C'est après_atachment_post_process Ici car PaperClip vous permet de déclarer des processeurs post-post pour chaque pièce jointe dans votre modèle. Vous le faites en déclarant après_attachment-name_post_process . Donc, si sa pièce jointe a été appelée , son processeur postal serait après_media_post_process .


Vous voulez probablement utiliser source_file_options: {tout: '-Auto-orient'} au lieu de convert_options: car il oriente avant de générer les différents styles et produira l'image attendue tailles dans vos styles.