[英]Rotating image by 3*Double.pi/2 makes image not appear (swift3)
嘗試將圖像方向旋轉270度,我可以旋轉90度,並且圖像出現,但是當將圖像旋轉270度時,什么也沒有發生。 我添加了2張90度和270度命令的圖片,以使事情更加清晰。
extension CIImage {
var image: UIImage? { return UIImage(ciImage: self) }
var rotatingLeft: CIImage? {
let transform = CGAffineTransform(translationX: extent.midX, y: extent.midY)
.rotated(by: CGFloat.pi.divided(by: 2))
.translatedBy(x: -extent.midX, y: -extent.midY)
return CIFilter(name: "CIAffineTransform", withInputParameters: [kCIInputImageKey: self, kCIInputTransformKey: NSValue(cgAffineTransform: transform)])?.outputImage
}
var rotatingRight: CIImage? {
let transform = CGAffineTransform(translationX: extent.midX, y: extent.midY)
.rotated(by: -CGFloat.pi.divided(by: 2))
.translatedBy(x: -extent.midX, y: -extent.midY)
return CIFilter(name: "CIAffineTransform", withInputParameters: [kCIInputImageKey: self, kCIInputTransformKey: NSValue(cgAffineTransform: transform)])?.outputImage
}
}
extension UIImage {
var ciimage: CIImage? { return CIImage(image: self) }
}
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet var displayImage: UIImageView!
var currentImageView: UIImageView?
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
self.currentImageView?.image = displayImage.image
self.currentImageView?.image = image.ciimage?.rotatingLeft?.image
self.dismiss(animated: true)
}
func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
if let error = error {
// we got back an error!
let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
} else {
let ac = UIAlertController(title: "Image Saved!", message: "Your image has been saved to your photos.", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
}
}
@IBAction func takePhoto(_ sender: Any) {
self.currentImageView = self.displayImage
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.camera;
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}}
您可以擴展CIImage而不是UIImage,並使用轉換矩陣使用核心圖像過濾器CIAffineTransform。 開始將其平移到中心,將其旋轉90度(.pi / 2),然后將其移回:
extension CIImage {
var image: UIImage? { return UIImage(ciImage: self) }
func rotated(_ angle: CGFloat) -> CIImage? {
let transform = CGAffineTransform(translationX: extent.midX, y: extent.midY)
.rotated(by: angle * .pi / 180)
.translatedBy(x: -extent.midX, y: -extent.midY)
return CIFilter(name: "CIAffineTransform", withInputParameters: [kCIInputImageKey: self, kCIInputTransformKey: NSValue(cgAffineTransform: transform)])?.outputImage
}
var rotatedLeft: CIImage? { return rotated(90) }
var rotatedRight: CIImage? { return rotated(-90) }
}
游樂場測試:
let image = UIImage(data: try! Data(contentsOf: URL(string:"https://i.stack.imgur.com/Xs4RX.jpg")!))!
image.ciimage?.rotated(22.5)?.image
image.ciimage?.rotatedRight?.image
image.ciimage?.rotatedLeft?.image
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.