
指定サイズで画像をトリミングしたい。
このような方向け。
本記事で紹介すること
- 完成形
- トリミングに必要なライブラリ:CropViewController
完成形
ライブラリから写真を選択すると・・・

指定サイズの枠が表示され、トリミングすることができます。

それでは早速、実装方法を見ていきましょう〜。
トリミングに必要なライブラリ:CropViewController

使用するライブラリはCropViewControllerです。こちら↓
GitHub - TimOliver/TOCropViewController: A view controller for iOS that allows users to crop portions of UIImage objects
A view controller for iOS that allows users to crop portions of UIImage objects - TimOliver/TOCropViewController
導入方法
Cocoapodsで導入しましょう!
Terminal
% cd プロジェクトファイルのパスを入力 % pod init % open podfile
Podfile
pod 'CropViewController'
Terminal
pod install
これでOKですね!あとは「xxx.xcworkspace」の方を開いて編集していきましょう〜。
使用方法
import CropViewController
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate,CropViewControllerDelegate {
func setImagePicker(){
let picker = UIImagePickerController()
picker.sourceType = .photoLibrary
picker.delegate = self
present(picker, animated: true, completion: nil)
}
func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
updateImageViewWithImage(image, fromCropViewController: cropViewController)
}
func updateImageViewWithImage(_ image: UIImage, fromCropViewController cropViewController: CropViewController) {
imageView.image = image
cropViewController.dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[.originalImage] as! UIImage
guard let pickerImage = (info[UIImagePickerController.InfoKey.originalImage] as? UIImage) else { return }
let cropController = CropViewController(croppingStyle: .default, image: pickerImage)
cropController.delegate = self
cropController.customAspectRatio = CGSize(width: 100, height: 100)
//今回は使わないボタン等を非表示にする。
cropController.aspectRatioPickerButtonHidden = true
cropController.resetAspectRatioEnabled = false
cropController.rotateButtonsHidden = true
//cropBoxのサイズを固定する。
cropController.cropView.cropBoxResizeEnabled = false
//pickerを閉じたら、cropControllerを表示する。
picker.dismiss(animated: true) {
self.present(cropController, animated: true, completion: nil)
}
}
あとは表示したいタイミングで、以下を記入してください。
if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) {
setImagePicker()
}
まとめ

以上、画像を指定サイズでトリミングする方法でした。
ライブラリを使うことで簡単に実現させることができましたね!ちなみにトリミング範囲は以下の行で指定しています。
cropController.customAspectRatio = CGSize(width: 100, height: 100)
もし、画面サイズでトリミングしたいならこんな感じ↓
cropController.customAspectRatio = UIScreen.main.nativeBounds.size
それでは、iPhoneアプリ開発頑張っていきましょう〜。
参考:https://qiita.com/Tsh-43879562/items/1fc9c5c54fb62235c5aa