第一款Mac应用,第一个Swift程序 TinyPNG4Mac

TinyPNG4Mac 已经更新啦,欢迎访问:TinyPNG4Mac更新啦

TinyPNG是一个专注png图片压缩的网站,平均压缩比例能达到70%,同时对于图片质量的损失几乎为0。对于Web应用,能减少加载时间,对于移动App,能大大降低应用体积和内存消耗。非常推荐使用。

TinyPNG4Mac,这第一款Mac应用,也就是TinyPNG服务的Mac客户端。它可以方便的让你不需要打开浏览器就可以批量压缩png图片,只需要拖拽图片到界面上。现已开源到Github:TinyPNG4Mac 下载链接:TinyPNG4Mac

它长这个样子:

preview

界面跟简单,左边是操作区域,右边是任务列表。

使用方法

  1. TinyPNG申请一个秘钥,不要被吓到,只需要填个邮箱和用户名即可,秘钥会自动发到邮箱。
  2. 将秘钥复制到界面左上角的输入框里,点submit。(以后就不需要输入了)
  3. 将需要压缩的文件拖拽到左边中间区域。
  4. 客户端会自动将压缩完成的图片下载到桌面/tinypng_output目录。

除了第一步比较麻烦,整个流畅还是蛮简单的。右边的列表会跟踪每张图片的进度。完成之后会有一个Show按钮显示,点击会打开输出文件夹,方便拷贝和使用。

因为TinyPNG压缩图片也是需要资源的,每个用户每个月只能免费压缩500张图片,有更多需求的话可以绑定信用卡,自动扣费。不过这个现实对于大多数同学还是足够了。

注意

因为Mac系统有安全限制,如果系统提示不能打开,请到设置 -> 安全性与隐私勾选全部来源,启动一次之后可以再把这个选项关闭。出于安全考虑,我也建议你这么做。

原理分析

项目的逻辑比较简单:

  1. 接收输入的文件
  2. 创建并储存任务列表
  3. 将任务加入队列,取任务并执行
    1. 上传文件,并接收结果
    2. 下载压缩后的文件并保存到本地文件
    3. 根据进度随时更新列表
  4. 循环从队列中取任务直到全部完成

库方面,使用了两个第三方库:

  1. Alamofire:Swift版的AFNetworking。
  2. SwiftyJSON:JSON解析,很好用,比JSONModel舒服很多。
项目结构:

struct

麻雀虽小还是五脏俱全的,哈哈。

  • 界面通过StoryBoard实现,截图里没有涉及。
  • 一个Model用来描述任务,同时里面定义了状态枚举。
  • tpclient组下面封装了核心逻辑,存储、队列和执行器,执行的时候通过Notification同时界面更新。
  • views包含一个实现拖拽逻辑的View,使用delegate将结果传递给ViewController;和一个TableCell封装,处理Cell的显示
  • utils就是工具类了,字符串格式化、文件操作、配置操作。

逻辑简单,而且第一次写swift,所以就不献丑贴代码了,感兴趣的同学可以去Github上下载源码。

总结&感受

对于swift,写起来还是有一丢丢不习惯。我是在年初的时候看了一遍swift的文档,对一些基本的概念有一些了解,另外Java和OC都比较熟悉,再加上Cocoa开发和iOS很多相似的地方(Cocoa才是元老好么……),所以语言上的阻力并不大。只是在语法上有一点不适应感。

Cocoa,资料太少了,而且太老了,基本都是几年前的。可见最近几年移动端的发展速度真是碾压桌面端。没做过,所以就各种Google,好在做的东西不难,所以还算是顺利吧。

结构设计上,这个场景应该算常见,就是任务处理。当我想到任务处理的时候,自然而然想到了任务队列,估计是之前看源码之类留下的印象,可见多看源码多学习是有好处的,不仅能有鱼吃,还有渔可得。得到了就是自己的,不需要怎么想就蹦出来了。实现上可能还有欠缺,欢迎各种建议。