0.はじめに
Swift で画像の切り抜きとリサイズを一度の処理で行いたかったので、やってみました。
以下の記事を参考にさせて頂きました。
- UIImageのリサイズ方法と注意点 - Qiita
- 【Swift4】UIImageで画像のサイズ変更、指定した倍率で拡大/縮小 - Qiita
- Swift3.0で画像の切り抜き - Qiita
- [Swift] 画像のサムネイル生成(縮小&切り抜き) - Qiita
感謝 ♪♪♪
🙇♂️🙇♂️🙇♂️
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.まとめ
以上、ご参考になれば ♪♪♪
👋👋👋