世界上最伟大的投资就是投资自己的教育
CarrierWave 图片上传和图片特殊处理
随风发布于2866 次阅读
使用 CarrierWave 这个 gem 来完成图片上传和使用 mini_magick 这个 gem 来处理上传的图片
这是我之前的一篇文章,觉得蛮好的,现在把它放到这里来。
1. CarrierWave
1.1 安装
gem 'carrierwave'
1.2 生成 uploader
$ rails generate uploader Avatar
# 这是生成的文件
app/uploaders/avatar_uploader.rb
1.3 添加图片的字段
rails g migration add_image_to_articles image:string
image 存储是文件名
1.4 挂载那个 uploader
class Article < ActiveRecord::Base
attr_accessible :content, :title, :image, :remote_image_url
mount_uploader :image, AvatarUploader
end
1.5 给表单加上图片上传的域
<div class="field">
<%= f.label :image %><br />
<%= f.file_field :image %>
<%= f.hidden_field :image_cache %>
</div>
1.6 引用上传的图片地址
# app/views/articles/show.html.erb
<%= image_tag @article.image_url.to_s %>
这样就可以上传图片了,默认图片是存储在 public 那个文件夹中
1.7 远程图片
# app/views/articles/show.html.erb
<div class="field">
<%= f.label :remote_image_url, "or image URL" %>
<%= f.text_field :remote_image_url %>
</div>
2. MiniMagick 处理图片
2.1 安装
gem 'mini_magick'
# app/uploaders/avatar_uploader.rb
include CarrierWave::MiniMagick
2.2 裁减图片
# app/uploaders/avatar_uploader.rb
version :thumb do
process :resize_to_limit => [200, 200]
end
# app/views/articles/show.html.erb
<%= image_tag @article.image_url(:thumb).to_s %>
2.3 增加模糊
# app/uploaders/avatar_uploader.rb
# radial_blur为模糊的程度
process :radial_blur => 2
def radial_blur(amount)
manipulate! do |img|
img.radial_blur(amount)
img = yield(img) if block_given?
img
end
end
2.4 旋转
process :sample_rotate => ["90%", "-80>"]
def sample_rotate(sample, rotate)
manipulate! do |img|
img.combine_options do |c|
c.sample(sample)
c.rotate(rotate)
end
img = yield(img) if block_given?
img
end
end
2.5 加水印
process :make_watermark => "你的图片的地址"
def make_watermark(watermark)
manipulate! do |img|
img = img.composite(MiniMagick::Image.open(watermark, "jpg")) do |c|
c.gravity "SouthEast"
end
img = yield(img) if block_given?
img
end
end
打水印的位置可以是'Center', 'NorthWest', 'North', 'NorthEast', 'West', 'Center', 'East', 'SouthWest', 'South', 'SouthEast'
2.6 转化格式
process :convert => 'png'
def filename
super.chomp(File.extname(super)) + '.png' if original_filename.present?
end
完结。
本站文章均为原创内容,如需转载请注明出处,谢谢。
0 条回复
暂无回复~~
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top