[RUBY] Comment implémenter une image de profil circulaire avec CarrierWave et R Magick in Rails

Qu'est-ce que Carrierwave?

C'est un bijou qui vous permet d'ajouter facilement une fonction de téléchargement de fichier image.

Qu'est-ce que RMgick

Vous pouvez modifier la taille du fichier image et recadrer le centre de l'image. Même une image rectangulaire peut être transformée en une belle image carrée. (Parce qu'il peut être extrait du centre avec la taille spécifiée)

version

Ruby 2.7.0 Rails 6.0.2.1 carrierwave 2.1.0 rmagick 4.0.0

Étape 1 ・ Présentez Carrierwave

Tout d'abord, installez la gemme suivante

Gemfile.


gem 'carrierwave'

Ensuite, faites l'installation du bundle. Ensuite, créez un uploader avec rails g uploader image.

Terminal.


$ bundle install

$ rails g uploader image

app/uploaders/image_uploader.rb //Le fichier sera créé

Si vous n'avez pas de colonne d'image, vous devez en créer une. Puisqu'il s'agit d'une image de profil, je vais la créer dans le modèle utilisateur.

Terminal.


$ rails g migration AddImageToUsers image:string

$ rails db:migrate

Vous avez maintenant une colonne d'image dans votre modèle utilisateur.

Ensuite, éditez ʻuser.rb du modèle utilisateur ajouté et décrivez ʻimage_uploader.

user.rb


class User < ApplicationRecord
  #réduction

  mount_uploader :image, ImageUploader #ajouter à
end

Ceci termine l'introduction de CarrierWave.

Étape 2-Présentez R Magic

Tout d'abord, l'introduction de R Magick est très compliquée. Lol Cependant, soyez assuré que si vous le faites dans l'ordre, vous pouvez l'installer sans aucun problème.

Tout d'abord, installez ImageMagick 6 et pkg-config. Exécutez les opérations suivantes dans l'ordre.

Terminal.


$ brew install imagemagick@6

$ brew install pkg-config

Ensuite, procédez comme suit

Terminal.


$ export PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig

Enfin, utilisez la commande gem pour installer rmagick.

Terminal.


$ gem install rmagick

Vous êtes maintenant enfin prêt à installer la gemme. Ajoutez ce qui suit à Gemfile.

Gemfile.


gem 'rmagick'

Exécutez l'installation du bundle

Terminal.


$ bundle install

Ceci termine l'introduction de R Magick.

Étape 3 ・ Décrivez dans ʻimage_uploader.rb`

Décrivez ce qui suit dans le fichier ʻimage_uploader.rb` créé au début

image_uploader.rb


  version :thumb do
    process :resize_to_fill => [width, height, gravity = ::Magick::CenterGravity]
  end

  #Entrez les valeurs de largeur et de hauteur pour la largeur et la hauteur, respectivement. Si vous entrez le même nombre, il devient un carré.
  #Dans le cas de l'exemple ci-dessous, ce sera un carré de 200 px.
  #[Exemple]
  #version :thumb do
    #process :resize_to_fill => [200, 200, gravity = ::Magick::CenterGravity]
  #end

Vous pouvez maintenant rendre l'image carrée.

Ensuite, écrivez une description pour éviter l'inversion d'image.

image_uploader.rb


class ImageUploader < CarrierWave::Uploader::Base
  #réduction

  def auto
    manipulate! do|image|
      image.auto_orient
    end
  end

  process :auto

 #réduction
end

Étape 4 ・ Description du modèle

Cette fois, il s'agit d'une photo de profil utilisateur, je vais donc la décrire dans le modèle utilisateur.

user.rb


class User < ApplicationRecord
  #réduction

  mount_uploader :image, ImageUploader
end

Le modèle est maintenant associé.

Étape 5 ・ Description du contrôleur

Ensuite, écrivez-le dans le contrôleur.

users_controller.rb


class UsersController < ApplicationController
  #réduction

  def show
    @user = User.find(params[:id])
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.id == current_user.id
      @user.update(user_params)
      flash[:success] = "Votre profil a été mis a jour!"
      redirect_to user_path(@user)
    else
      render 'edit'
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :image)
  end 
end

Étape 6-Implémentation de la vue

Ensuite, nous allons l'implémenter dans la vue.

erb:edit.html.erb


 <% if @user.image? %>
   <%= image_tag @user.image.thumb.url, class: "user-icon" %>
 <% else %>
   <%= image_tag "default.jpg ", alt: "user-icon", size: "200", class: "user-icon" %>
 <% end %>
 <button type="button" class="btn btn-outline-secondary rounded-pill">
   <%= f.file_field :image, accept: 'image/jpeg,image/gif,image/png', class: "image-select-btn" %>
 </button>

Si vous avez téléchargé une photo de profil avec <% if @ user.image?%>, Elle sera affichée, sinon l'image par défaut sera affichée. Mettez les images par défaut dans ʻapp / assets / images`.

Au fait

erb:edit.html.erb


<%= image_tag "/assets/images/default.jpg ", alt: "user-icon", size: "200", class: "user-icon" %>

Veuillez noter qu'une erreur se produira si vous écrivez.

Revenez à l'explication de ʻedit.html.erb`.

En écrivant "thumb" sur la deuxième ligne, le contenu (largeur et hauteur) décrit précédemment dans ʻimage_uploader.rb` sera reflété dans l'image.

Ensuite, utilisez CSS pour arrondir l'image.

users.scss


.user-icon {
  border-radius: 100px;
}

Vous avez maintenant arrondi votre photo de profil.

Si l'image de profil n'a pas été téléchargée, l'implémentation suivante est possible.

スクリーンショット 2020-09-03 9.30.11.png

Vous pouvez télécharger votre photo de profil à partir du bouton "Sélectionner un fichier" ci-dessus.

Une fois téléchargé, il sera circulaire comme l'image par défaut.

C'est la fin de la mise en œuvre.

Matériel de référence

Je l'ai écrit en référence à l'article suivant. Merci à tous ceux qui ont publié l'article.

Introduire l'image upload Carrierwave Utilisation de R Magic avec des rails [Rails] Créez de jolies vignettes avec Carrier Wave et R Magick Utilisez CarrierWave pour définir l'image utilisateur.

Recommended Posts

Comment implémenter une image de profil circulaire avec CarrierWave et R Magick in Rails
Pour implémenter la publication d'images à l'aide de rails
Comment implémenter une fonctionnalité similaire dans Rails
Comment mettre en œuvre un diaporama en utilisant Slick in Rails (un par un et plusieurs par un)
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
[Rails] Un moyen simple d'implémenter une fonction d'auto-introduction dans votre profil
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
Comment implémenter la fonctionnalité de recherche dans Rails
Comment insérer une vidéo dans Rails
Comment implémenter la fonctionnalité de classement dans Rails
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
Comment créer facilement un pull-down avec des rails
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
Comment implémenter la connexion invité en 5 minutes sur le portefeuille de rails
Comment écrire une recherche de comparaison de dates dans Rails
[Rails] Comment charger JavaScript dans une vue spécifique
[Rails] Comment afficher les images dans la vue
Implémentez un système de réservation utilisant des Rails et un calendrier simple! Ajoutons la validation à datetime!
[Rails] Comment mettre en œuvre le scraping
Comment définir et décrire des variables d'environnement à l'aide de Rails zsh
Comment déployer jQuery dans les applications Rails à l'aide de Webpacker
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment développer et enregistrer une application Sota en Java
Comment joindre une table sans utiliser DBFlute et SQL
[Rails 6] Comment créer un écran de saisie de formulaire dynamique à l'aide de cocoon
Comment POST JSON dans la méthode Java en utilisant OkHttp3 et la méthode en utilisant HttpUrlConnection-
[Webpacker] Résumé de l'installation de Bootstrap et jQuery dans Rails 6.0
Comment implémenter un travail qui utilise l'API Java dans JobScheduler
Comment définir et utiliser un profil avec une configuration basée sur des annotations dans le framework Spring
Comment supprimer de grandes quantités de données dans Rails et problèmes
Implémenter un formulaire de contact dans Rails
Comment installer jQuery dans Rails 6
[Rails] Comment mettre en œuvre le classement par étoiles
Comment renommer un modèle avec des contraintes de clé externes dans Rails
[rails6.0.0] Comment enregistrer des images en utilisant Active Storage au format assistant
Comment installer Swiper in Rails
[Ruby on Rails] Comment se connecter avec seulement votre nom et mot de passe en utilisant le bijou
Comment définir l'image pour dessiner à gauche / à droite du bouton à l'aide de la police d'icône (Iconics)
Comment mettre à jour les modifications utilisateur dans Rails Devise sans entrer de mot de passe
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Comment exécuter un contrat avec web3j
Comment trier une liste à l'aide du comparateur
Comment implémenter le filtre de Kalman par Java