ruby - Rails4 - How to compress images attached by users in Rails app without cropping? -
i using redactor gem in rails app wysiwyt editor. allows users attach images.
i have file under uploaders folder attaches images posts made using redactor gem.
redactor_rails_picture_uploader.rb
# encoding: utf-8 class redactorrailspictureuploader < carrierwave::uploader::base include redactorrails::backend::carrierwave # include rmagick or imagescience support: # include carrierwave::rmagick include carrierwave::minimagick # include carrierwave::imagescience # choose kind of storage use uploader: storage :fog # override directory uploaded files stored. # sensible default uploaders meant mounted: def store_dir "system/redactor_assets/pictures/#{model.id}" end # provide default url default if there hasn't been file uploaded: # def default_url # "/images/fallback/" + [version_name, "default.png"].compact.join('_') # end # process files uploaded: # process :scale => [200, 300] # # def scale(width, height) # # # end process :read_dimensions # create different versions of uploaded files: # version :thumb # process :resize_to_fill => [118, 100] # end # version :content # process :resize_to_limit => [800, 800] # end # add white list of extensions allowed uploaded. # images might use this: def extension_white_list redactorrails.image_file_types end # override filename of uploaded files: # avoid using model.id or version_name here, see uploader/store.rb details. # def filename # "something.jpg" if original_filename # end end i not want restrict users saying them upload images less 10 or 8 mb.
not want crop images.
compress images less 10 or 8 mb in rails app , not bother users crop or compress images.
i have gems carrierwave, mini_magick , work. gem file.
source 'https://rubygems.org' ruby '2.1.4' gem 'bootstrap-sass', '~> 3.3.1' gem 'autoprefixer-rails' gem 'rails', '4.2.0.beta2' gem 'bcrypt', '3.1.7' gem 'faker', '1.4.2' gem 'carrierwave', '0.10.0' gem 'mini_magick', '3.8.0' gem 'paperclip' gem 'aws-sdk' gem 'fog', '1.23.0' gem 'will_paginate', '3.0.7' gem 'bootstrap-will_paginate', '0.0.10' gem 'mailboxer' gem 'rack-reverse-proxy', :require => 'rack/reverse_proxy' gem 'chosen-rails' gem 'jquery-turbolinks' gem 'masonry-rails', '~> 0.2.4' gem 'newrelic_rpm' gem 'rocket_pants', '~> 1.10.0' gem "recaptcha", :require => "recaptcha/rails" gem 'metamagic' gem 'redactor-rails' gem 'fitvidsjs_rails' gem 'pusher' gem 'sass-rails', '~> 5.0.0.beta1' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.0.0' gem 'jquery-rails', '~> 4.0.0.beta2' gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc group :development, :test gem 'byebug' gem 'web-console', '~> 2.0.0.beta4' gem 'spring' gem 'sqlite3' end group :production gem 'pg', '0.17.1' gem 'rails_12factor', '0.0.2' gem 'unicorn' end carrier_wave.rb
if rails.env.production? carrierwave.configure |config| config.fog_credentials = { # configuration amazon s3 :provider => 'aws', :aws_access_key_id => env['s3_access_key'], :aws_secret_access_key => env['s3_secret_key'], :region => env['s3_region'], :path_style => true } config.fog_directory = env['s3_bucket'] end end could share how this?
kindly help. thanks.
i believe answer question:
how specify image quality in carrierwave.
i don't know how specify megabyte, maybe on-the-fly calculations how big file , set quality to. bigger file means lower quality.
hope helps :)
copy-paste page
if want set image quality, create file config/initializers/carrierwave.rb following content:
module carrierwave module rmagick def quality(percentage) manipulate! |img| img.write(current_path){ self.quality = percentage } unless img.quality == percentage img = yield(img) if block_given? img end end end end now can use process :quality in uploaders:
class avataruploader < carrierwave::uploader::base include carrierwave::rmagick version :thumb process :resize_to_fit => [100, 100] process :quality => 100 end end change quality minimagick
# put in config/initializers/carrierwave.rb module carrierwave module minimagick def quality(percentage) manipulate! |img| img.quality(percentage.to_s) img = yield(img) if block_given? img end end end end in uploader class
class imageuploader < carrierwave::uploader::base include carrierwave::minimagick process :quality => 85 version :medium process :quality => 85 end end
Comments
Post a Comment