cocoa-touch - stores - एप्पल एप्प




क्या आईओएस 5 कोरइमेज फिटर्स ब्लर का समर्थन करता है? (5)

प्रलेखन के अनुसार इसे धुंधला करने का समर्थन करना चाहिए, "आईओएस 5.0 और बाद में उपलब्ध" पर ध्यान दें:

सीआईफ़िल्टर क्लास संदर्भ

लेकिन डिवाइस के अनुसार, यह नहीं है:

[CIFilter filterNamesInCategory:kCICategoryBlur];

कुछ भी नहीं देता है।

निम्नलिखित के अनुसार ही ये फ़िल्टर मेरे आईफोन और सिम्युलेटर पर उपलब्ध हैं (जो दोनों 5.0 चल रहे हैं):

[CIFilter filterNamesInCategory:kCICategoryBuiltIn]

CIAdditionCompositing,
CIAffineTransform,
CICheckerboardGenerator,
CIColorBlendMode,
CIColorBurnBlendMode,
CIColorControls,
CIColorCube,
CIColorDodgeBlendMode,
CIColorInvert,
CIColorMatrix,
CIColorMonochrome,
CIConstantColorGenerator,
CICrop,
CIDarkenBlendMode,
CIDifferenceBlendMode,
CIExclusionBlendMode,
CIExposureAdjust,
CIFalseColor,
CIGammaAdjust,
CIGaussianGradient,
CIHardLightBlendMode,
CIHighlightShadowAdjust,
CIHueAdjust,
CIHueBlendMode,
CILightenBlendMode,
CILinearGradient,
CILuminosityBlendMode,
CIMaximumCompositing,
CIMinimumCompositing,
CIMultiplyBlendMode,
CIMultiplyCompositing,
CIOverlayBlendMode,
CIRadialGradient,
CISaturationBlendMode,
CIScreenBlendMode,
CISepiaTone,
CISoftLightBlendMode,
CISourceAtopCompositing,
CISourceInCompositing,
CISourceOutCompositing,
CISourceOverCompositing,
CIStraightenFilter,
CIStripesGenerator,
CITemperatureAndTint,
CIToneCurve,
CIVibrance,
CIVignette,
CIWhitePointAdjust

अद्यतन: आईओएस 6 के रूप में [CIFilter filterNamesInCategory:kCICategoryBlur]; CIGaussianBlur अर्थ है कि यह फ़िल्टर डिवाइस पर उपलब्ध है। भले ही यह सच है, आप (संभवतः) GPUImage का उपयोग करके बेहतर प्रदर्शन और अधिक लचीलापन प्राप्त करेंगे।


जबकि आईओएस 5.0 पर कोर इमेज में ब्लर फिल्टर की कमी है, फिर भी छवियों और वीडियो के जीपीयू-त्वरित ब्लर्स प्राप्त करने का एक तरीका है। मेरे ओपन सोर्स GPUImage फ्रेमवर्क में गॉसियन (एक सामान्य गॉसियन या जीपीयू इमेजफास्टब्लूरफिल्टर के लिए एक हार्डवेयर-अनुकूलित 9-हिट गॉसियन) के लिए GPUImageGaussianBlurFilter का उपयोग करके कई ब्लर प्रकार हैं, बॉक्स (एक GPUImageBoxBlurFilter का उपयोग करके), औसत (एक GPUImageMedianFilter का उपयोग करके), और द्विपक्षीय धुंध (एक GPUImageBilateralBlurFilter का उपयोग कर)।

मैं इस जवाब में हार्डवेयर-अनुकूलित गॉसियन ब्लर को खींचने के लिए उपयोग किए जाने वाले शेडरों का वर्णन करता हूं, और आप फ्रेम के भीतर बाकी के लिए उपयोग किए जाने वाले कोड की जांच कर सकते हैं। ये फ़िल्टर अभी तक कोशिश की गई किसी भी CPU-bound routine की तुलना में तेज़ी से तेज़ी से चलते हैं।

मैंने इन ब्लर्स को मल्टी-स्टेज प्रसंस्करण प्रभावों में भी शामिल किया है, जैसे अनशार्प मास्किंग, झुकाव-शिफ्ट फ़िल्टरिंग, कैनी एज डिटेक्शन, और हैरिस कोने का पता लगाने, जिनमें से सभी इस ढांचे के भीतर फ़िल्टर के रूप में उपलब्ध हैं।


फिर, सभी आईओएस धुंध जारी करने के प्रयास में, मेरा योगदान यहां है:

https://github.com/tomsoft1/StackBluriOS

स्टैक ब्लर पर आधारित एक साधारण धुंध लाइब्रेरी। स्टैक ब्लर गॉसियन ब्लर के समान ही है, लेकिन बहुत तेज़ है ( http://incubator.quasimondo.com/processing/fast_blur_deluxe.php )

इस तरह इसका इस्तेमाल करें:

UIImage *newIma=[sourceIma stackBlur:radius]

उममीद है कि इससे मदद मिलेगी


मैं यह भी निराश था कि आईओएस में कोर इमेज ब्लर्स का समर्थन नहीं करता है। यहां एक ऐसा कार्य है जिसे मैंने यूआईएममेज पर 9-टैप गॉसियन ब्लर करने के लिए लिखा था। मजबूत ब्लर्स प्राप्त करने के लिए इसे बार-बार कॉल करें।

@interface UIImage (ImageBlur)
- (UIImage *)imageWithGaussianBlur9;
@end

@implementation UIImage (ImageBlur)
- (UIImage *)imageWithGaussianBlur9 {
    float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162};
    // Blur horizontally
    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
    for (int x = 1; x < 5; ++x) {
        [self drawInRect:CGRectMake(x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
        [self drawInRect:CGRectMake(-x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
    }
    UIImage *horizBlurredImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    // Blur vertically
    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
    [horizBlurredImage drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
    for (int y = 1; y < 5; ++y) {
        [horizBlurredImage drawInRect:CGRectMake(0, y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
        [horizBlurredImage drawInRect:CGRectMake(0, -y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
    }
    UIImage *blurredImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    //
    return blurredImage;
}

बस इसे इस तरह की मौजूदा छवि पर कॉल करें:

UIImage *blurredImage = [originalImage imageWithGaussianBlur9];

और इसे मजबूत धुंधला करने के लिए दोहराएं, इस तरह:

blurredImage = [blurredImage imageWithGaussianBlur9];





core-image