huobazi/carrierwave-qiniu

提供图片样式的便利方法

bastengao opened this issue · 3 comments

看了华顺的这篇博客 http://huacnlee.com/blog/rails-app-image-store-with-carrierwave-upyun/ ,提供 user.avatar.url(:thumbnail) 这样的便利方法确实可以简化好多。结合目前的七牛图片样式的用法,我想到可以提供下面一组 api 来方便使用。目前这只是我的想法,我本地实验项目可以基本工作,后面提个PR看看如何。

class AvatarUploader < CarrierWave::Uploader::Base
  # 第一种 通过 array 配置图片样式
  qiniu_styles [:thumbnail, :large]
end

# 图片链接
user.avatar.url(:thumbnail)
# "http://..../avatar.jpg-thumbnail"

class AvatarUploader < CarrierWave::Uploader::Base
  # 第二种 通过 hash 配置图片样式
  qiniu_styles { thumbnail: "imageView2/0/w/200", large: "imageView2/0/w/800" }
end

user.avatar.url(:thumbnail)
# "http://..../avatar.jpg-thumbnail"
# 借助于qiniu可以直接在图片链接后面应用图片处理,这样图片样式可以不必事先添加就可以使用,尤其是在开发过程中比较方便
user.avatar.url(:thumbnail, inline: true) 
# "http://..../avatar.jpg?imageView2/0/w/200"


# 第三种 直接使用图片处理
user.avatar.url(style: "imageView2/0/w/200") 
# "http://..../avatar.jpg?imageView2/0/w/200"

借助于第二种配置方式,可以执行 rake carrierwave:qiniu:set_styles 借助七牛API 添加图片样式。

这功能 qiniu 有很久了,也很好用,所以一直没有在 crrierwave-qiniu 内来做 图片 version 。

各 version 只需在 qiniu 设置即可, 我以前是自己拼接 url 没有加入 gem 里。

方法一那样比较好。方法二三直接暴露图片处理参数的 url 并不好。

只在 qiniu 端设置有一个好处就是 某一天你想改某个 style 从 128x128到 300x300 只在 qiniu 的 bucket 里改具体 style 对应的图片处理参数,而不必再改代码 代码里仍然拼的 url 是 http://.../img.jpg-large

imageMogr/thumbnail/!128x128r/gravity/center/crop/!128x128a0a0/quality/80

改成

imageMogr/thumbnail/!300x300r/gravity/center/crop/!300x300a0a0/quality/80

另外需要可以自己设置 qiniu style 的分隔符,不能写死是横线,如前 qiniu 支持四种分割符 https://support.qiniu.com/hc/kb/article/68884/ 和符合规则的自定义分隔符的

方法三的 rake其实没有必要,只需要在 七牛维护 style 就可以了,没有必要引入到 gem 中来增加复杂性

欢迎提交 PR

通过 rake 任务,可以方便做到自动化,比如使用 mina 或者 cap 部署项目的时候可以同步设置,而不会忘了在七牛上修改。同时图片的样式和源代码一样受到版本控制,而不会没有文档而没办法维护。

同时本地开发或者测试时,可以使用 inline 模式直接改样式看效果,而不是通过七牛修改然后看效果,前者效率要高。测试没问题把 inline 去掉就好了。

@bastengao 从你说的这个方向考虑是很有帮助。