UNPKG

@~lisfan/vue-upyun-image-format

Version:

vue过滤器插件-又拍云图片处理工具:默认以指定的策略规则进行了处理优化

490 lines (221 loc) 12.2 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Home - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc.css"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav> <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#install">install</a></li><li><a href="global.html#image-format">image-format</a></li></ul> </nav> <div id="main"> <section class="readme"> <article><h1 id="vue-upyun-image-format">vue-upyun-image-format</h1> <h2 id="vue-">vue过滤器插件-又拍云图片处理工具:默认以指定的策略规则进行了处理优化</h2> <p><a href="https://lisfan.github.io/vue-upyun-image-format/">API documentation</a></p> <h2 id="feature-">Feature 特性</h2> <ul> <li>利用又拍云的图片处理服务,提供最适当的图片默认优化策略</li> </ul> <h2 id="detail-">Detail 详情</h2> <ul> <li>图片优化依赖了又拍云的处理服务,相应的图片处理规则请参考<a href="http://docs.upyun.com/cloud/image/#webp">又拍云文档</a></li> <li>根据当前设计稿和设备物理分辨率缩放比,及设备的DPR值,计算出实际的图片尺寸</li> <li>由于 <a href="https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation">NetworkInformation API</a>支持力度差,所以需要外部额外传入一个获取网络制式的方式(比如平台入口是微信或支付宝的)</li> <li>使用格式:<code>&lt;img :src=&quot;图片地址 | image-format([sizeOrConfig],[scale = 'both'],[format],[quality],[otherRules])&quot; /&gt;</code></li> </ul> <h2 id="install-">Install 安装</h2> <pre class="prettyprint source lang-bash"><code>npm install -S @~lisfan/vue-upyun-image-format</code></pre><h2 id="usage-">Usage 起步</h2> <pre class="prettyprint source lang-js"><code>import Vue from 'vue' import VueUpyunImageFormat from '@~lisfan/vue-upyun-image-format' // 注册指令 // 以下是默认值 Vue.use(VueUpyunImageFormat, { debug: true, // 开启调试模式 maxDPR: 3, // (>=4)g网络或者'unknow'未知网络下,DPR取值的最大数 draftRatio: 2, // UI设计稿尺寸与设备物理尺寸的比例 scale: 'both', // 又拍云图片尺寸缩放方式,默认宽度进行自适应,超出尺寸进行裁剪,若自定义尺寸大于原尺寸时,自动缩放至指定尺寸再裁剪 quality: 90, // 又拍云jpg格式图片压缩质量 rules: '', // 又拍云图片处理的其他规则 minWidth: global.document.documentElement.clientWidth * global.devicePixelRatio / 2, // 默认值是(当前设备的物理分辨率 * 当前实际设备像素比的) 二分之一 networkHandler() { // 获取网络制式的处理函数,如果实在不知道怎么获取,建议返回4g return '4g' } })</code></pre><pre class="prettyprint source lang-html"><code>&lt;!-- 无作何参数:使用原尺寸,内部使用默认优化策略,转换为jpg,压缩90%,并启用渐进载入 --> &lt;img :src=&quot;imageSrc | image-format&quot;> &lt;!-- 使用原尺寸,转换为png,并启用png压缩优化算法 --> &lt;img :src=&quot;imageSrc | image-format('200x300',null,'png')&quot;> &lt;!-- 裁剪为500宽500高的尺寸,转换为jpg,压缩80% --> &lt;img :src=&quot;imageSrc | image-format('500',null,null,80)&quot;> &lt;!-- 使用宽高适应缩放方式,以最小边为准,转换为jpg,不压缩质量 --> &lt;img :src=&quot;imageSrc | image-format('500x100','fwfh',null,100)&quot;> &lt;!-- 以字典方式进行配置 设置宽度为400px,不进行渐进载入,转换为jpg,压缩质量为50% --> &lt;img :src=&quot;imageSrc | image-format({ size:'400', scale:'both', progressive:false, quality:50, })&quot;> &lt;!-- 使用默认配置,但配置了一些其他规则:增加水印,你好 --> &lt;img :src=&quot;imageSrc | image-format(null,null,null,null,'/watermark/text/5L2g5aW977yB')&quot;></code></pre><h2 id="-">附:又拍云图片处理的研究报告</h2> <p><strong>注1:该测试是建立在使用又拍云的图片处理服务的,所以其他场景下结果会有不同,不要沿用</strong></p> <p><strong>注2:本测试只考虑了图片的容量对加载速度的影响,并不考虑因图片格式的不同,而造成的浏览器渲染图片速度的问题</strong></p> <p><strong>注3:但可能存在的一个规则是:图片数量级越多,图片容量越小,最终的渲染总时间消耗越少</strong></p> <h3 id="-png-jpg-webp-">静态图源(<code>png/jpg/webp</code>)的对比( 同一图源,相同尺寸下 )</h3> <ol> <li>未使用任何优化的情况下<ul> <li>png &gt; 无损webp &gt; jpg &gt; 有损webp</li> </ul> </li> <li>使用压缩优化(<code>compress/true</code>)的情况下:压缩后的png比未压缩优化约65%,压缩jpg比未压缩优化约5%<ul> <li>png &gt; 无损webp &gt; 压缩png &gt; jpg &gt; 压缩jpg &gt; 有损webp</li> </ul> </li> <li>png设置了压缩优化后(<code>compress/true</code>)<ul> <li>png -&gt; png压缩算法,容量优化约65%</li> </ul> </li> <li>png转jpg,png转webp<ul> <li>png -&gt; jpg,容量优化约70%</li> <li>png -&gt; webp,容量优化约95%</li> </ul> </li> <li>jpg转webp<ul> <li>jpg -&gt; webp,容量优化约80%</li> </ul> </li> <li>jpg设置了压缩质量(<code>quality/&lt;number&gt;</code>)后<ul> <li>jpg 90%的质量下,容量优化35%</li> <li>jpg 80%的质量下,容量优化约60%</li> </ul> </li> <li>png、webp、jpg图片质量相较时(纯肉眼判断)<ul> <li>jpg格式的色彩饱和度最好,饱满靓丽</li> <li>png和webp饱和度质量相差无几,整体偏灰,饱和底下降会比较明显</li> <li>webp如果细看会有模糊感,细节会丢失</li> <li>jpg在压缩质量90%情况下细节还原度还挺高,压缩质量80%的情况下细节丢失度还是挺严重的,但总体细节还原还是比webp好</li> <li>所以针对于大尺寸图片,在质量和容量双重保证的情况下使用jpg格式,而对于小尺寸图片,则优先使用webp格式</li> </ul> </li> </ol> <h3 id="-gif-webp-">动态图源(gif/动态webp)的对比( 同一图源,相同尺寸下 )</h3> <ol> <li>未使用任何优化的情况下<ul> <li>无损动态webp &gt; gif &gt; 有损动态webp</li> </ul> </li> <li>gif转无损webp,gif转有损webp,<ul> <li>gif -&gt; 无损webp,容量增长约10%</li> <li>gif -&gt; 有损webp,容量优化约80%</li> </ul> </li> <li>gif转换为有损webp,并没有明显的不适感</li> </ol> <h2 id="-">实行约定(也是该插件的内部默认优化策略)</h2> <h3 id="-">图片格式</h3> <p>默认情况下,根据浏览器对webp特性的支持情况,图片格式会按照以下不同的场景转换成webp或jpg</p> <ul> <li>(静态,支持webp,图片宽小于设备物理分辨率*dpr的2分之1时),格式化为webp格式(又拍云api: <code>/format/webp</code></li> <li>(静态,支持webp,图片宽大于设备物理分辨率*dpr的2分之1时),格式化为jpg格式(又拍云api: <code>/format/jpg</code></li> <li>(静态,不支持webp),格式化为jpg格式(又拍云api: <code>/format/jpg</code></li> <li>(动态,支持动态webp时),格式化为webp格式(又拍云api: <code>/format/webp</code></li> <li>(动态,不支持动态webp时),格式化为gif格式,不作变动</li> </ul> <h3 id="-">图片质量</h3> <ul> <li>图片格式为 jpg 格式时,使用90%压缩质量(又拍云api: <code>/quality/90</code></li> <li>图片格式为 png 格式时,使用压缩优化(又拍云api: <code>/compress/true</code></li> <li>图片格式为 webp 格式时,使用有损webp</li> <li>图片格式为 gif 格式时,不作变动</li> </ul> <h3 id="-">图片尺寸</h3> <p>默认宽度进行自适应,超出尺寸进行<strong>裁剪</strong>,若自定义尺寸大于原尺寸时,自动缩放至指定尺寸再裁剪(又拍云api: <code>/both/宽x高</code></p> <h3 id="-">其他优化</h3> <p>图片格式为 jpg 格式时,启用模糊到清晰的<strong>渐进加载</strong>效果(又拍云api: <code>/progressive/true</code></p> <h3 id="-">注意点</h3> <p>图片格式为 jpg 格式时,同时使用<strong>渐进加载</strong><strong>压缩优化</strong>会有冲突,具体表现:渐进加载是一个从灰阶图片到彩色图片的渲染</p></article> </section> <section> <header> <h2> index.js </h2> </header> <article> <div class="container-overview"> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="index.js.html">index.js</a>, <a href="index.js.html#line1">line 1</a> </li></ul></dd> <dt class="tag-version">Version:</dt> <dd class="tag-version"><ul class="dummy"><li>2.0.0</li></ul></dd> <dt class="tag-author">Author:</dt> <dd class="tag-author"> <ul> <li><a href="mailto:goolisfan@gmail.com">lisfan</a></li> </ul> </dd> </dl> <div class="description"><p>又拍云图片处理工具插件</p></div> </div> </article> </section> <section> <header> <h2> utils/get-network-type.js </h2> </header> <article> <div class="container-overview"> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="utils_get-network-type.js.html">utils/get-network-type.js</a>, <a href="utils_get-network-type.js.html#line1">line 1</a> </li></ul></dd> </dl> <div class="description"><p>获取网络制式</p></div> </div> </article> </section> <section> <header> <h2> utils/webp-features-support.js </h2> </header> <article> <div class="container-overview"> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="utils_webp-features-support.js.html">utils/webp-features-support.js</a>, <a href="utils_webp-features-support.js.html#line1">line 1</a> </li></ul></dd> </dl> <div class="description"><p>检测webp特性的支持程度</p></div> </div> </article> </section> </div> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Nov 07 2017 17:34:19 GMT+0800 (CST) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme. </footer> <script>prettyPrint();</script> <script src="scripts/linenumber.js"></script> </body> </html>