【rails】画像アップロード(shrine)導入からherokuでの本番環境利用(S3)まで パート2
次に画像のリサイズとバリテーションをします。
参考:Shrineでアップロードする際に画像を加工する | RE:ENGINES
参考:image_processing/minimagick.md at master · janko/image_processing · GitHub
画像のリサイズ
ImageMagickのインストール
ImageMagickとは、ImageMagick - Convert, Edit, or Compose Bitmap Images
brew install imagemagick
gemを追加
gem 'image_processing' gem 'mini_magick'
サイズを指定
パート1【rails】画像アップロード(shrine)導入からherokuでの本番環境利用(S3)まで パート1 - 技術系ブログ
で作った、image_uploader.rb
に記述します。
require "image_processing/mini_magick" class ImageUploader < Shrine plugin :processing # プロセスプラグインを使用すると、指定したアクションのファイル処理を宣言的に定義して、変換することができます plugin :versions # バージョンプラグインを使用すると、処理時にファイルのハッシュを返すことができるため、アップローダーはバージョンを処理できます。 plugin :delete_raw # delete_rawプラグインは、アップロードされた生ファイルを自動的に削除します。これは、アップロード後に一時ファイルが確実に削除されるようにするために、処理を行うときに特に役立ちます。 process(:store) do |io, context| versions = { original: io } io.download do |original| pipeline = ImageProcessing::MiniMagick.source(original) versions[:large] = pipeline.resize_to_limit!(800, 800) versions[:medium] = pipeline.resize_to_limit!(500, 500) versions[:small] = pipeline.resize_to_limit!(300, 300) end versions end end
show側
= iamge_tag @post.iamge[large].url #versions[:large]
バリテーション
image_uploader.rbに追記
image_uploader.rb
に追記していきます
参考:File Validation · Shrine
require "image_processing/mini_magick" class ImageUploader < Shrine plugin :processing plugin :versions plugin :delete_raw plugin :validation_helpers # ←これと process(:store) do |io, context| versions = { original: io } io.download do |original| pipeline = ImageProcessing::MiniMagick.source(original) versions[:large] = pipeline.resize_to_limit!(800, 800) versions[:medium] = pipeline.resize_to_limit!(500, 500) versions[:small] = pipeline.resize_to_limit!(300, 300) end versions end #↓これを追記 Attacher.validate do validate_max_size 5 * 1024 * 1024, message: '5MBを超える画像はアップロードできません。' validate_mime_type_inclusion %w(image/jpeg image/png) end end
これで完了