使用 CIFilter 应用于 UIImage 和旋转图像的过滤器
Filter applied to UIImage and rotated image using CIFilter
当我应用 UIImage
滤镜时,图像的结果是旋转了!我试过这个:
var filterNames: [String] = ["CIPhotoEffectTonal","CIPhotoEffectNoir","CIMaximumComponent","CIMinimumComponent","CIDotScreen", "CISepiaTone", "CIFalseColor", "CIColorInvert", "CIColorPosterize", "CIPhotoEffectChrome", "CIPhotoEffectInstant"]
let CIfilterName = filterNames[indexPath.row]
print(CIfilterName)
let ciContext = CIContext(options: nil)
let startImage = CIImage(image: originalImage)
let filter = CIFilter(name: CIfilterName)
filter!.setDefaults()
filter!.setValue(startImage, forKey: kCIInputImageKey)
let filteredImageData = filter!.valueForKey(kCIOutputImageKey) as! CIImage
let filteredImageRef = ciContext.createCGImage(filteredImageData, fromRect: filteredImageData.extent)
let originalOrientation: UIImageOrientation = (imageView.image?.imageOrientation)!
let originalScale: CGFloat = (imageView.image?.scale)!
let newPtImage: UIImage = UIImage.imageWithCGImage(filteredImageRef, scale: originalScale, orientation: originalOrientation)
imageView.image = newPtImage
imageView.image = UIImage(CGImage: filteredImageRef);
规模的最后一部分是我尝试过的,但我展示了那部分代码,这样你就可以看到我做错了什么或者我不知道什么。
我找到了这个答案,但它在 Objective-c 中:Whosebug answer in obj-c
您可以尝试使用带扩展名的 UIImageOrientation
to fix this issue, but I definitely recommend switch
(Github 示例) 语句,因为稍后当照片上传到服务器时,它可能还会再次改变其方向。
示例:
UIImage(CGImage: imageRef, scale: 1.0, orientation: UIImageOrientation.Right)
当图像高度大于图像宽度时会出现此问题,因此如果您的图像高度大于宽度,那么您应该在应用 CIFilter 之前通过相互交换图像高度和宽度来调整图像大小....
当我应用 UIImage
滤镜时,图像的结果是旋转了!我试过这个:
var filterNames: [String] = ["CIPhotoEffectTonal","CIPhotoEffectNoir","CIMaximumComponent","CIMinimumComponent","CIDotScreen", "CISepiaTone", "CIFalseColor", "CIColorInvert", "CIColorPosterize", "CIPhotoEffectChrome", "CIPhotoEffectInstant"]
let CIfilterName = filterNames[indexPath.row]
print(CIfilterName)
let ciContext = CIContext(options: nil)
let startImage = CIImage(image: originalImage)
let filter = CIFilter(name: CIfilterName)
filter!.setDefaults()
filter!.setValue(startImage, forKey: kCIInputImageKey)
let filteredImageData = filter!.valueForKey(kCIOutputImageKey) as! CIImage
let filteredImageRef = ciContext.createCGImage(filteredImageData, fromRect: filteredImageData.extent)
let originalOrientation: UIImageOrientation = (imageView.image?.imageOrientation)!
let originalScale: CGFloat = (imageView.image?.scale)!
let newPtImage: UIImage = UIImage.imageWithCGImage(filteredImageRef, scale: originalScale, orientation: originalOrientation)
imageView.image = newPtImage
imageView.image = UIImage(CGImage: filteredImageRef);
规模的最后一部分是我尝试过的,但我展示了那部分代码,这样你就可以看到我做错了什么或者我不知道什么。
我找到了这个答案,但它在 Objective-c 中:Whosebug answer in obj-c
您可以尝试使用带扩展名的 UIImageOrientation
to fix this issue, but I definitely recommend switch
(Github 示例) 语句,因为稍后当照片上传到服务器时,它可能还会再次改变其方向。
示例:
UIImage(CGImage: imageRef, scale: 1.0, orientation: UIImageOrientation.Right)
当图像高度大于图像宽度时会出现此问题,因此如果您的图像高度大于宽度,那么您应该在应用 CIFilter 之前通过相互交换图像高度和宽度来调整图像大小....