gpt4 book ai didi

iOS CIFilters 到底有什么用?

转载 作者:可可西里 更新时间:2023-11-01 00:37:04 24 4
gpt4 key购买 nike

我目前正在尝试用一张由不同的 CIFilter 过滤的图片填充一个 Collection View 。我使用 apples 的方式来获取一组过滤器。

let filterNames = CIFilter.filterNamesInCategories([kCICategoryStillImage,kCICategoryBuiltIn])

我认为这应该为我提供适用于 iPhone 上静止图像的所有滤镜。但这有点行不通。

这是我从上述方法获得的(一些)过滤器:

["CIAccordionFoldTransition", "CIAdditionCompositing", "CIAffineClamp", "CIAffineTile", "CIAffineTransform", "CIAreaAverage", "CIAreaHistogram", "CIAreaMaximum", "CIAreaMaximumAlpha", "CIAreaMinimum", "CIAreaMinimumAlpha", "CIAztecCodeGenerator", "CIBarsSwipeTransition", "CIBlendWithAlphaMask", "CIBlendWithMask", "CIBloom", "CIBoxBlur", "CIBumpDistortion", "CIBumpDistortionLinear", "CICheckerboardGenerator", "CICircleSplashDistortion", "CICircularScreen", "CICircularWrap", "CICMYKHalftone", 

还有很多。

我用这种方法应用过滤器:

func applyFilter(image: UIImage, filterName: String) -> UIImage {

let beginImage = CIImage(CGImage: image.CGImage!)

let filter = CIFilter(name: filterName)!

filter.setValue(beginImage, forKey: kCIInputImageKey)

filter.setDefaults()

let context = CIContext(options: nil)
let imageRef = context.createCGImage(filter.outputImage!, fromRect: beginImage.extent)

let newImage = UIImage(CGImage: imageRef)
return newImage
}

前两个过滤器不会工作,因为生成的图像为零,然后一些工作,然后我得到:

[<CIAztecCodeGenerator 0x7fb89c775460> setValue:forUndefinedKey:]: this     class is not key value coding-compliant for the key inputImage.'
*** First throw call stack:
(
0 CoreFoundation 0x000000010cd5de65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010efebdeb objc_exception_throw + 48
2 CoreFoundation 0x000000010cd5daa9 - [NSException raise] + 9
3 CoreImage 0x000000010d33eea2 -[CIFilter setValue:forUndefinedKey:] + 137
4 CoreImage 0x000000010d4093ce -[CIAztecCodeGenerator setValue:forUndefinedKey:] + 335
5 Foundation 0x000000010d6749bb -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288
6 DrawIt 0x000000010cb55088 _TFC6DrawIt25applyFilterViewController11applyFilterfS0_FTCSo7UIImage10filterNameSS_S1_ + 552
7 DrawIt 0x000000010cb54b52 _TFC6DrawIt25applyFilterViewController14collectionViewfS0_FTCSo16UICollectionView22cellForItemAtIndexPathCSo11NSIndexPath_CSo20UICollectionViewCell + 1186
8 DrawIt 0x000000010cb54e3f _TToFC6DrawIt25applyFilterViewController14collectionViewfS0_FTCSo16UICollectionView22cellForItemAtIndexPathCSo11NSIndexPath_CSo20UICollectionViewCell + 79
9 UIKit 0x000000010e31d5ba -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:] + 483
10 UIKit 0x000000010e31fae0 -[UICollectionView _updateVisibleCellsNow:] + 4431
11 UIKit 0x000000010e32423b -[UICollectionView layoutSubviews] + 247
12 UIKit 0x000000010db7f4a3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703
13 QuartzCore 0x0000000113d0059a -[CALayer layoutSublayers] + 146
14 QuartzCore 0x0000000113cf4e70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
15 QuartzCore 0x0000000113cf4cee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
16 QuartzCore 0x0000000113ce9475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
17 QuartzCore 0x0000000113d16c0a _ZN2CA11Transaction6commitEv + 486
18 QuartzCore 0x0000000113d259f4 _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 576
19 CoreFoundation 0x000000010ccbdc84 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
20 CoreFoundation 0x000000010ccbd831 __CFRunLoopDoTimer + 1089
21 CoreFoundation 0x000000010cc7f241 __CFRunLoopRun + 1937
22 CoreFoundation 0x000000010cc7e828 CFRunLoopRunSpecific + 488
23 GraphicsServices 0x0000000113bc8ad2 GSEventRunModal + 161
24 UIKit 0x000000010dac8610 UIApplicationMain + 171
25 DrawIt 0x000000010cb569fd main + 109
26 libdyld.dylib 0x000000010faf492d start + 1
27 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

我没有检查所有其他过滤器。我认为数组应该只包含适用的过滤器。是代码错误还是我使用的过滤器数组?

但是例如第一个过滤器 (CIAccordionFoldTransition) 似乎是一个过渡而不是真正的过滤器。所以它有一个 nil 作为输出是有道理的。

有没有办法像这样获取适用于单张图片的所有滤镜?

我对 iOs 很陌生,我希望我的问题对这个主页来说不是愚蠢的,请客气!提前致以问候和感谢。

最佳答案

一些 CIFilter.filterNamesInCategories 返回的过滤器有一个 inputImage 属性,有些没有。

例如,CIAztecCodeGenerator 理解的属性(在您的异常报告中提到)列在 here ,而 inputImage 不是其中之一。

过滤器通过其 inputKeys property 报告其输入属性的键.它通过其 attributes property 描述其所有属性.

也许您想将过滤器限制为具有 inputImage 属性的过滤器:

let filterNames = CIFilter.filterNamesInCategories([kCICategoryStillImage,kCICategoryBuiltIn])
.filter { CIFilter(name: $0)?.inputKeys.contains("inputImage") ?? false }

关于iOS CIFilters 到底有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com