问题描述
我编写了这个程序,将滤镜应用于图像,然后用户可以将其保存到库中,但是保存功能无论如何都不会起作用,甚至不会出错。
代码如下:
import UIKit
class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
@IBOutlet var imageView: UIImageView!
@IBOutlet var filterName: UILabel!
let context = CIContext()
var original: UIImage!
override func viewDidLoad() {
filterName.text = ""
}
@IBAction func choosePhoto(_ sender: UIBarButtonItem) {
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
self.navigationController?.present(picker,animated: true,completion: nil)
}
}
@IBAction func applySepia() {
if original == nil {
return
}
let filter = CIFilter(name: "CISepiaTone")
print("Sepia")
filterName.text = "Sepia"
filter?.setValue(CIImage(image: original),forKey: kCIInputimageKey)
filter?.setValue(1.0,forKey: kCIInputIntensityKey)
display(filter: filter!)
}
@IBAction func applyNoir() {
if original == nil {
return
}
let filter = CIFilter(name: "CIPhotoEffectNoir")
print("Noir")
filterName.text = "Noir"
filter?.setValue(CIImage(image: original),forKey: kCIInputimageKey)
display(filter: filter!)
}
@IBAction func applyVintage() {
if original == nil {
return
}
let filter = CIFilter(name: "CIPhotoEffectProcess")
print("Vintage")
filterName.text = "Vintage"
filter?.setValue(CIImage(image: original),forKey: kCIInputimageKey)
display(filter: filter!)
}
@IBAction func applySomething() {
if original == nil {
return
}
let number = Int.random(in: 1 ... 3)
switch number {
case 1:
print("Vignette")
let filter = CIFilter(name: "CIVignette")
filterName.text = "Vignette"
filter?.setValue(CIImage(image: original!),forKey: kCIInputimageKey)
filter?.setValue(0.5,forKey: kCIInpuTradiusKey)
filter?.setValue(2.5,forKey: kCIInputIntensityKey)
display(filter: filter!)
case 2:
print("Box Blur")
let filter = CIFilter(name: "CIBoxBlur")
filterName.text = "Box Blur"
filter?.setValue(CIImage(image: original),forKey: kCIInputimageKey)
filter?.setValue(30,forKey: kCIInpuTradiusKey)
display(filter: filter!)
case 3:
print("Crop")
let filter = CIFilter(name: "CICrop")
filterName.text = "Crop"
filter?.setValue(CIImage(image: original),forKey: kCIInputimageKey)
filter?.setValue([0,300,300],forKey: kCIAttributeTypeRectangle)
display(filter: filter!)
default:
let filter = CIFilter(name: "CISepiaTone")
print("Sepia")
filterName.text = "Sepia"
filter?.setValue(CIImage(image: original),forKey: kCIInputimageKey)
filter?.setValue(1.0,forKey: kCIInputIntensityKey)
display(filter: filter!)
}
}
@IBAction func savePhoto() {
if original == nil {
return
}
UIImageWritetoSavedPhotosAlbum(imageView.image!,self,nil,nil)
// add an alert when saved
let alert = UIAlertController(title: "Alert",message: "Saved Successfully",preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Ok",style: UIAlertAction.Style.default,handler: nil))
self.present(alert,completion: nil)
}
func display(filter: CIFilter) {
let output = filter.outputimage!
imageView.image = UIImage(cgImage: self.context.createCGImage(output,from: output.extent)!)
}
func imagePickerController(
_ picker: UIImagePickerController,didFinishPickingMediawithInfo info: [UIImagePickerController.InfoKey : Any]
) {
self.navigationController?.dismiss(animated: true,completion: nil)
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
imageView.image = image
original = image
}
}
}
还考虑到我在info.plist文件中添加了权限。有小费吗?谢谢。
@IBAction func savePhoto() {
if original == nil {
return
}
UIImageWritetoSavedPhotosAlbum(imageView.image!,#selector(image(_:didFinishSavingWithError:contextInfo:)),nil)
}
@objc func image(_ image: UIImage,didFinishSavingWithError error: NSError?,contextInfo: UnsafeRawPointer) {
if let error = error {
let alert = UIAlertController(title: "Error",message: error.localizedDescription,preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Ok",handler: nil))
self.present(alert,completion: nil)
print("Error")
}
else {
let alert = UIAlertController(title: "Alert",completion: nil)
print("Saved")
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)