2012-09-12 14 views
10

मैंआईओएस: यूआईएममेज का एक गहरा संस्करण बनाएं और पारदर्शी पिक्सेल अपरिवर्तित छोड़ दें?

Create new UIImage by adding shadow to existing UIImage

और

UIImage, is there an easy way to make it darker or all black

पाया लेकिन चयनित जवाब मेरे लिए काम नहीं करते।

मेरे पास एक यूआईएममेज है, जिसमें इसमें कुछ पारदर्शी पिक्सल हो सकते हैं, मुझे गैर-पारदर्शी पिक्सेल अंधेरे के साथ एक नया यूआईएममेज बनाना होगा, क्या ऐसा करने का कोई तरीका है? मैं UIBezierPath का उपयोग करने के बारे में सोच रहा था, लेकिन मुझे नहीं पता कि केवल गैर-पारदर्शी पिक्सल के लिए इसे कैसे किया जाए।

उत्तर

31

यह वह वर्ग है जिसे मैं रंगीन छवियों के लिए उपयोग करता हूं भले ही वे पारदर्शी हों।

+ (UIImage *)colorizeImage:(UIImage *)image withColor:(UIColor *)color { 
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, image.size.width, image.size.height); 

    CGContextScaleCTM(context, 1, -1); 
    CGContextTranslateCTM(context, 0, -area.size.height); 

    CGContextSaveGState(context); 
    CGContextClipToMask(context, area, image.CGImage); 

    [color set]; 
    CGContextFillRect(context, area); 

    CGContextRestoreGState(context); 

    CGContextSetBlendMode(context, kCGBlendModeMultiply); 

    CGContextDrawImage(context, area, image.CGImage); 

    UIImage *colorizedImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return colorizedImage; 
} 

छवि को अंधेरा करने के लिए आप विधि को पारदर्शीता वाले काले या भूरे रंग के यूआईसीओलर को पास करेंगे।

+6

धन्यवाद! सुझाए गए सुधार: स्केल को बनाए रखने के लिए 'UIGraphicsBeginImageContextWithOptions (image.size, NO, image.scale) 'का उपयोग करें, अन्यथा रंगीन छवि रेटिना डिस्प्ले पर धुंधली होगी। – Merott

+2

@ मेरॉट मैं आगे बढ़ने जा रहा हूं और आपके सुझाव को शामिल करने के लिए उत्तर संपादित कर रहा हूं। यह मॉडरेटर को खारिज कर दिया जा सकता है, लेकिन अगर ओपी खुश हैं, उम्मीद है कि वे इसे वापस पकड़ लेंगे। – Benjohn

+0

यह बहुत उपयोगी है। धन्यवाद! – birdcage

13

CoreImage फ़िल्टर को आजमाने के बारे में कैसे?

आप छवि को अंधेरे करने के लिए इनपुट चमक और इसके विपरीत को समायोजित करने के लिए CIColorControls फ़िल्टर का उपयोग कर सकते हैं।

CIContext *context = [CIContext contextWithOptions:nil]; 
CIImage *inputImage = [[CIImage alloc] initWithImage:sourceImage]; //your input image 

CIFilter *filter= [CIFilter filterWithName:@"CIColorControls"]; 
[filter setValue:inputImage forKey:@"inputImage"]; 
[filter setValue:[NSNumber numberWithFloat:0.5] forKey:@"inputBrightness"]; 

// Your output image 
UIImage *outputImage = [UIImage imageWithCGImage:[context createCGImage:filter.outputImage fromRect:filter.outputImage.extent]]; 

यहाँ CIFilter पैरामीटर के बारे में और अधिक पढ़ें:

http://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html%23//apple_ref/doc/filter/ci/CIColorControls

+0

अच्छा समाधान, लेकिन ध्यान दें कि इसे आईओएस 5 – Adam

+0

की आवश्यकता है इसके अलावा, आपके कोड में एक प्रमुख मेमोरी रिसाव है (createCGImage जारी किया जाना चाहिए!), और (मेरे लिए) काम नहीं करता है - जहां स्वीकृत उत्तर पूरी तरह से काम करता है। – Adam

4

यहां एक त्वरित स्विफ्ट संस्करण है, एक CIExposureAdjust CIFilter का उपयोग कर :)

// Get the original image and set up the CIExposureAdjust filter 
    guard let originalImage = UIImage(named: "myImage"), 
    let inputImage = CIImage(image: originalImage), 
    let filter = CIFilter(name: "CIExposureAdjust") else { return } 

    // The inputEV value on the CIFilter adjusts exposure (negative values darken, positive values brighten) 
    filter.setValue(inputImage, forKey: "inputImage") 
    filter.setValue(-2.0, forKey: "inputEV") 

    // Break early if the filter was not a success (.outputImage is optional in Swift) 
    guard let filteredImage = filter.outputImage else { return } 

    let context = CIContext(options: nil) 
    let outputImage = UIImage(CGImage: context.createCGImage(filteredImage, fromRect: filteredImage.extent)) 

    myImageView.image = outputImage // use the filtered UIImage as required. 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^