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

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Website Login Issue developed in magento -

Can the constants be defined inside a model file of a framework in PHP? -