概述

所谓智能裁剪其实就是按照指定尺寸裁剪或显示出包含图片核心特征的区域,目前很多智能裁剪都是在服务器端做的,在客户端需要访问时直接裁剪放到Redis或者提前裁剪好以备访问。但是找了一圈直接在iOS客户端进行裁剪的库还不多,或者使用成本比较高,不能即拿即用。但是有时候客户端可能并非直接从服务器端获取数据而是读取相册数据,不可能先把图片存放到服务器端裁剪然后再拿来用,考虑到这种场景也不再少数,因此就有必要思考一套客户端智能裁剪的方案。

免费好用的智能裁剪库

最近两天整理了之前开发一个软件过程中自己开发的一个客户端智能裁剪库供有需要的同学使用,当然后面有时间的话会整理开源。说是库本质就是一套算法而已,但是在编写这套算法期间也参考评估过很多已有或者想要使用而没有使用的解决方案。

首先说一下目前在网上比较容易找到的一些库存在的问题:

  • 没有iOS对应的版本,集成起来极其复杂,之前为了用一个不错的库甚至在iOS调用Python库
  • 速度慢,生成一张智能裁剪后的图片需要1s左右,不再可容忍范围之内
  • 人像识别不准确,图片中占比较小的人脸识别不出来,甚至有可能出现误识别(这个其实比识别不出来问题还大)
  • 基于专利收费算法实现(例如使用SRUF),不仅开发者使用起来要引用大量的库而且有收费风险
  • 集成比较麻烦,使用起来光配置环境就要摆弄半天,还不一定能成功

当然,事实上在探索过程中也走了不少的弯路,遇到的问题要比上面多得多,包括有些算法只能裁剪横图,对于宽高比较小的竖图支持很差,又或者引入大量的库造成app本身大小直线上升等等。。。因此这也就是为什么自己要开发一个新的库SmartCrop.framework而不是基于现有库来做的原因。

那么SmartCrop.framework智能裁剪库又有什么特点呢:

  • 跨平台,当然既然作为一个iOS开发者一定要包含iOS版本(尽管此文中只提供了iOS版本,不过其实这个库本身基于c++实现,天然具有跨平台特性,后续有时间也会整理其他平台的版本)
  • 速度快,几乎可以做到实时裁剪

    iOS客户端图片智能裁剪的更多相关文章

    1. iOS 设置图片imageView圆角——对图片进行裁剪

      以前设置图片圆角总是把imageView设置成圆形,然后设置maskToBounds为YES,其实这样处理很消耗性能,图片多了之后比较卡,最好将图片进行裁剪后显示:这里有个分类可以用: UIImage ...

    2. iOS实现图片裁剪功能,基于TKImageView完善与讲解

      1.功能需求:需要实现图片区域裁剪功能. 2.效果图:     3.实现原理:本来想自己实现的,刚好看到一个比较好的库:TKImageView,下载好研究了下,发现基本都能满足我的需求,而且封装的也比 ...

    3. 开源中国iOS客户端学习

      开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

    4. 【HELLO WAKA】WAKA iOS客户端 之一 APP分析篇

      由于后续篇幅比较大,所以调整了内容结构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 APP分析篇 [HELLO WAKA]WAKA iOS客户端 之二 架构设计与实现篇 [HELL ...

    5. IOS客户端Coding项目记录导航

      IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线  表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...

    6. iOS客户端的在线安装和更新——针对ADHoc证书

      这篇文章纯给自己留个备份,所以对AdHoc证书内部分发和对iOS客户端开发不了解的请直接无视. 一般在iOS游戏或应用开发过程中,正式发布到App Store之前,都需要内部的测试,客户端的安装是个不 ...

    7. 一秒钟生成自己的iOS客户端

      原谅我这个标题党 想当年我也是亲自学过几天Objective-c的程序猿,我一眼就知道我是在骗人,但那有怎样呢!还不是满大街都是各种<十分钟让你明白Objective-C的语法>.< ...

    8. 新浪微博iOS客户端架构与优化之路

      新浪微博iOS客户端架构与优化之路   随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类 ...

    9. 蘑菇街iOS客户端应用源码

      蘑菇街iOS客户端应用源码 随着蘑菇街由导购向电商转型,蘑菇街自己的IM也应运而生,IM起初只是用于商家和买家之间沟通的工具.后面我们问自己,既然已经有了用于客服的IM,为什么不自己做一个IM,用于公 ...

    随机推荐

    1. 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装

      在asp.net项目中,添加一个[一般处理程序]来处理请求是很自然的事,这样会得到一个实现自IHttpHandler的类,然后只需在ProcessRequest方法中写上处理逻辑就行了.但是这样的一个 ...

    2. Load balancer does not have available server for client

      最近在研究spring-cloud,研究zuul组件时发生下列错误: Caused by: com.netflix.client.ClientException: Load balancer does ...

    3. Java Persistence/ManyToMany

      A ManyToMany relationship in Java is where the source object has an attribute that stores a collecti ...

    4. Latex appendix 生成附录A和B

      第一种: \documentclass[a4paper,12pt]{cctart} \begin{document}     main body %正文内容   \appendix   \renewc ...

    5. 玩转spring MVC(七)----拦截器

      继续在前边的基础上来学习spring MVC中拦截器的使用,下面通过一个例子来实现(完整项目在这里下载:http://download.csdn.net/detail/u012116457/84334 ...

    6. python之six用法

      six.PY2 返回一个表示当前运行环境是否为python2的boolean值 six.PY3 返回一个表示当前运行环境是否为python3的boolean值 import six,sys print ...

    7. util.go

      packagesego import(     "bytes"     "fmt" ) //输出分词结果为字符串 // //有两种输出模式,以"中华人 ...

    8. baseFileWriter.go

      package blog4go import ( "fmt" "os" "sync" "time" ) const ( ...

    9. context.go

      package nsqd type context struct {     nsqd *NSQD }

    10. kv.go

      package clientv3 import (     pb "github.com/coreos/etcd/etcdserver/etcdserverpb" //protob ...