2012-02-06 5 views
1

イメージにビネットとビンテージイメージフィルタを適用したいと思います。ビネットとヴィンテージイメージフィルタをアプリケーションに適用する方法

私はthis sample codeに続いた。

ホワイトとセフィアのフィルターをブラック&に統合しました。このコードでは、ビネットイメージフィルターも提供していますが、このフィルターを適用すると非常に遅く処理され、小さな画像ではアプリがクラッシュします。

ビネットイメージフィルタとビンテージイメージフィルタを実装する方法を教えてください。 どのような提案も高く評価されます。 ありがとうございます!

+0

提案1:(Google検索を介して)あなたがしたいことをし、あなたのコードに統合するライブラリを見つける。提案2:あなたが望むもののアルゴリズムを見つけて、そのコードを書く。提案3:提案1と2を行い、プログラミング問題に関連する特定の質問を投稿してください。 –

+0

具体的な質問はありません。 –

+0

@NickBullは既に提案1と2を行っています。私がこの例のリンクを付けている理由です。これらのフィルタの実装について知っていれば助けてください。 – Gypsa

答えて

9

あなたはかなり簡単にGPUImageを使用して、そのGPUImageSepiaFilterとGPUImageVignetteFilterことを行うことができます。

Sepia and vignette filtered image

上記の画像は、次のコードを使用して生成した場合、GPUImageGrayscaleFilterもあります

UIImage *inputImage = [UIImage imageNamed:@"Lambeau.jpg"]; 

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage]; 
GPUImageSepiaFilter *stillImageFilter = [[GPUImageSepiaFilter alloc] init]; 
GPUImageVignetteFilter *vignetteImageFilter = [[GPUImageVignetteFilter alloc] init]; 
vignetteImageFilter.vignetteEnd = 0.6; 
vignetteImageFilter.vignetteStart = 0.4; 

[stillImageSource addTarget:stillImageFilter]; 
[stillImageFilter addTarget:vignetteImageFilter]; 
[stillImageSource processImage]; 

UIImage *filteredImage = [vignetteImageFilter imageFromCurrentlyProcessedOutput]; 

をソースイメージにグレースケールフィルタを適用したいとします。

フレームワーク名が示しているように、これはすべてGPUアクセラレーションであるため、CPUにバインドされている画像処理ルーチンよりもはるかに高速です。実際には、上記のフィルタをライブビデオに適用することができます。 iPhone 4は640x480ビデオフレームで〜2msでこのフィルタを実行できます。静止画は、UIImagesとの間でやり取りするときに必要なCore Graphics経由のラウンドトリップのために少し遅くなりますが、CPUバインドされたフィルタよりも最大6倍高速です。

現行の実装では、非A5デバイス(iPhone 3G S、iPhone 4、iPad 1)のテクスチャサイズの制限は2048x2048であるため、現在はそれ以上の画像をフィルタリングできません。私はこの限界を克服する方法に取り組んでいますが、その間に、処理前にこの解像度の制限内に収まるように画像を縮小する必要があります。

+0

あなたの答えをありがとう。この。 – Gypsa

+0

@brad:こんにちは..私のプロジェクトでは同じコードを使用していましたが、 "Property xはGPUImageVignetteFilterのオブジェクトタイプに見つかりませんでした"と書かれています vignetteImageFilter.x = 0.6; そしてy –

+0

@Ajitthala - これらのプロパティの名前がvignetteEndとvignetteStartに変更されました。上記のコードを一致するように更新しましたが、このすべてをSimpleImageFilterサンプルアプリケーションで見つけることができます。 –

0

スイフト3。ビンテージ効果を適用する関数の下に。この関数はCore Imageを使用します。

Core Image Filtersを使用して画像に効果を適用します。

func processVintageImage(_ image: UIImage) -> UIImage { 

    guard let inputImage = CIImage(image: image) else { return image } 

    guard let photoFilter = CIFilter(name: "CIPhotoEffectInstant", 
            withInputParameters: ["inputImage" : inputImage]), 
     let photoOutput = photoFilter.outputImage, 
     let sepiaFilter = CIFilter(name: "CISepiaTone", 
            withInputParameters: ["inputImage": photoOutput]), 
     let sepiaFilterOutput = sepiaFilter.outputImage, 
     let vignetteFilter = CIFilter(name: "CIVignette", 
             withInputParameters: ["inputImage": sepiaFilterOutput, "inputRadius" : 1.5, "inputIntensity" : 4.0]), 
     let vignetteFilterOutput = vignetteFilter.outputImage else { return image } 

    let context = CIContext(options: nil) 

    let cgImage = context.createCGImage(vignetteFilterOutput, from: inputImage.extent) 

    return UIImage(cgImage: cgImage!) 
} 
関連する問題