【发布时间】:2021-09-10 03:44:33
【问题描述】:
我正在使用 CIFilter 来旋转图像。它正在正确旋转。但是,当我设置 imageView.image = result 时,图像不适合 imageView 而是流到外面。这很奇怪,因为如果我使用 UIGraphicsImageRenderer 渲染图像,一切都很好。
我分享示例图像和可重现的代码;
import UIKit
class ViewController: UIViewController {
@IBOutlet private weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
openPhotoLibrary()
}
func openPhotoLibrary() {
let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
imagePickerController.sourceType = UIImagePickerController.SourceType.photoLibrary
imagePickerController.allowsEditing = false
self.present(imagePickerController, animated: true, completion: nil)
}
}
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[UIImagePickerController.InfoKey(rawValue: UIImagePickerController.InfoKey.originalImage.rawValue)] as? UIImage
dismiss(animated: true, completion: { [weak self] in
let filter = CIFilter(name: "CIPerspectiveRotate")
// let's say I want to rotate it by 50 degrees
let radian: CGFloat = CGFloat(Double.pi) / (180 / 50)
filter?.setValue(radian, forKey: "inputRoll")
if let img = image, var image = CIImage(image: img) {
let cgOrientation = img.imageOrientation.cgImagePropertyOrientation
image = image.oriented(forExifOrientation: Int32(cgOrientation.rawValue))
filter?.setValue(image, forKey: "inputImage")
if let skewed = filter?.outputImage {
let image = UIImage(ciImage: skewed)
self?.imageView.image = image
self?.imageView.contentMode = .scaleAspectFit
}
}
})
}
}
白色边框是imageView的边框颜色。
【问题讨论】:
标签: swift core-image cifilter ciimage