【Swift】画像を圧縮する(容量を下げる)方法!jpegData(compressionQuality:)

この記事からわかること
- Swiftで画像を圧縮する方法
- jpegData(compressionQuality:)メソッドの使い方
- 容量を軽くするには?
- リサイズするには?
- UIGraphicsImageRendererクラスのdrawメソッド
\ アプリをリリースしました /
環境
- Xcode:15.0.1
- iOS:17.1
- Swift:5.9
- macOS:Sonoma 14.1
Swiftで画像の容量を圧縮する方法
Swiftで画像の容量を圧縮するにはUIImage
クラスのjpegData(compressionQuality:)
メソッドを使用します。引数compressionQuality
にはCGFloat
型で圧縮率を指定します。1.0
に近いほど圧縮率は低く、0.1
に近いほど圧縮されます。
公式リファレンス:jpegData(compressionQuality:)
例えばシミュレーターの元々入っている以下の画像は通常だと4.4 MB
ありましたが、0.1
を指定して圧縮すると0.4 MB
まで容量を抑えることができました。
圧縮前(1.0)
圧縮後(0.1)

ちなみにファイルの容量は以下のように実装すれば調べることができます。詳細は以下の記事を参考にしてください。
リサイズする
画像を圧縮する方法として画像自体のサイズをリサイズすることでも容量を抑えることが可能です。リサイズするにはUIGraphicsImageRenderer
を使用して新しいサイズに描画し直すことで実装することができます。
汎用的に使えるようにパーセンテージを渡してリサイズするようにし、UIImage
を拡張して定義しておくと使いやすいです。
使用する際は圧縮したいパーセンテージを渡します。10%にしたいなら以下のように実装します。
圧縮前(100%サイズ)
圧縮後(10%サイズ)
最大限圧縮してみる
既存メソッドのjpegData(compressionQuality:)
とカスタムメソッドのresizeByPercentage(percentage:)
を両方使用してみると41 kB
まで容量を下げることができました。
圧縮前(100%サイズ)
圧縮後(10%サイズ)
画像の選択や保存などの実装は以下の記事を参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。