carrierwave + magickimage实现图片切割上传

1.添加gem

gem 'carrierwave', '0.6.2'
gem 'mini_magick' #不使用rmagick,占内存

如果之前没安装magickimage 就运行sudo apt-get install imagemagick

magickimage主要功能是切割图片

2.bundle install

3.为users表添加一个avatar字段,也可以为其他名称,注意相应的代码修改,如果users表本身有一个字段保存图片的路径,可不新加avatar字段

rails g migration add_avatar_to_users avatar:string   
rake db:migrate

4.生成Avatar,跟你添加的字段相同

rails generate uploader Avatar #将会生成文件app/uploaders/avatar_uploader.rb

5.为user的model user.rb添加如下代码,使表之间关联

mount_uploader :avatar, AvatarUploader


6.接下来进行修改app/uploaders/avatar_uploader.rb,下面是一个例子

# encoding: utf-8


class 
AvatarUploader < CarrierWave::Uploader::Base


  include CarrierWave::MiniMagick #使用minimagick处理压缩图片,确保安装magickimage这个东东,ubuntu可以sudo apt-get install magickimage


  # Choose what kind of storage to use for this uploader: 
  storage :file
  # storage :fog


  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir  #定义上传到哪个文件夹下
    "#{Rails.root}/public/site_data/#{model.site_id}"
  end


  def filename  #图片保存的名字 这里已解决上存相同名字图片覆盖问题
     "#{secure_token}.#{file.extension}" if original_filename.present?
  end
 


  def default_url  #可以定义默认图片,如过用户没有上传图片,则可以使用默认的图片
    "/sfile/default4.jpg"
  end




#图片的处理,有不同版本大小,网站可以在不同的地方调用不同的图片大小  
 version :photo_big do
    process :resize_to_fit => [480,nil]  #fit是先规定图片的长或宽,再等比例缩放没规定的长或宽
  end


  version :photo_small do
    process :resize_to_fill => [180,100]  #fill硬性规定图片的长或宽
  end




  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
#指定上传文件的格式
  def extension_white_list
    %w(jpg jpeg gif png)
   end


 protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end
  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  # def filename
  #   "something.jpg" if original_filename
  # end
end




7.如何在表单中上传

<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.file_field :avatar %>
    <%= f.hidden_field :avatar_cache %>
  </div>
...
<%end%>

8.如何显示图片

 <%= image_tag(@user.avatar_url(:photo_big)) if @user.avatar %> 
<img src="<%= @user.avatar_url(:photo_big) -%>" >


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值