AspectFill VS. AspectFit
从去年10月进入公司,到现在差不多忙碌了3个月,期间几乎所有精力和时间都花在了公司的项目上,有很多工作学习的心得一直没有总结,趁周末无事就来使这写一写。
除了刚进公司的那一个月是做一些修修补补的工作,后面的时间直接就在项目里大刀阔斧的搞改造,大概用了不到一个月的时间完成一个新的核心功能,当然是多亏了安卓版的前车之鉴,进度来的比较快,那段时间总体来说就是跟CoreGrahics 打交道,玩弄动画和affineTransform ,然后就是移植opencv的代码,很无脑的移植而已。这里唯一值得一提的是搞清楚了 AspectFill 和 AspectFit 是怎么回事。
AspectFill VS. AspectFit
如果跟图片打过交道,这两个概念几乎是最常见的,其实也不仅限于图片,这个概念涉及到所有内容和容器的关系。通常,如果我们要把一个固定大小的内容,比如图片放到一个固定大小的容器里,但是这个容器的宽高比例和图片的不一样的时候,我们不能简单粗暴的直接把图片的宽高设置成和容器的一样,这样图片会被挤压而失真。所以就需要按比例来缩放图片,使其既保证真实的比例,又能塞进给定的容器。但是如何缩放就是个问题:
- 容器和图片的比例一样,这个好办,只需要按照比例缩放就行了,比如缩小3倍,newWidth = width / 3; newHeight = height /3
- 容器和图片比例不一样,问题来了。
假设容器宽和高分别是H, W;图片宽高分别是h, w。图片和容器比例不一样可能带来这个问题 h / H = 3; w / W = 2。因为要按比例,所以我们只能从缩小3倍和缩小2倍中选一个来缩放。
如果我们选择缩3 倍,那么新图片的高度刚好和容器契合,但是宽度本来只需缩小2倍就够了,但是我们缩了3倍,于是新图片在容器里的宽度就不能填满而出现了留白,这样的缩放方式就是AspectFit 因为他取了最大的缩放值从而保证整张图片都能完整的放进容器(这就是Fit),代价是不能充满容器。
对于AspectFill 当然就是与Fit 相反,其目的是“Fill” 即保证充满容器。所以选择两个缩放值中较小的那个,接上例,因为选择缩小2倍,所以宽度刚好契合容器,但是高度因为只缩了2倍所以导致一部分图片内容被截在了容器外面。
Conclusion
AspectFill 用途:保证图片充满整个容器,方式:选取宽高缩放值里较小的值来缩放,代价:一部分图片内容被截断。
AspectFit 用途:保证图片完整地装进容器,方式:选取宽高缩放值里较大的值来缩放,代价:容器无法装满,出现留白。
To Be Continued....
AspectFill VS. AspectFit的更多相关文章
- ios基础知识
1获取系统语言设置 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; NSArray *languages = ...
- iOS 基础知识
1获取系统语言设置 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; NSArray *languages = ...
- 微信小程序image组件中aspectFill和widthfix模式应用详解
aspectFill 与 widthfix 都是保持宽高比不变 aspectFill 保持纵横比缩放图片,只保证图片的短边能完全显示出来.也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发 ...
- 浅谈H5图片中object-fit的属性及含义/ 小程序image mode属性中scaleToFill,aspectFit,widthFix等类似
我们在H5中对于图片的属性包含如下: object-fit属性有哪些值呢? object-fit: fill; object-fit: contain; object-fit: cover; o ...
- iOS 底层框架的浅析
1.简介 IOS是由苹果公司为iPhone.iPod touch和iPad等设备开发的操作系统. 2.知识点 iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设 ...
- 微信小程序-媒体组件
audio 音频. MediaError.code 示例代码: <!-- audio.wxml --> <audio poster="{{poster}}" na ...
- iOS开发拓展篇—音频处理(音乐播放器6)
iOS开发拓展篇—音频处理(音乐播放器6) 一.图片处理 说明: Aspect表示按照原来的宽高比进行缩放. Aspectfit表示按照原来的宽高比缩放,要求看到全部图片,后果是不能完全覆盖窗口,会留 ...
- iOS - MPMoviePlayer 视频播放
前言 MP_EXTERN_CLASS_AVAILABLE(3_2) NS_DEPRECATED_IOS(3_2, 9_0, "Use AVPlayerViewController in AV ...
- 微信小程序初体验(上)
版权声明:本文由练小习原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/204 来源:腾云阁 https://www.qclo ...
随机推荐
- BZOJ 4423: [AMPPZ2013]Bytehattan
Sol 对偶图+并查集. 思路非常好,将网格图转化成对偶图,在原图中删掉一条边,相当于在对偶图中连上一条边(其实就是网格的格点相互连边),每次加边用并查集维护就可以了. 哦对,还要注意边界就是网格外面 ...
- Android应用反破解的思路
一个Android应用要被破解,要经历:反编译->分析代码->重新编译打包的过程,反破解的思路也是从在这三个步骤上做文章: 1, 寻找反编译工具的缺陷,通过阅读其源码或者对其进行压力测试找 ...
- webpack的最简单应用,只使用js与css的打包
首先进行全局安装webpack npm install -g webpack cmd跳转到项目的文件夹,安装webpack npm install --save-dev webpack 接着需要pac ...
- @PathVariable注解
spring mvc中的@PathVariable是用来获得请求url中的动态参数的,十分方便,复习下: . @Controller public class TestController { @Re ...
- java.lang.ClassNotFoundException: net.sf.json.JSONArray,java.lang.NoClassDefFoundError: net/sf/json/JSONArray jetty跑项目遇到的问题
2016-05-18 15:44:25 ERROR Dispatcher.error[user:|url:]:L38 - Dispatcher initialization failed Unable ...
- js本地解析xls文件
有个插件在这:oss.sheetjs.com 将demo拷贝整理(注意js的齐全)即可. 这里下载:http://download.csdn.net/detail/lion_awake/9326139
- Access an instance through a console
VNC or SPICE is used to view the console output of an instance, regardless of whether or not the con ...
- sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
启动SQL Server 2008 Management Studio 工具菜单----选项----Designers(设计器)----阻止保存要求重新创建表的更改 取消勾选即可.
- ABAP 内表的行列转换-NEW
REPORT Z_TEST_COL_TO_ROW. TYPE-POOLS: slis. TABLES: mseg,mkpf. DATA: gd_fieldcat TYPE slis_t_fieldca ...
- Effective C++ -----条款52:写了placement new 也要写 placement delete
当你写一个placement operator new ,请确定也写出了对应的placement operator delete.如果没有这样做,你的程序可能会发生隐微而时断时续的内存泄漏. 当你声明 ...