The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何使用 ImageMagick 批次將 PNG 圖片轉檔成 AVIF 與 WebP 格式

最近一直在優化我的部落格網站,有常來逛的人應該都可以明顯感受出效能提升,我的其中一個優化項目就是開始使用最新潮的 WebPAVIF 圖檔格式。這篇文章我就來分享如何透過強大的 ImageMagick 工具來批次轉換各種圖片格式。

ImageMagick AVIF WebP

安裝 ImageMagick 工具

ImageMagick 是一套相當複雜且多功能的工具,且支援各種作業系統平台,無論 Windows, Linux, macOS 通通都有支援,不過安裝的時候確實有些地雷!🔥

我從 ImageMagick 的 Download 頁面的 Linux Binary Release 發現下載的 magick 執行檔並沒有把 heic delegate 編譯進去,所以無法轉換圖片為 AVIF 格式的圖片! 😒

這是我今天下載最新版的時候看到的版本資訊:

$ magick -version
Version: ImageMagick 7.1.0-57 Q16-HDRI x86_64 d68553b17:20221230 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(3.1)
Delegates (built-in): bzlib djvu fontconfig freetype jbig jng jpeg lcms lqr lzma openexr png raqm tiff webp x xml zlib
Compiler: gcc (4.2)

注意: 我在 Ubuntu 22.04.1 LTS (最新穩定版) 透過 apt install imagemagick -y 安裝 ImageMagick 已經有包含 heic 模組了!

不過,你可以改用 imagemagick-docker 專案放在 Docker Hub 上面的 Image (容器映像),直接透過容器來執行,完全免安裝,這應該是最簡單的使用方法了!👍

除此之外,我在 Windows Binary Release 下載的版本,就真的把所有可能的 Delegates 都加入了,所以直接下載安裝即可,安裝好就可以開始使用了!👍

  1. 先到 Windows Binary Release 下載最新版安裝檔

    ImageMagick - Download - Windows Binary Release

    以下是自動安裝的命令:

    curl -sLO https://imagemagick.org/archive/binaries/ImageMagick-7.1.0-57-Q16-HDRI-x64-dll.exe
    .\ImageMagick-7.1.0-57-Q16-HDRI-x64-dll.exe /silent
    
  2. 安裝好之後,開啟一個新的命令提示字元(Command Prompt)視窗或 PowerShell 視窗

    以下是查詢版本的方式:

    magick -version
    
    Version: ImageMagick 7.1.0-57 Q16-HDRI x64 eadf378:20221230 https://imagemagick.org
    Copyright: (C) 1999 ImageMagick Studio LLC
    License: https://imagemagick.org/script/license.php
    Features: Cipher DPC HDRI Modules OpenCL OpenMP(2.0)
    Delegates (built-in): bzlib cairo flif freetype gslib heic jng jp2 jpeg jxl lcms lqr lzma openexr pangocairo png ps raqm raw rsvg tiff webp xml zip zlib
    Compiler: Visual Studio 2022 (193431937)
    

    如果要看 ImageMagick 所有支援的圖檔格式,可以用以下命令查詢:

    magick -list format
    
    點擊看結果 🖱
      Format  Module    Mode  Description
    -------------------------------------------------------------------------------
          3FR  DNG       r--   Hasselblad CFV/H3D39II (0.21.0-Beta1)
          3G2  VIDEO     r--   Media Container
          3GP  VIDEO     r--   Media Container
          AAI* AAI       rw+   AAI Dune image
          AI  PDF       rw-   Adobe Illustrator CS2
        APNG  VIDEO     rw+   Animated Portable Network Graphics
          ART* ART       rw-   PFS: 1st Publisher Clip Art
          ARW  DNG       r--   Sony Alpha Raw Image Format (0.21.0-Beta1)
      ASHLAR* ASHLAR    -w+   Image sequence laid out in continuous irregular courses
          AVI  VIDEO     r--   Microsoft Audio/Visual Interleaved
        AVIF  HEIC      rw+   AV1 Image File Format (1.14.0)
          AVS* AVS       rw+   AVS X image
        BAYER* BAYER     rw+   Raw mosaiced samples
      BAYERA* BAYER     rw+   Raw mosaiced and alpha samples
          BGR* BGR       rw+   Raw blue, green, and red samples
        BGRA* BGR       rw+   Raw blue, green, red, and alpha samples
        BGRO* BGR       rw+   Raw blue, green, red, and opacity samples
          BIE* JBIG      ---   Joint Bi-level Image experts Group interchange format
          BMP* BMP       rw-   Microsoft Windows bitmap image
        BMP2* BMP       rw-   Microsoft Windows bitmap image (V2)
        BMP3* BMP       rw-   Microsoft Windows bitmap image (V3)
          BRF* BRAILLE   -w-   BRF ASCII Braille format
          CAL* CALS      rw-   Continuous Acquisition and Life-cycle Support Type 1
              Specified in MIL-R-28002 and MIL-PRF-28002
        CALS* CALS      rw-   Continuous Acquisition and Life-cycle Support Type 1
              Specified in MIL-R-28002 and MIL-PRF-28002
      CANVAS* XC        r--   Constant image uniform color
      CAPTION* CAPTION   r--   Caption
          CIN* CIN       rw-   Cineon Image File
          CIP* CIP       -w-   Cisco IP phone image format
        CLIP* CLIP      rw+   Image Clip Mask
    CLIPBOARD* CLIPBOARD rw-   The system clipboard
        CMYK* CMYK      rw+   Raw cyan, magenta, yellow, and black samples
        CMYKA* CMYK      rw+   Raw cyan, magenta, yellow, black, and alpha samples
          CR2  DNG       r--   Canon Digital Camera Raw Image Format (0.21.0-Beta1)
          CR3  DNG       r--   Canon Digital Camera Raw Image Format (0.21.0-Beta1)
          CRW  DNG       r--   Canon Digital Camera Raw Image Format (0.21.0-Beta1)
        CUBE* CUBE      r--   Cube LUT
          CUR* ICON      rw-   Microsoft icon
          CUT* CUT       r--   DR Halo
        DATA* INLINE    rw+   Base64-encoded inline images
          DCM* DCM       r--   Digital Imaging and Communications in Medicine image
              DICOM is used by the medical community for images like X-rays.  The
              specification, "Digital Imaging and Communications in Medicine
              (DICOM)", is available at http://medical.nema.org/.  In particular,
              see part 5 which describes the image encoding (RLE, JPEG, JPEG-LS),
              and supplement 61 which adds JPEG-2000 encoding.
          DCR  DNG       r--   Kodak Digital Camera Raw Image File (0.21.0-Beta1)
        DCRAW  DNG       r--   Raw Photo Decoder (dcraw) (0.21.0-Beta1)
          DCX* PCX       rw+   ZSoft IBM PC multi-page Paintbrush
          DDS* DDS       rw+   Microsoft DirectDraw Surface
        DFONT* TTF       r--   Multi-face font package (Freetype 2.12.1)
        DJVU* DJVU      ---   Deja vu
              See http://www.djvuzone.org/ for details about the DJVU format.  The
              DJVU 1.2 specification is available there and at
              ftp://swrinde.nde.swri.edu/pub/djvu/documents/.
          DNG  DNG       r--   Digital Negative (0.21.0-Beta1)
          DOT  DOT       ---   Graphviz
          DPS  DPS       ---   Display Postscript Interpreter
          DPX* DPX       rw-   SMPTE 268M-2003 (DPX 2.0)
              Digital Moving Picture Exchange Bitmap, Version 2.0.
              See SMPTE 268M-2003 specification at http://www.smtpe.org
    
        DXT1* DDS       rw+   Microsoft DirectDraw Surface
        DXT5* DDS       rw+   Microsoft DirectDraw Surface
          EMF  EMF       r--   Windows Enhanced Meta File
        EPDF  PDF       rw-   Encapsulated Portable Document Format
          EPI  PS        rw-   Encapsulated PostScript Interchange format
          EPS  PS        rw-   Encapsulated PostScript
        EPS2  PS2       -w-   Level II Encapsulated PostScript
        EPS3  PS3       -w+   Level III Encapsulated PostScript
        EPSF  PS        rw-   Encapsulated PostScript
        EPSI  PS        rw-   Encapsulated PostScript Interchange format
          EPT  EPT       rw-   Encapsulated PostScript with TIFF preview
        EPT2  EPT       rw-   Encapsulated PostScript Level II with TIFF preview
        EPT3  EPT       rw+   Encapsulated PostScript Level III with TIFF preview
          ERF  DNG       r--   Epson RAW Format (0.21.0-Beta1)
          EXR  EXR       rw-   High Dynamic-range (HDR) (OpenEXR 3.1.3)
    FARBFELD* FARBFELD  rw-   Farbfeld
          FAX* FAX       rw+   Group 3 FAX
              FAX machines use non-square pixels which are 1.5 times wider than
              they are tall but computer displays use square pixels, therefore
              FAX images may appear to be narrow unless they are explicitly
              resized using a geometry of "150x100%".
    
          FF* FARBFELD  rw-   Farbfeld
        FILE* URL       r--   Uniform Resource Locator (file://)
        FITS* FITS      rw+   Flexible Image Transport System
        FL32* FL32      rw-   FilmLight
        FLIF* FLIF      rw+   Free Lossless Image Format (libflif 0.0.2 [0000])
          FLV  VIDEO     rw+   Flash Video Stream
          FPX  FPX       ---   FlashPix Format
      FRACTAL* PLASMA    r--   Plasma fractal image
          FTP* URL       r--   Uniform Resource Locator (ftp://)
          FTS* FITS      rw+   Flexible Image Transport System
        FTXT* FTXT      rw-   Formatted text image
          G3* FAX       rw-   Group 3 FAX
          G4* FAX       rw-   Group 4 FAX
          GIF* GIF       rw+   CompuServe graphics interchange format
        GIF87* GIF       rw-   CompuServe graphics interchange format (version 87a)
    GRADIENT* GRADIENT  r--   Gradual linear passing from one shade to another
        GRAY* GRAY      rw+   Raw gray samples
        GRAYA* GRAY      rw+   Raw gray and alpha samples
      GROUP4* TIFF      rw-   Raw CCITT Group4
          GV  DOT       ---   Graphviz
        HALD* HALD      r--   Identity Hald color lookup table image
          HDR* HDR       rw+   Radiance RGBE image format
        HEIC  HEIC      r--   High Efficiency Image Format (1.14.0)
        HEIF  HEIC      r--   High Efficiency Image Format (1.14.0)
    HISTOGRAM* HISTOGRAM -w-   Histogram of the image
          HRZ* HRZ       rw-   Slow Scan TeleVision
          HTM* HTML      -w-   Hypertext Markup Language and a client-side image map
        HTML* HTML      -w-   Hypertext Markup Language and a client-side image map
        HTTP* URL       r--   Uniform Resource Locator (http://)
        HTTPS* URL       r--   Uniform Resource Locator (https://)
          ICB* TGA       rw-   Truevision Targa image
          ICO* ICON      rw+   Microsoft icon
        ICON* ICON      rw-   Microsoft icon
          IIQ  DNG       r--   Phase One Raw Image Format (0.21.0-Beta1)
        INFO  INFO      -w+   The image format and characteristics
      INLINE* INLINE    rw+   Base64-encoded inline images
          IPL* IPL       rw+   IPL Image Sequence
      ISOBRL* BRAILLE   -w-   ISO/TR 11548-1 format
      ISOBRL6* BRAILLE   -w-   ISO/TR 11548-1 format 6dot
          J2C* JP2       rw-   JPEG-2000 Code Stream Syntax (2.5.0)
          J2K* JP2       rw-   JPEG-2000 Code Stream Syntax (2.5.0)
          JBG* JBIG      ---   Joint Bi-level Image experts Group interchange format
        JBIG* JBIG      ---   Joint Bi-level Image experts Group interchange format
          JNG* PNG       rw-   JPEG Network Graphics
              See http://www.libpng.org/pub/mng/ for details about the JNG
              format.
          JNX* JNX       r--   Garmin tile format
          JP2* JP2       rw-   JPEG-2000 File Format Syntax (2.5.0)
          JPC* JP2       rw-   JPEG-2000 Code Stream Syntax (2.5.0)
          JPE* JPEG      rw-   Joint Photographic Experts Group JFIF format (libjpeg-turbo 2.1.1)
        JPEG* JPEG      rw-   Joint Photographic Experts Group JFIF format (libjpeg-turbo 2.1.1)
          JPG* JPEG      rw-   Joint Photographic Experts Group JFIF format (libjpeg-turbo 2.1.1)
          JPM* JP2       rw-   JPEG-2000 File Format Syntax (2.5.0)
          JPS* JPEG      rw-   Joint Photographic Experts Group JFIF format (libjpeg-turbo 2.1.1)
          JPT* JP2       rw-   JPEG-2000 File Format Syntax (2.5.0)
        JSON  JSON      -w+   The image format and characteristics
          JXL* JXL       rw+   JPEG XL (ISO/IEC 18181) (libjxl 0.7.0)
          K25  DNG       r--   Kodak Digital Camera Raw Image Format (0.21.0-Beta1)
          KDC  DNG       r--   Kodak Digital Camera Raw Image Format (0.21.0-Beta1)
      KERNEL* KERNEL    -w-   Morphology Kernel
        LABEL* LABEL     r--   Image label
          M2V  VIDEO     rw+   MPEG Video Stream
          M4V  VIDEO     rw+   Raw VIDEO-4 Video
          MAC* MAC       r--   MAC Paint
          MAP* MAP       rw-   Colormap intensities and indices
        MASK* MASK      rw+   Image Clip Mask
          MAT  MAT       rw+   MATLAB level 5 image format
        MATTE* MATTE     -w+   MATTE format
          MEF  DNG       r--   Mamiya Raw Image File (0.21.0-Beta1)
        MIFF* MIFF      rw+   Magick Image File Format
          MKV  VIDEO     rw+   Multimedia Container
          MNG* PNG       rw+   Multiple-image Network Graphics (libpng 1.6.38)
              See http://www.libpng.org/pub/mng/ for details about the MNG
              format.
        MONO* MONO      rw-   Raw bi-level bitmap
          MOV  VIDEO     rw+   MPEG Video Stream
          MP4  VIDEO     rw+   VIDEO-4 Video Stream
          MPC* MPC       rw+   Magick Pixel Cache image format
        MPEG  VIDEO     rw+   MPEG Video Stream
          MPG  VIDEO     rw+   MPEG Video Stream
          MRW  DNG       r--   Sony (Minolta) Raw Image File (0.21.0-Beta1)
          MSL* MSL       rw+   Magick Scripting Language
        MSVG* SVG       rw+   ImageMagick's own SVG internal renderer
          MTV* MTV       rw+   MTV Raytracing image format
          MVG* MVG       rw-   Magick Vector Graphics
          NEF  DNG       r--   Nikon Digital SLR Camera Raw Image File (0.21.0-Beta1)
          NRW  DNG       r--   Nikon Digital SLR Camera Raw Image File (0.21.0-Beta1)
        NULL* NULL      rw-   Constant image of uniform color
          ORA  ORA       r--   OpenRaster format
          ORF  DNG       r--   Olympus Digital Camera Raw Image File (0.21.0-Beta1)
          OTB* OTB       rw-   On-the-air bitmap
          OTF* TTF       r--   Open Type font (Freetype 2.12.1)
          PAL* UYVY      rw-   16bit/pixel interleaved YUV
        PALM* PALM      rw+   Palm pixmap
          PAM* PNM       rw+   Common 2-dimensional bitmap format
        PANGO* PANGO     r--   Pango Markup Language (Pangocairo 1.45.2)
      PATTERN* PATTERN   r--   Predefined pattern
          PBM* PNM       rw+   Portable bitmap format (black and white)
          PCD* PCD       rw-   Photo CD
        PCDS* PCD       rw-   Photo CD
          PCL  PCL       rw+   Printer Control Language
          PCT* PICT      rw-   Apple Macintosh QuickDraw/PICT
          PCX* PCX       rw-   ZSoft IBM PC Paintbrush
          PDB* PDB       rw+   Palm Database ImageViewer Format
          PDF  PDF       rw+   Portable Document Format
        PDFA  PDF       rw+   Portable Document Archive Format
          PEF  DNG       r--   Pentax Electronic File (0.21.0-Beta1)
          PES* PES       r--   Embrid Embroidery Format
          PFA* TTF       r--   Postscript Type 1 font (ASCII) (Freetype 2.12.1)
          PFB* TTF       r--   Postscript Type 1 font (binary) (Freetype 2.12.1)
          PFM* PNM       rw+   Portable float format
          PGM* PNM       rw+   Portable graymap format (gray scale)
          PGX* PGX       rw-   JPEG 2000 uncompressed format
          PHM* PNM       rw+   Portable half float format
        PICON* XPM       rw-   Personal Icon
        PICT* PICT      rw-   Apple Macintosh QuickDraw/PICT
          PIX* PIX       r--   Alias/Wavefront RLE image format
        PJPEG* JPEG      rw-   Joint Photographic Experts Group JFIF format (libjpeg-turbo 2.1.1)
      PLASMA* PLASMA    r--   Plasma fractal image
          PNG* PNG       rw-   Portable Network Graphics (libpng 1.6.38)
              See http://www.libpng.org/ for details about the PNG format.
        PNG00* PNG       rw-   PNG inheriting bit-depth, color-type from original, if possible
        PNG24* PNG       rw-   opaque or binary transparent 24-bit RGB (zlib 1.2.12)
        PNG32* PNG       rw-   opaque or transparent 32-bit RGBA
        PNG48* PNG       rw-   opaque or binary transparent 48-bit RGB
        PNG64* PNG       rw-   opaque or transparent 64-bit RGBA
        PNG8* PNG       rw-   8-bit indexed with optional binary transparency
          PNM* PNM       rw+   Portable anymap
    POCKETMOD  PDF       rw+   Pocketmod Personal Organizer
          PPM* PNM       rw+   Portable pixmap format (color)
          PS  PS        rw+   PostScript
          PS2  PS2       -w+   Level II PostScript
          PS3  PS3       -w+   Level III PostScript
          PSB* PSD       rw+   Adobe Large Document Format
          PSD* PSD       rw+   Adobe Photoshop bitmap
        PTIF* TIFF      rw+   Pyramid encoded TIFF
          PWP* PWP       r--   Seattle Film Works
          QOI* QOI       rw-   Quite OK image format
    RADIAL-GRADIENT* GRADIENT  r--   Gradual radial passing from one shade to another
          RAF  DNG       r--   Fuji CCD-RAW Graphic File (0.21.0-Beta1)
          RAS* SUN       rw+   SUN Rasterfile
          RAW  DNG       r--   Raw (0.21.0-Beta1)
          RGB* RGB       rw+   Raw red, green, and blue samples
      RGB565* RGB       r--   Raw red, green, blue samples in 565 format
        RGBA* RGB       rw+   Raw red, green, blue, and alpha samples
        RGBO* RGB       rw+   Raw red, green, blue, and opacity samples
          RGF* RGF       rw-   LEGO Mindstorms EV3 Robot Graphic Format (black and white)
          RLA* RLA       r--   Alias/Wavefront image
          RLE* RLE       r--   Utah Run length encoded image
          RMF  DNG       r--   Raw Media Format (0.21.0-Beta1)
        RSVG* SVG       rw+   Librsvg SVG renderer (RSVG 2.40.20)
          RW2  DNG       r--   Panasonic Lumix Raw Image (0.21.0-Beta1)
          SCR* SCR       r--   ZX-Spectrum SCREEN$
    SCREENSHOT* SCREENSHO r--   Screen shot
          SCT* SCT       r--   Scitex HandShake
          SFW* SFW       r--   Seattle Film Works
          SGI* SGI       rw+   Irix RGB image
        SHTML* HTML      -w-   Hypertext Markup Language and a client-side image map
          SIX* SIXEL     rw-   DEC SIXEL Graphics Format
        SIXEL* SIXEL     rw-   DEC SIXEL Graphics Format
    SPARSE-COLOR* TXT       -w+   Sparse Color
          SR2  DNG       r--   Sony Raw Format 2 (0.21.0-Beta1)
          SRF  DNG       r--   Sony Raw Format (0.21.0-Beta1)
      STEGANO* STEGANO   r--   Steganographic image
      STRIMG* STRIMG    rw-   String to image and back
          SUN* SUN       rw+   SUN Rasterfile
          SVG* SVG       rw+   Scalable Vector Graphics (RSVG 2.40.20)
        SVGZ* SVG       rw+   Compressed Scalable Vector Graphics (RSVG 2.40.20)
        TEXT* TXT       r--   Text
          TGA* TGA       rw-   Truevision Targa image
    THUMBNAIL* THUMBNAIL -w+   EXIF Profile Thumbnail
        TIFF* TIFF      rw+   Tagged Image File Format (LIBTIFF, Version 4.3.0)
      TIFF64* TIFF      rw+   Tagged Image File Format (64-bit) (LIBTIFF, Version 4.3.0)
        TILE* TILE      r--   Tile image with a texture
          TIM* TIM       r--   PSX TIM
          TM2* TIM2      r--   PS2 TIM2
          TTC* TTF       r--   TrueType font collection (Freetype 2.12.1)
          TTF* TTF       r--   TrueType font (Freetype 2.12.1)
          TXT* TXT       rw+   Text
        UBRL* BRAILLE   -w-   Unicode Text format
        UBRL6* BRAILLE   -w-   Unicode Text format 6dot
          UIL* UIL       -w-   X-Motif UIL table
        UYVY* UYVY      rw-   16bit/pixel interleaved YUV
          VDA* TGA       rw-   Truevision Targa image
        VICAR* VICAR     rw-   Video Image Communication And Retrieval
          VID* VID       rw+   Visual Image Directory
        VIFF* VIFF      rw+   Khoros Visualization image
        VIPS* VIPS      rw+   VIPS image
          VST* TGA       rw-   Truevision Targa image
        WBMP* WBMP      rw-   Wireless Bitmap (level 0) image
        WEBM  VIDEO     rw+   Open Web Media
        WEBP* WEBP      rw+   WebP Image Format (libwebp 1.2.2 [020F])
          WMF  EMF       r--   Windows Meta File
          WMV  VIDEO     rw+   Windows Media Video
          WPG* WPG       r--   Word Perfect Graphics
          X3F  DNG       r--   Sigma Camera RAW Picture File (0.21.0-Beta1)
          XBM* XBM       rw-   X Windows system bitmap (black and white)
          XC* XC        r--   Constant image uniform color
          XCF* XCF       r--   GIMP image
          XPM* XPM       rw-   X Windows system pixmap (color)
          XPS  XPS       r--   Microsoft XML Paper Specification
          XV* VIFF      rw+   Khoros Visualization image
        YAML  YAML      -w+   The image format and characteristics
        YCbCr* YCbCr     rw+   Raw Y, Cb, and Cr samples
      YCbCrA* YCbCr     rw+   Raw Y, Cb, Cr, and alpha samples
          YUV* YUV       rw-   CCIR 601 4:1:1 or 4:2:2
    
    * native blob support
    r read support
    w write support
    + support for multiple images
    

透過 CLI 命令轉換圖檔

在使用 ImageMagick 命令列工具時,在 Linux 與 macOS 作業系統下,其主程式預設為 convert,但是在 Windows 作業系統下已經有內建一個 C:\Windows\System32\convert.exe 執行檔,所以在 Windows 安裝好 ImageMagick 之後的主程式為 magick.exe

我們先來嘗試轉換單張圖片:

  1. 預設轉換設定

    demo.png 轉換為 demo1.avif 格式,使用預設品質設定

    magick demo.png demo1.avif
    

    圖片大小從 602 KB (617,214 bytes) 降為 107 KB (110,241 bytes)!

  2. 轉換設定 80% 影像品質

    demo.png 轉換為 demo2.avif 格式,使用 80% 品質進行轉換,這種轉換會產生一個「有損壓縮」的圖片

    magick -quality "80" demo.png demo2.avif
    

    圖片大小從 602 KB (617,214 bytes) 降為 178 KB (182,523 bytes)!

  3. 使用進階的選項設定,提供更好的壓縮效果,但轉換時間會拉長很多

    demo.png 轉換為 demo3.avif 格式,並使用 heic 外掛(delegate)提供的 speed 參數,這裡的 heic:speed=2 是指轉換速度,其值從 1 (最慢/品質與壓縮比最高) ~ 10 (最快/品質與壓縮比最差)。

    magick -define "heic:speed=2" demo.png demo3.avif
    

    圖片大小從 602 KB (617,214 bytes) 降為 82.7 KB (84,759 bytes)!

透過 PowerShell 批次轉換圖檔

當你決定好轉換的參數,就可以透過 PowerShell 批次轉換圖檔了!

  1. 將當前目錄下所有 *.png 圖檔轉換為 *.avif*.webp 格式

    $sourceFolder = "${PWD.Path}\*"
    $filePatterns = '*.png','*.jpg','*.gif'
    
    Get-ChildItem -Path $sourceFolder -Include $filePatterns -File | ForEach-Object {
        $name = $_.FullName
        $webp = [System.IO.Path]::ChangeExtension($name,".webp")
        $avif = [System.IO.Path]::ChangeExtension($name,".avif")
        echo "Orig: $name"
        echo "WebP: $webp"
        magick -quality 75 "$name" "$webp"
        echo "AVIF: $avif"
        magick -quality 75 "$name" "$avif"
        echo ""
    }
    
  2. 將當前目錄包含其子目錄下所有 *.png 圖檔轉換為 *.avif*.webp 格式

    $sourceFolder = "${PWD.Path}\*"
    $filePatterns = '*.png','*.jpg','*.gif'
    
    Get-ChildItem -Path $sourceFolder -Include $filePatterns -File -Recurse | ForEach-Object {
        $name = $_.FullName
        $webp = [System.IO.Path]::ChangeExtension($name,".webp")
        $avif = [System.IO.Path]::ChangeExtension($name,".avif")
        echo "Orig: $name"
        echo "WebP: $webp"
        magick -quality 75 "$name" "$webp"
        echo "AVIF: $avif"
        magick -quality 75 "$name" "$avif"
        echo ""
    }
    

透過 Bash 與 Docker 批次轉換圖檔

當你決定好轉換的參數,也可以透過 Docker 批次轉換圖檔!

  1. 將當前目錄下所有 *.png 圖檔轉換為 *.avif*.webp 格式

    for file in $(find $PWD -maxdepth 1 -name "*.png" -o -name "*.jpg" -o -name "*.gif"); do
        echo $file
        file=${file/$PWD/\/imgs}
        docker run --rm -w '/imgs' -v "$PWD:/imgs" "dpokidov/imagemagick" ${file} ${file/.png/.avif}
        docker run --rm -w '/imgs' -v "$PWD:/imgs" "dpokidov/imagemagick" ${file} ${file/.png/.webp}
    done
    
  2. 將當前目錄包含其子目錄下所有 *.png 圖檔轉換為 *.avif*.webp 格式

    for file in $(find $PWD -name "*.png" -o -name "*.jpg" -o -name "*.gif"); do
        echo $file
        file=${file/$PWD/\/imgs}
        docker run --rm -w '/imgs' -v "$PWD:/imgs" "dpokidov/imagemagick" ${file} ${file/.png/.avif}
        docker run --rm -w '/imgs' -v "$PWD:/imgs" "dpokidov/imagemagick" ${file} ${file/.png/.webp}
    done
    

相關連結

留言評論