20
18

More than 3 years have passed since last update.

Swiftで画質をできるだけ保ちつつ画像ファイルサイズを下げる

Last updated at Posted at 2020-08-24

はじめに

  • iPhoneで写真を撮ると無駄に画像サイズが大きいですよね。
  • iOSアプリで画像を扱いたいときにうざかったりします。
    • メモリを圧迫しますし、サーバーにアップロードする場合はサーバー代がかさみます。
  • そこで、Swiftで画像ファイルサイズをなんとか下げたいと思ったのですが、ネット上にある方法だと画質がめちゃくちゃ悪くなってしまい困っていました。
  • 色々試行錯誤して画質をできるだけ保ちつつ画像ファイルサイズを下げる方法を見つけたので共有します。

方法

ざっくり2つあります。

1 画像サイズをちっさくする

extension UIImage {

    func resize(targetSize: CGSize) -> UIImage {
        return UIGraphicsImageRenderer(size:targetSize).image { _ in
            self.draw(in: CGRect(origin: .zero, size: targetSize))
        }
    }

}

このメソッドを使ってください(sizeの部分は好きな値をいれてください)

var resizedPicture: UIImage = picture.resize(targetSize: CGSize(width: picture.size.width / 8, height: picture.size.height / 8))

2 jpegに変換する際のクオリティ(compressionQuality)を下げる

resizedPicture = resizedPicture.jpegData(compressionQuality: 0.25)

compressionQualityは0.0から1.0まで指定できますが、結構下げても画質が悪くならない(その割にファイルサイズはだいぶ下がる)のでおすすめです。

結果

iPhoneで撮影した1.3MBの画像が57KBになりました。
IMG_4464.PNG

ネットにある方法との比較

ネットにある方法( https://stackoverflow.com/questions/29137488/how-do-i-resize-the-uiimage-to-reduce-upload-image-size )で圧縮した画像

IMG_4461.PNG

画質に大きな差があることがわかります。しかも、画像ファイルサイズも前者は後者の半分以下に抑えられています。

おわりに

  • この方法を使えば画質を保ったまま画像ファイルサイズを下げることができます。
  • ただ、なぜできるのか(正確にはネットでよくある方法ではなぜ画質がめちゃ悪くなるのか)、といった部分はよくわからないので今後調べてわかったら追記する予定です。

参考文献

20
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18