提供图片样式的便利方法
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 从你说的这个方向考虑是很有帮助。