【Swift5】画像を指定サイズでトリミングする方法

iPhoneApp

指定サイズで画像をトリミングしたい。

このような方向け。

本記事で紹介すること

  • 完成形
  • トリミングに必要なライブラリ: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

タイトルとURLをコピーしました