Png压缩工具

最近有一个需求,需要对 png 和 jpg 格式的图片进行压缩,jpg 格式的图片压缩比较简单,难点主要是针对 png 图片,本想继续采用前篇文章的方式将 png 转为 jpg 图片进行压缩的,但我发现部分转换后的图片出现比较大的问题,图片的背景由其它颜色变成了黑色,那看来不能采用原来的方法,得寻找新的方法,通过查阅资料发现了2个压缩 png 图片的工具 pngquant 和 pngcrush,接下来我就来分别介绍这2个工具。 pngquant pngquant是一个命令行实用程序,也是一个用于PNG图像有损压缩的库。这种转换大大减少了文件大小(通常多达70%),并保留了完全的alpha透明度。 下载 可以通过官网提供的 gui 程序或者 命令行程序链接下载 pngquant,也可以通过源代码进行编译,我采用了编译好的命令行程序。 参数 1 2 3 4 5 6 7 8 9 10 11 12 13 options: --force 覆盖原来输出的图片 --skip-if-larger 仅当原来图片小于原图片时才保留 --output file 输出的文件路径 --ext new.png 为输出文件名设置自定义扩展名。默认情况下使用-or8.png或-fs8.png。 --quality min-max 指示使用达到或超过最高质量pngquant所需的最少颜色。如果转换导致质量低于最低质量,则图像将不会被保存(如果输出到标准输出,将输出 24 位原始图像)并将以状态码 99 退出。pngquant min和max是 0(最差)到 100(完美)范围内的数字 --speed N 从 1(暴力)到 10(最快)的速度/质量权衡。默认值为 3。速度 10 的质量降低 5%,但比默认值快 8 倍。 --nofs 禁用 Floyd-Steinberg dithering --posterize N output lower-precision color (e....

November 5, 2022 · 1 min · overstarry

Go压缩png图像大小

起因 最近在处理一个需求,需要将 png 图像按比例调整图像尺寸,要求在保证图像质量的情况下尽量缩小文件大小。在本篇文章主要介绍我将 png 文件大小缩小使用的方法。 方法 这个需求缩小图像的尺寸很好解决,但缩小后的图像大小不尽人意,缩小的图像文件大小没有变化过多,甚至更大。我通过查询,发现了一种方法,就是先将图片转换为 jpeg 格式,再进行压缩后转换为 png 即可。 Jpeg的图片压缩是很好做的,因为jpeg这个协议本身就支持调整图片质量的。在golang中,我们只需要使用标准库的image/jpeg,将图片从二进制数据解码后,降低质量再编码为二进制数据即可实现压缩。而且质量和压缩比例相对而言还不错。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 func compressImageResource(data []byte) []byte { imgSrc, _, err := image.Decode(bytes.NewReader(data)) if err != nil { return data } newImg := image.NewRGBA(imgSrc.Bounds()) draw.Draw(newImg, newImg.Bounds(), &image.Uniform{C: color.White}, image.Point{}, draw.Src) draw.Draw(newImg, newImg.Bounds(), imgSrc, imgSrc.Bounds().Min, draw.Over) buf := bytes.Buffer{} err = jpeg.Encode(&buf, newImg, &jpeg....

July 2, 2022 · 1 min · overstarry