2012-03-26 6 views
9

Ich möchte einen Bildfilter oder eine Maske anwenden, wenn ein Wort auf dem Bild gezeichnet wird. Das Wort hat einen transparenten Effekt, um durch das Hintergrundbild zu sehen. Ist es möglich, in nativen IOS SDK oder ich brauche andere API, um dies durchzuführen. Dieses Bild besteht aus 2 Bildern. Einer ist, wo Indien über geschrieben wird, und ein anderer ist, der durch Indien Brief sieht. This image consist of 2 images. one is where India is written over, and another one is which is see through the India letter.Wie maskiert man ein Bild in IOS SDK?

Dies ist der Code, den ich verwende, um Bild aus Text zu generieren.

-(UIImage *)imageFromText:(NSString *)text{ 
// set the font type and size 
UIFont *font = [UIFont systemFontOfSize:100.0]; 
CGSize size = [text sizeWithFont:font]; 

// check if UIGraphicsBeginImageContextWithOptions is available (iOS is 4.0+) 
if (UIGraphicsBeginImageContextWithOptions != NULL) 
    UIGraphicsBeginImageContextWithOptions(size,NO,0.0); 
else 
    // iOS is < 4.0 
    UIGraphicsBeginImageContext(size); 

// optional: add a shadow, to avoid clipping the shadow you should make the context size bigger 
// 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGContextSetShadowWithColor(ctx, CGSizeMake(0.0, 1.0), 5.0, [[UIColor blackColor] CGColor]); 
CGContextSetBlendMode(ctx,kCGBlendModeNormal); 
CGContextSetFillColorWithColor(ctx, [UIColor whiteColor].CGColor); 


/*NSLog(@"Rect %@",CGContextGetClipBoundingBox(ctx)); 
CGImageRef alphaMask = CGBitmapContextCreateImage(ctx); 
CGContextClipToMask(ctx, CGContextGetClipBoundingBox(ctx), alphaMask);*/ 


// draw in context, you can use also drawInRect:withFont: 
[text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font]; 

// transfer image 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext();  

return image;} 

Es funktioniert gut, aber ich brauche das Bild zu erzeugen, den schwarzen Hintergrund und transparenten Text zu sehen, durch sie haben wird.

+0

danken euch. es funktioniert. 2 Bilder, die wir brauchen, ist ein Maskierungsbild mit schwarzem Hintergrund und eingebettetem Buchstaben und ein anderes ist das Originalbild, auf dem die Maskierung funktioniert. Könnte es möglich sein, das Maskierungsbild dynamisch aus dem Code zu machen? – arindam

Antwort

13

können Sie diesen Code verwenden (bekam von here),

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
     CGImageGetHeight(maskRef), 
     CGImageGetBitsPerComponent(maskRef), 
     CGImageGetBitsPerPixel(maskRef), 
     CGImageGetBytesPerRow(maskRef), 
     CGImageGetDataProvider(maskRef), NULL, false); 

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
    return [UIImage imageWithCGImage:masked]; 

} 
+0

Das funktioniert bei Swift 4 nicht und ich bekomme das Originalbild als maskiertes Bild. – iAviator