画像の選択
標準のピッカーを使います。
allowsEditing = true で簡易的な編集画面が開き、正方形に切り出せます。
private func openAlbum() { let sourceType: UIImagePickerController.SourceType = .photoLibrary if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { let photoPicker = UIImagePickerController() photoPicker.sourceType = sourceType photoPicker.delegate = self photoPicker.allowsEditing = true // 選択後トリミング画面を開く self.present(photoPicker, animated: true, completion: nil) } else { print("アルバムが使えません") } }
リサイズ
delegateメソッドのdidFinishPickingMediaWithInfoで選択データを取得します。
編集後のイメージはinfo[.editedImage] で取得できます。
SDWebImageのsd_resizedImage()でサイズを小さく指定します。
extension UserProfileViewController: UIImagePickerControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { // 編集後のイメージを取得する if let image = info[.editedImage] as? UIImage { // 256x256にリサイズしてメモリ上に保持 newUserImage = image.sd_resizedImage(with: CGSize(width: 256, height: 256), scaleMode: .aspectFill) userImageView.image = image picker.dismiss(animated: true, completion: nil) } // 保存URLを取得する場合 if let url = info[.imageURL] as? URL { print(url.absoluteURL) newUserImageUrl = url.absoluteString userImageView.sd_setImage(with: url) picker.dismiss(animated: true, completion: nil) } // オリジナルのイメージを取得する場合 if let image = info[.originalImage] as? UIImage { newUserImage = image userImageView.image = image picker.dismiss(animated: true, completion: nil) } } }