You can attach files...
include Shrine::Attachment(:image)end
photo = Photo.create(image: file) photo.image #=> #<Shrine::UploadedFile> photo.image_url #=> "https://my-bucket.s3.amazonaws.com/6bfafe89748ee135.jpg" photo.image.id #=> "6bfafe89748ee135.jpg" photo.image.storage #=> #<Shrine::Storage::S3> photo.image.metadata #=> { "size" => 749238, "mime_type" => "image/jpeg", "filename" => "nature.jpg" }
...and process them eagerly...
Shrine::Attacher.derivatives :thumbnails do |original| magick = ImageProcessing::MiniMagick.source(original) {large: magick.resize_to_limit!(800, 800), medium: magick.resize_to_limit!(500, 500), small: magick.resize_to_limit!(300, 300) }end
photo.image_derivatives #=> # { large: #<Shrine::UploadedFile id="4ed847866c71a5bf.jpg" ...>, # medium: #<Shrine::UploadedFile id="7bc41b1c24afe81d.jpg" ...>, # small: #<Shrine::UploadedFile id="cccdd4052261633b.jpg" ...> }
...or on-the-fly...
Shrine.derivation :thumbnail do |file, width, height| magick = ImageProcessing::MiniMagick.source(original) magick.resize_to_limit!(width.to_i, height.to_i)end
photo.image.derivation_url(:thumbnail, 600, 400)#=> ".../thumbnail/600/400/eyJpZCI6ImZvbyIsInN0b3JhZ2UiOiJzdG9yZSJ9?signature=..."
Sponsors
If your company is relying on Shrine or simply want to see Shrine evolve faster, please consider backing the project through GitHub Sponsors.