ios - Objective-C : CIFilter returning nil image

标签 ios objective-c core-image cifilter

我正在编写一个函数,它将对图像应用滤镜并返回新图像。我写了下面的代码:

+ (UIImage*)applyFilter:(UIImage*) photo {
    CIImage *image = [[CIImage alloc] initWithCGImage:photo.CGImage];
    CIFilter *filter = [CIFilter filterWithName:@"CIphotoEffectTransfer"
                                  keysAndValues: kCIInputImageKey, image,
                        @"inputIntensity", @0.8, nil];
    CIImage *outputImage = [filter outputImage];

    UIImage* newPhoto = [self imageFromCIImage:outputImage];
    return newPhoto;
}

我遇到的问题是该函数返回的是一张无照片,而不是应用了滤镜的照片。有趣的是,如果我将过滤器名称更改为@"CIVignetteEffect",它将起作用。我不明白为什么一个过滤器有效而另一个过滤器无效。我从以下链接找到了两个过滤器:https://developer.apple.com/library/tvos/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPhotoEffectTransfer

最佳答案

我认为滤镜的正确名称是 CIPhotoEffectTransfer,而不是 CIphotoeffectTransfer。

试试这个代码...我过去用它来过滤照片,所以我知道它有效:

+ (UIImage*)applyFilter:(UIImage*) photo {
UIImageOrientation orientation = photo.imageOrientation;
CIImage* image = [CIImage imageWithCGImage:photo.CGImage];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectTransfer"];
[filter setValue:image forKey:kCIInputImageKey];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newPhoto = [UIImage imageWithCGImage:cgimg scale:1.0 orientation:orientation];
CGImageRelease(cgimg);
context = nil;
return newPhoto;

关于ios - Objective-C : CIFilter returning nil image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028234/

相关文章:

ios - AVFoundation 切换相机速度慢(连接到样本缓冲区)

ios - CFUUID 对比广告标识符对比标识符ForVendor

滚动时,iOS UITableView 滚动条位于表头下方

ios - swift 3 : how to save Animated images from imageView (GIF)?

swift - 在 UI 元素上应用 CIFilter

ios - 如何在 Swift 中将图像转换为渐进式 JPEG?

ios - 我如何在 Swift 中呈现另一个内部的 View Controller ?

ios - 两个日期之间的时间差导致错误或未知值

ios - 无法加载4S拍摄的图像,但可以加载5S

ios - viewWillTransitionToSize 未在 iPad 模拟器中调用