LoginSignup
6
6

More than 3 years have passed since last update.

Swift で 画像 (UIImage ) の リサイズ と トリミング (切り抜き) を一度の処理で行う。

Posted at

0.はじめに

Swift で画像の切り抜きとリサイズを一度の処理で行いたかったので、やってみました。

以下の記事を参考にさせて頂きました。

感謝 ♪♪♪

🙇‍♂️🙇‍♂️🙇‍♂️

1.コード

今回は、画像を 0.5 倍にリサイズしつつ、中心部分を正方形に切り抜いてみました。

    var _image: UIImage = image
    var compress: CGFloat = 0.5
    var oneside: CGFloat = _image.size.width < _image.size.height ? _image.size.width : _image.size.height
    let origin: CGPoint = _image.size.width < _image.size.height
        ? CGPoint(x: 0.0, y: (_image.size.width - _image.size.height) * 0.5 * compress)
        : CGPoint(x: (_image.size.height - _image.size.width) * 0.5 * compress, y: 0.0)
    UIGraphicsBeginImageContextWithOptions(CGSize(width: oneside * compress, height: oneside * compress), false, 0.0)
    _image.draw(in: CGRect(origin: origin, size: CGSize(width: _image.size.width * compress, height: _image.size.height * compress)))
    _image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
■ リサイズ

まず、以下の処理で、出力先のサイズを指定します。

    var oneside: CGFloat = _image.size.width < _image.size.height ? _image.size.width : _image.size.height
    UIGraphicsBeginImageContextWithOptions(CGSize(width: oneside * compress, height: oneside * compress), false, 0.0)
■ トリミング (切り抜き)

そして、以下の処理で、画像をトリミング (切り抜き) します。

    let origin: CGPoint = _image.size.width < _image.size.height
        ? CGPoint(x: 0.0, y: (_image.size.width - _image.size.height) * 0.5 * compress)
        : CGPoint(x: (_image.size.height - _image.size.width) * 0.5 * compress, y: 0.0)
    _image.draw(in: CGRect(origin: origin, size: CGSize(width: _image.size.width * compress, height: _image.size.height * compress)))

重要なポイントは、

draw 関数の引数に指定する CGRect の値 (origin も、size も) を出力後の値で設定する

こと。

99.ハマりポイント

  • 上述しましたが、draw 関数の引数に指定に結構手間取りました…。

😭😭😭

XX.まとめ

以上、ご参考になれば ♪♪♪

👋👋👋

6
6
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
6
6