const dpi = window.devicePixelRatio >= 3 ? 3 : 2;
const qualitys = {
webp: ['h', 'l', 'u'],
jpg: ['h', 'l'],
png: ['h'],
};
const compress = (url, width = 50, isAlpha, isRatio = true, quality = 'h') => {
if (!url) {
return '';
}
const reg =
/-(c\.w\.i\d+|c\.w\d+|cw\.w\d+|fe\.w\d+|h\.w\d+|h\.w\.i\d+|icon|lw\d+|o\d+|o\.i\d+|w\d+|yyb|t\.w\d+)/;
const matchResult = url && url.match(reg);
if (matchResult) {
url = url.slice(0, matchResult.index);
}
const ua = navigator.userAgent.toLowerCase();
const isApple = /iphone|ipad|ios|mac/.test(ua);
const iosMajorVersion = (ua.match(/(cpu\s+iphone\s+os|cpu\s+os)\s+(\d+)(_\d+){0,2}/) || [
'',
'',
'0',
'_0',
'_0',
])[2];
const appleWebpSupported = /chrome/.test(ua) || Number(iosMajorVersion) >= 14;
let format = 'webp';
if (isApple && !appleWebpSupported) {
if (isAlpha) {
format = 'png';
} else {
format = 'jpg';
}
}
isRatio && (width = (width * dpi) / 2);
const widthArr = [
50, 70, 90, 120, 180, 207, 320, 360, 414, 540, 563, 640, 720, 750, 828, 960, 1080, 1125,
1280, 1440, 1600, 2160,
];
for (let i = 0, ii = widthArr.length; i < ii; i++) {
if (width <= widthArr[i] || i === ii - 1) {
width = widthArr[i];
break;
}
}
quality = qualitys[format].indexOf(quality) > -1 ? quality : 'h';
return `${url}-t.w${width}.${format}.${quality}`;
};
01-16
1837

05-18
2675

08-05
08-05