工具类 - 图片

TOC

网页图片格式选择

在网页上,选择合适的图片格式可以有效降低图片体积并保持较高清晰度。以下是几种常见的图片格式及其适用场景:

1. WebP

  • 优点:

    • 由 Google 开发,支持有损和无损压缩。
    • 通常比 JPEG 和 PNG 更小,同时保持较高的清晰度。
    • 支持透明度和动画。
  • 缺点:

    • 不完全支持所有浏览器(尤其是旧版 IE)。
  • 适用场景: 现代浏览器中替代 JPEG 和 PNG 的理想选择。

2. JPEG

  • 优点:

    • 广泛支持,兼容性好。
    • 有损压缩,适合照片和复杂图像。
  • 缺点:

    • 不支持透明度。
    • 压缩过多会导致质量下降。
  • 适用场景: 照片、复杂图像。

3. PNG

  • 优点:

    • 无损压缩,适合需要高清晰度的图像。
    • 支持透明度。
  • 缺点:

    • 文件体积通常较大。
  • 适用场景: 需要透明度的图像、图标、简单图形。

4. SVG

  • 优点:

    • 矢量格式,适合图标和简单图形。
    • 文件体积小,缩放不失真。
  • 缺点:

    • 不适合复杂图像和照片。

适用场景: 图标、简单图形、Logo。

5. AVIF

  • 优点:

    • 最新的图像格式,压缩效率高。
    • 支持有损和无损压缩,透明度和动画。
  • 缺点:

    • 浏览器支持仍在逐步增加。
  • 适用场景: 现代浏览器中替代 WebP 和 JPEG 的新选择。

6. 总结

WebP: 现代浏览器中的最佳选择,兼顾体积和清晰度。

JPEG: 适合照片和复杂图像,兼容性好。

PNG: 适合需要透明度的图像。

SVG: 适合图标和简单图形。

AVIF: 未来的趋势,但目前支持有限。

图片格式转换工具

图形界面工具

Preview(预览)

缺点:支持的格式有限

使用: 打开图片后,选择 文件 -> 导出,然后选择所需的格式并保存。

XnConvert

官网:XnConvert

优点: 支持批量转换和多种格式,操作简单。

缺点:我是用的版本是:XnConvert Version 1.100.1 - ARM64 (Feb 25 2024) - Libformat version 7.172, 我选择将文件导出为avif失败了。

开始于: 13/3/2025 12:25 PM

/Users/xdl/Documents/github/blog/static/image/icon-500.svg 48x48x32 : 已加载
/Users/xdl/Desktop/image/icon-500.avif : 不是图像


---------
保存错误:
/Users/xdl/Desktop/image/icon-500.avif

---------


已输入文件: 1
已提取页: 1
新文件: 1

总持续时间: 0 秒

完成于: 13/3/2025 12:25 PM

不知道后续版本有没有修复这个问题,不过其他格式可以正常转。并且因为图形界面操作,所以如其他:变形,大小,水印等等也挺方便操作的。

命令行工具

imagemagick

Tools and libraries to manipulate images in many formats.

  • 官网:imagemagick

  • 优点:支持的图片格式丰富,转换质量可以

  • 缺点:需要安装

  • 安装:homebrew: brew install imagemagick

  • 使用:

    这是最直接的使用方法 - 单个图片:

    magick input.svg output.avif
    

    可以加入一个质量参数(范围是 0-100,数值越高质量越好):

    magick input.svg -quality 90 output.avif
    

    根据deepseek的说明:

    由于 ImageMagick 依赖 libheif 来处理 AVIF 格式,你可以查阅 libheif 的文档或源码。根据 libheif 的官方文档,默认质量是 75。

    如果 SVG 文件中有透明度,magick 会自动保留透明度信息

    这里可以看到png –> avif 的实例(需要往下滑动一段才能看到图片)

    如果是批量转换,比如要转换一个文件夹下的某个格式的所有图片:

    cd /Users/xdl/Documents/github/blog/static/image
    
    for file in *.svg; do
         magick "$file" -quality 90 "${file%.svg}.avif"
    done
    

    这样如果原文件夹下的内容是:

    icon-16.svg
    icon-192.svg
    icon-24.svg
    icon-500.svg
    icon-180.svg
    icon-194.svg
    icon-32.svg
    

    现在就会在同样的文件夹下新增以下图片:

    icon-16.avif
    icon-192.avif
    icon-24.avif
    icon-500.avif
    icon-180.avif
    icon-194.avif
    icon-32.avif
    

ffmpeg

Play, record, convert, and stream audio and video

虽然它的介绍写的是有关音视频的功能,但它也可以转换图片格式。

有关用ffmpeg处理音视频的方法,后边单独写一章。

  • 官网:ffmpeg

  • 优点:支持的图片格式丰富

  • 缺点:

    • 需要安装;
    • 转换质量不是很好,至少我用它转svg –> avif 的时候,透明部分给转成黑色了,但其他格式还行。我只测试了一次,不具有什么代表性。
  • 安装:homebrew: brew install ffmpeg

  • 使用:

    ffmpeg -i image.png image.jpg
    

sips

scriptable image processing system

sips 是 macOS 自带的命令行工具,支持格式转换。

sips 工具目前不支持 AVIF 格式。sips 支持的格式包括 JPEG、PNG、TIFF、GIF 等,但不包括 AVIF。

这是目前我看到的,只有可写才代表能够转换。

xdl@192 image % sips --version
sips-311
xdl@192 image % sips --formats
Supported Formats:
-------------------------------------------
com.adobe.pdf                pdf   Writable
com.adobe.photoshop-image    psd   Writable
com.adobe.raw-image          dng   
com.apple.atx                --    Writable
com.apple.icns               icns  Writable
com.apple.pict               pict  
com.canon.cr2-raw-image      cr2   
com.canon.cr3-raw-image      cr3   
com.canon.crw-raw-image      crw   
com.canon.tif-raw-image      tif   
com.compuserve.gif           gif   Writable
com.dxo.raw-image            dxo   
com.epson.raw-image          erf   
com.fuji.raw-image           raf   
com.hasselblad.3fr-raw-image 3fr   
com.hasselblad.fff-raw-image fff   
com.ilm.openexr-image        exr   Writable
com.kodak.raw-image          dcr   
com.konicaminolta.raw-image  mrw   
com.leafamerica.raw-image    mos   
com.leica.raw-image          raw   
com.leica.rwl-raw-image      rwl   
com.microsoft.bmp            bmp   Writable
com.microsoft.cur            --    
com.microsoft.dds            dds   Writable
com.microsoft.ico            ico   Writable
com.nikon.nrw-raw-image      nrw   
com.nikon.raw-image          nef   
com.olympus.or-raw-image     orf   
com.olympus.raw-image        orf   
com.olympus.sr-raw-image     orf   
com.panasonic.raw-image      raw   
com.panasonic.rw2-raw-image  rw2   
com.pentax.raw-image         pef   
com.phaseone.raw-image       iiq   
com.samsung.raw-image        srw   
com.sgi.sgi-image            sgi   
com.sony.arw-raw-image       arw   
com.sony.axr-raw-image       axr   
com.sony.raw-image           srf   
com.sony.sr2-raw-image       sr2   
com.truevision.tga-image     tga   Writable
org.khronos.astc             astc  Writable
org.khronos.ktx              ktx   Writable
org.khronos.ktx2             --    Writable
org.webmproject.webp         webp  
public.avci                  avci  
public.avif                  avif  
public.avis                  --    
public.heic                  heic  Writable
public.heics                 heics Writable
public.heif                  heif  
public.jpeg                  jpeg  Writable
public.jpeg-2000             jp2   Writable
public.jpeg-xl               jxl   
public.mpo-image             mpo   
public.pbm                   pbm   Writable
public.png                   png   Writable
public.pvr                   pvr   Writable
public.radiance              pic   
public.svg-image             svg   
public.tiff                  tiff  Writable

第三列的Writable表示可读写,也就是说可以从所有可读的图片格式转成这个格式;

第三列的空格表示可读,也就是sips可以读取这种图片格式,但不能将图片从从所有可读的图片格式转成这种格式。

xdl@192 image % sips -s format png icon-500.svg --out icon-500.png

/Users/xdl/Documents/github/blog/static/image/icon-500.svg
/Users/xdl/Documents/github/blog/static/image/icon-500.png

这样就完成了将一个图片从 svg 转成 png 格式了。