前端日常开发中,对于图片的处理与优化

308 阅读1分钟

一、使用工具进行图片压缩

压缩 png 格式的图片

npm install node-pngquant-native
const pngquant = require('node-pngquant-native')
const fs = require('fs')

fs.readFile('./aa.png', (err, buffer) => {
	if (err) throw err
  const resBuffer = pngquant.option({}).compress(buffer)
  fs.writeFile('./bb.png', resBuffer, {
  	flags: 'wb'
  }, (err) => {})
})

压缩 jpg 格式的图片

npm install -g jpegtran

使用方法:

jpegtran -copy none -optimize -outfile bb.jpg aa.jpg

压缩 gif 格式的图片

Gifsicle:通过改变每帧比例,减小 gif 文件大小,同时可以使用透明来达到更小的文件大小。

安装:www.lcdf.org/gifsicle

使用方式:

# 优先级别设置为不小于2,1的话基本不压缩
gifsicle --optimize=3 -o bb.gif aa.gif

# 将透明部分截去
gifsicle --optimize=3 --crop-transparency -o bb.gig aa.gif

二、图片尺寸随网络环境变化

不同网络环境(Wifi/5G/4G/3G)下,加载不同尺寸和像素的图片,通过在图片URL后缀加不同参数改变。

三、响应式图片

JavaScript 绑定事件检测窗口大小

CSS 媒体查询

@media screen and(max-width:640px) {
	my_image(width:640px;)
}

img 标签属性(x描述符:表示图像的设备像素比)

<img srcset="img-320w.jpg, img-640w.jpg 2x, img-960w.jpg 3x" src="img-960w.jpg" />

四、逐步加载图像

使用统一占位符

使用 LQIP

低质量图像占位符(Low Quality Image Placeholders)

npm install lqip
const lqip = require('lqip')
const file = './aa.png'

// 生成base64
lqip.base64(file).then(res => {
	console.log(res)
})

// color
lqip.palette(file).then(res => {
	console.log(res)
})

使用 SQIP

基于 SVG 的图像占位符(SVG Quality Image Placeholders)

npm i sqip
const sqip = require('sqip')

const result = sqip({
	filename: './aa.png',
  numberOfPrimitives: 10 // 图片质量
})
console.log(result.final_svg)

五、项目中图片替代方案

  • Web Font 代替图片
  • 使用 Data URI(base64)代替图片
  • 采用 Image spriting(雪碧图)