@@ -2,9 +2,11 @@ import imagemin from 'imagemin'
22import mozjpeg from 'imagemin-mozjpeg'
33import { CompressOptions , ImgInfo } from '../utils/interfaces'
44import { getImageBuffer } from '../utils/getImage'
5- var images = require ( "images" ) ;
65
6+ var images = require ( 'images' )
7+ const isGif = require ( 'is-gif' )
78
9+ //由于gitee文件大小有1mb限制, 所以超过1mb的文件无法通过外链获取
810
911export function lubanCompress ( { ctx, info } : CompressOptions ) : Promise < ImgInfo > {
1012 /*function getSample(info: ImgInfo) {
@@ -13,27 +15,27 @@ export function lubanCompress({ ctx, info }: CompressOptions): Promise<ImgInfo>
1315
1416
1517 function computeInSampleSize ( srcWidth : number , srcHeight : number ) {
16- srcWidth = srcWidth % 2 == 1 ? srcWidth + 1 : srcWidth ;
17- srcHeight = srcHeight % 2 == 1 ? srcHeight + 1 : srcHeight ;
18+ srcWidth = srcWidth % 2 == 1 ? srcWidth + 1 : srcWidth
19+ srcHeight = srcHeight % 2 == 1 ? srcHeight + 1 : srcHeight
1820
19- var longSide = Math . max ( srcWidth , srcHeight ) ;
20- var shortSide = Math . min ( srcWidth , srcHeight ) ;
21+ var longSide = Math . max ( srcWidth , srcHeight )
22+ var shortSide = Math . min ( srcWidth , srcHeight )
2123
22- var scale = ( shortSide / longSide ) ;
24+ var scale = ( shortSide / longSide )
2325 if ( scale <= 1 && scale > 0.5625 ) {
2426 if ( longSide < 1664 ) {
25- return 1 ;
27+ return 1
2628 } else if ( longSide < 4990 ) {
27- return 2 ;
29+ return 2
2830 } else if ( longSide > 4990 && longSide < 10240 ) {
29- return 4 ;
31+ return 4
3032 } else {
31- return longSide / 1280 == 0 ? 1 : longSide / 1280 ;
33+ return longSide / 1280 == 0 ? 1 : longSide / 1280
3234 }
3335 } else if ( scale <= 0.5625 && scale > 0.5 ) {
34- return longSide / 1280 == 0 ? 1 : longSide / 1280 ;
36+ return longSide / 1280 == 0 ? 1 : longSide / 1280
3537 } else {
36- return Math . ceil ( longSide / ( 1280.0 / scale ) ) ;
38+ return Math . ceil ( longSide / ( 1280.0 / scale ) )
3739 }
3840 }
3941
@@ -45,13 +47,16 @@ export function lubanCompress({ ctx, info }: CompressOptions): Promise<ImgInfo>
4547
4648 return getImageBuffer ( ctx , info . url )
4749 . then ( ( buffer ) => {
48- ctx . log . warn ( '原始文件大小:' + Math . round ( buffer . length / 1024 ) + "k" )
50+ ctx . log . warn ( '原始文件大小:' + Math . round ( buffer . length / 1024 ) + 'k' )
4951 if ( isJpg ( buffer ) ) {
5052 ctx . log . warn ( '本身就是jpg,不用转换:' + info . url )
5153 return buffer
5254 }
55+ if ( isGif ( buffer ) ) {
56+ return buffer
57+ }
5358 ctx . log . warn ( 'luban 格式转换为jpg:' + info . url )
54- return images ( buffer ) . encode ( " jpg" ) //, {operation:90}
59+ return images ( buffer ) . encode ( ' jpg' ) //, {operation:90}
5560 } )
5661 /*.then((buffer)=>{
5762 var image2 = images(buffer)
@@ -78,15 +83,19 @@ export function lubanCompress({ ctx, info }: CompressOptions): Promise<ImgInfo>
7883 return image2.resize(conpressWidth).encode("jpg")//, {operation:90}
7984 })*/
8085 . then ( ( buffer ) => {
81- ctx . log . warn ( '文件大小:' + Math . round ( buffer . length / 1024 ) + "k" )
86+ ctx . log . warn ( '文件大小:' + Math . round ( buffer . length / 1024 ) + 'k' )
8287
8388 var image2 = images ( buffer )
84- ctx . log . warn ( '图片尺寸:' + image2 . width ( ) + "x" + image2 . height ( ) )
89+ ctx . log . warn ( '图片尺寸:' + image2 . width ( ) + 'x' + image2 . height ( ) )
90+ if ( isGif ( buffer ) ) {
91+ ctx . log . warn ( 'gif图,不压缩' )
92+ return buffer
93+ }
8594 //todo 关键在于获取图片本身的宽高
8695 var sample = Math . round ( computeInSampleSize ( image2 . width ( ) , image2 . height ( ) ) )
8796 var filesize = Math . round ( buffer . length / 1024 )
8897 var longsize = image2 . width ( ) > image2 . height ( ) ? image2 . width ( ) : image2 . height ( )
89- var sampleSize = [ '1x1' ] ;
98+ var sampleSize = [ '1x1' ]
9099 if ( filesize > 100 && sample > 1 ) {
91100 if ( longsize > 3000 && filesize < 700 ) {
92101
@@ -98,14 +107,14 @@ export function lubanCompress({ ctx, info }: CompressOptions): Promise<ImgInfo>
98107 ctx . log . warn ( 'sampleSize:' + sampleSize [ 0 ] )
99108
100109 return imagemin . buffer ( buffer , {
101- plugins : [ mozjpeg ( { quality : 75 , sample : sampleSize } ) ] , //, optipng({ optimizationLevel: 5 })//, sample:sampleSize
110+ plugins : [ mozjpeg ( { quality : 75 , sample : sampleSize } ) ] //, optipng({ optimizationLevel: 5 })//, sample:sampleSize
102111 } )
103112 } )
104113 . then ( ( buffer ) => {
105- ctx . log . warn ( '最后mozjpeg compress in success,最终文件大小:' + Math . round ( buffer . length / 1024 ) + "k" )
114+ ctx . log . warn ( '最后mozjpeg compress in success,最终文件大小:' + Math . round ( buffer . length / 1024 ) + 'k' )
106115 return {
107116 ...info ,
108- buffer,
117+ buffer
109118 }
110119 } )
111120}
0 commit comments