mindpin / problems

问题驱动研发!!
5 stars 1 forks source link

占位图片生成器 #39

Open ben7th opened 10 years ago

ben7th commented 10 years ago

传入宽高值,从图片库里选择最合适的占位图片。

图片库里的图片由管理员维护,持久化记录宽高,以及宽高比值。width, height, ratio 简单起见,可以在部署后把一些图片放置在指定的目录下,不通过 web 管理。

获取图片时,根据传入的宽高计算出比值,选择宽高和比值都最接近的图片,进行缩放处理后返回response

体验类似:http://placekitten.com/

ben7th commented 10 years ago

基本需求

后台图片的管理 服务包含一个 web 页面,管理员通过这个 web 页面来上传一些用来在将来作为占位图的图片。 数据库记录曾经上传过的图片信息,记录的信息包括图片的宽 width(像素值)高 height(像素值)以及宽高比 ratio(宽/高) 所有的图片都持久化保存在 img4ye,使用 img4ye 提供的 api 来上传到 img4ye,记录 img4ye 返回的图片 CDN 网址。 简单地说:每通过后台管理界面上传一张图片,此工程数据库里记录一条数据。而图片是保存在 img4ye 的。 管理界面上需要列出数据库记录中每张图片的宽高,宽高比,和缩略图(缩略图调用 img4ye 的图片尺寸转换 url 来生成) 后端允许删除记录。删除记录后,img4ye 的图片不删。

占位图片的生成 当访问 /200/300 这样的 url 时,斜杠分隔的两个数代表期望的占位图片宽高。程序拿到这两个宽高后,根据数据库记录查找最合适的图片。 目前由于没有想到比较合适的算法,先随机选择图片 使用 url 方式,拿到 img4ye 中 @wxxx_hxxx_1e_1c 这样的网址对应的图片数据,并 sendfile

fushang318 commented 10 years ago

工程名 image-placeholder-service rails 工程

模型

class Image
  include Mongoid::Document
  include Mongoid::Timestamps

  field :url,     type: String
  field :width,   type: Integer
  field :height,   type: Integer
  field :ratio,   type: float  # 数值举例 2.12 (width 除以 heigth 获得,最多保留小数点后两位)
end

控制器

url
  /
method
  get
response
  判断是否用户登陆了
  如果没有登陆,调转到 /login
url
  /login
method
  get
response
  判断是否用户登陆了
  如果没有登陆,返回登陆表单
  如果登陆了,调转到 /images
  只有一个用户,用户名是 admin 密码是(开发时,询问fushang318)
  验证写死在代码中,验证密码的逻辑是这样的:把提交的密码md5后与代码中写死的正确密码的MD5字符串比较,如果一样则说明密码输入正确
url
  /images
method
  get
response
  返回目前已经有的图片列表页面
url
  /images/new
method
  get
response
  返回上传图片文件页面
url
  /images
method
  post
params
  file # 上传的图片文件
logic
  把上传的文件通过img4ye上传,并把返回的图片url 访问地址保存到 image 模型的 url 字段
url
  /:width/:height
method
  get 
logic
  根据数据库记录查找最合适的图片。目前由于没有想到比较合适的算法,先随机选择图片
response
  拿到 img4ye 中 @wxxx_hxxx_1e_1c 这样的网址对应的图片数据,并 sendfile

参考文档

https://github.com/mindpin/image-service/wiki

img4ye ruby gem

https://github.com/mindpin/image-4ye

fushang318 commented 10 years ago

rails 版本用 rails 4.1.2 持久模型用 mongoid 4.0.0 界面模版用 haml

fushang318 commented 9 years ago

已经由 @destinyd 完成

http://ph.4ye.me 访问服务

如果想通过后台管理图片,请看下面链接的说明 http://docs.4ye.me/notes/54695607286e6f425f030000