macOS の標準コマンドで Jpeg 画像を PNG に変換するワンライナー

> **Jpg 画像を PNG 画像に変換したい**が、標準コマンドで変換できないか。（`brew` も使わず、別途アプリも入れずに）

最近の Qiita 記事でも[「`mac` `jpeg` `png` `変換` `コマンド`」でググって](https://www.google.com/search?q=site:qiita.com+mac+jpeg+%E3%82%92+png+%E5%A4%89%E6%8F%9B+%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89&tbs=qdr:y)も ImageMagick のリッチなのばかりでドンピシャな記事が出てこなかったので、自分のググラビリティとして。

- 動作確認： macOS Mojave（OSX 10.14.6）, Catalina（OSX 10.15.7）

## TL; DR <sub><sup><sub><sup>（今北産業）</sup></sub></sup></sub>

1. macOS 同梱の `sips` コマンドで変換可能です。
2. 特定ファイルを変換（foo.jpg→foo.png）する例

    ```bash
    sips -s format png foo.jpg --out foo.png
    ```
3. `-s format png` オプションで PNG を指定しています。

### 併せて読みたい

- [進化した macOS の sips コマンド + JavaScript でお絵描きする](https://qiita.com/manicmaniac/items/c2a71f0394d03b766cbe) @ Qiita
- [sipsを使ってHEICファイルをJPEGファイルに変換する。かつ、EXIF情報も削除する【mac環境のみ・Python使用】](https://qiita.com/shinshin86/items/ae896113e97a0b8e4f94) @ Qiita

## TS; DR

```bash:カレントディレクトリの画像をすべて１階層上のpngディレクトリに出力
sips -s format png *.* --out ../png
```
```bash:カレントにpngディレクトリを作成してpngに変換したjpg画像をそこに出力
mkdir png; sips -s format png *.jpg --out ./png
```

### 変換以外

#### 画像情報を `sips` コマンドで取得する

```shell-session:画像の情報を取得する
$ sips -g all sample.jpg
/Users/admin/Desktop/sample.jpg
  pixelWidth: 256
  pixelHeight: 256
  typeIdentifier: public.png
  format: png
  formatOptions: default
  dpiWidth: 72.000
  dpiHeight: 72.000
  samplesPerPixel: 3
  bitsPerSample: 8
  hasAlpha: no
  space: RGB
  profile: sRGB IEC61966-2.1
```

#### `sips` コマンドでできること（ただのヘルプ）

- Big Sur(OSX 10.16) では Javascript の項目が増えているそうです：[関連 Qiita 記事](https://qiita.com/manicmaniac/items/c2a71f0394d03b766cbe)

```shell-session:Mojaveのsipsコマンドヘルプ
$ sips --help
sips 10.4.4 - scriptable image processing system.
This tool is used to query or modify raster image files and ColorSync ICC profiles.
Its functionality can also be used through the "Image Events" AppleScript suite.

  Usages:
    sips [-h, --help] 
    sips [-H, --helpProperties] 

    sips [image-query-functions] imagefile ... 

    sips [profile-query-functions] profile ... 

    sips [image modification functions] imagefile ... 
         [--out result-file-or-dir] 

    sips [profile modification functions] profile ... 
         [--out result-file-or-dir] 


  Profile query functions: 
    -g, --getProperty key 
    -X, --extractTag tag tagFile 
    -v, --verify 

  Image query functions: 
    -g, --getProperty key 
    -x, --extractProfile profile 

  Profile modification functions: 
    -s, --setProperty key value 
    -d, --deleteProperty key 
        --deleteTag tag 
        --copyTag srcTag dstTag 
        --loadTag tag tagFile 
        --repair 

  Image modification functions: 
    -s, --setProperty key value 
    -d, --deleteProperty key 
    -e, --embedProfile profile 
    -E, --embedProfileIfNone profile 
    -m, --matchTo profile 
    -M, --matchToWithIntent profile intent 
        --deleteColorManagementProperties 
    -r, --rotate degreesCW 
    -f, --flip horizontal|vertical 
    -c, --cropToHeightWidth pixelsH pixelsW 
    -p, --padToHeightWidth pixelsH pixelsW 
        --padColor hexcolor 
    -z, --resampleHeightWidth pixelsH pixelsW 
        --resampleWidth pixelsW 
        --resampleHeight pixelsH 
    -Z, --resampleHeightWidthMax pixelsWH 
    -i, --addIcon 
    -o, --optimizeColorForSharing 
```

```shell-session:Catalinaのsipsコマンドヘルプ
$ sips --help
sips - scriptable image processing system.
This tool is used to query or modify raster image files and ColorSync ICC profiles.
Its functionality can also be used through the "Image Events" AppleScript suite.

  Usages:
    sips [image-functions] imagefile ... 
    sips [profile-functions] profile ... 

  Profile query functions: 
    -g, --getProperty key 
    -X, --extractTag tag tagFile 
        --verify 
    -1, --oneLine 

  Image query functions: 
    -g, --getProperty key 
    -x, --extractProfile profile 
    -1, --oneLine 

  Profile modification functions: 
    -s, --setProperty key value 
    -d, --deleteProperty key 
        --deleteTag tag 
        --copyTag srcTag dstTag 
        --loadTag tag tagFile 
        --repair 
    -o, --out file-or-directory 

  Image modification functions: 
    -s, --setProperty key value 
    -d, --deleteProperty key 
    -e, --embedProfile profile 
    -E, --embedProfileIfNone profile 
    -m, --matchTo profile 
    -M, --matchToWithIntent profile intent 
        --deleteColorManagementProperties 
    -r, --rotate degreesCW 
    -f, --flip horizontal|vertical 
    -c, --cropToHeightWidth pixelsH pixelsW 
        --cropOffset offsetY offsetH 
    -p, --padToHeightWidth pixelsH pixelsW 
        --padColor hexcolor 
    -z, --resampleHeightWidth pixelsH pixelsW 
        --resampleWidth pixelsW 
        --resampleHeight pixelsH 
    -Z, --resampleHeightWidthMax pixelsWH 
    -i, --addIcon 
        --optimizeColorForSharing 
    -o, --out file-or-directory 
    -j, --js file 

  Other functions: 
        --debug           Enable debugging output
    -h, --help            Show help
    -H, --helpProperties  Show help for properties
        --man             Generate man pages
    -v, --version         Show the version
        --formats         Show the read/write formats
```

## 参考文献

- [Batch Convert PNG to JPG from Mac Terminal](http://tutorialshares.com/batch-convert-png-jpg-mac-terminal/) @ Tutorials Shares
- [Macのsipsコマンドの使い方メモ](https://techte.co/2019/04/02/sips/) @ TECHTECO
- [Macのターミナルで簡単に画像処理できるsipsの使い方](https://qiita.com/livlea/items/53b755e5067d4ebc5b43) @ Qiita