IOS पर प्रोग्रामेटिक रूप से स्क्रीनशॉट कैसे लें


157

मैं सहेजे गए फोटो लाइब्रेरी में सहेजे गए स्क्रीन पर छवि का स्क्रीनशॉट चाहता हूं।

जवाबों:


233

रेटिना डिस्प्ले के लिए एक चेक को ध्यान में रखते हुए निम्नलिखित कोड स्निपेट का उपयोग करें:

#import <QuartzCore/QuartzCore.h> 

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
} else {
    UIGraphicsBeginImageContext(self.window.bounds.size);
}

[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(image);
if (imageData) {
    [imageData writeToFile:@"screenshot.png" atomically:YES];
} else {
    NSLog(@"error while taking screenshot");
}

13
ध्यान दें कि यह कुछ प्रकार की स्क्रीन सामग्री को कैप्चर नहीं करेगा, जैसे OpenGL ES लेयर्स। UIGetScreenImage (), हुआ-यिंग इशारा करता है।
ब्रैड लार्सन

12
प्रिय लोगों को, ऐसा करने के लिए मत भूलना #import <QuartzCore / QuartzCore.h>
एनरिको Susatyo

क्या यह एक स्क्रीनशॉट लेगा यदि आप एक तस्वीर देख रहे हैं जिसे आपका ऐप अभी लिया है?
जॉन रिसेल्वाटो

5
यह चित्र कहाँ संग्रहीत है?
बुरहानुद्दीन सुनीलवाला

3
@ व्लादिमीर-पटल: की-बोर्ड के बारे में क्या, क्योंकि जब मैं उपयोगकर्ता प्रकार, जहां की-बोर्ड स्क्रीन शॉट लेने के लिए उपयोग करता हूं, तब की-बोर्ड कैप्चर नहीं होता, मैं स्क्रीन-कैप्चर में की-बोर्ड कैसे जोड़ सकता हूं ..?
g212gs

46

नीचे विधि OPENGL वस्तुओं के लिए भी काम करती है

//iOS7 or above
- (UIImage *) screenshot {

    CGSize size = CGSizeMake(your_width, your_height);

    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);

    CGRect rec = CGRectMake(0, 0, your_width, your_height);
    [_viewController.view drawViewHierarchyInRect:rec afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

5
UIGetScreenImageएक निजी एपीआई है
जोंहब

इसके लिए बहुत - बहुत धन्यवाद! आप मेरा वोट जरूर पाइए। कई अन्य तरीकों से प्रयास करने के बाद, यह प्रतीत होता है कि drawViewHierarchy एकमात्र तरीका है कि कैसे रोबोव में एक javafx ui के साथ स्क्रीन हड़पने का तरीका लिया जा सकता है।
क्रिस्टो स्माल

यह वही है जो हर समय काम कर रहा है !!!! मेरे पास स्क्रिन पर बहुत सारे 3 डी ट्रांसफ़ॉर्म हैं और अन्य समाधानों ने मेरे स्क्रीनशॉट में गड़बड़ी की है। यह इस तरह से काम करना चाहिए। आपका बहुत बहुत धन्यवाद!
एंड्रयूज

1
अगर व्यू कंट्रोलर नेविगेशन कंट्रोलर में है तो नेविगेशन बार कैप्चर नहीं किया जाता है
रादु सिमियोनेस्कु

हाँ, drawViewHierarchyInRect रेंडर इनकॉनटैक्स से अधिक तेज़ है :-)
alones

20
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *imageData = UIImageJPEGRepresentation(image, 1.0 ); //you can use PNG too
[imageData writeToFile:@"image1.jpeg" atomically:YES];

1
पीएनजी का उपयोग करने के बारे में नोट के लिए +1। यह दोषरहित है और गुणवत्ता = 1.0 के साथ jpeg से छोटा होगा।
रोब

1
यह खाली जगह छोड़ने के बजाय iOS 7 में नेवीगेशनबार नहीं ले रहा है।
अली सूफियान

14
- (UIImage*) getGLScreenshot {
    NSInteger myDataLength = 320 * 480 * 4;

    // allocate array and read pixels into it.
    GLubyte *buffer = (GLubyte *) malloc(myDataLength);
    glReadPixels(0, 0, 320, 480, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    // gl renders "upside down" so swap top to bottom into new array.
    // there's gotta be a better way, but this works.
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength);
    for(int y = 0; y <480; y++)
    {
        for(int x = 0; x <320 * 4; x++)
        {
            buffer2[(479 - y) * 320 * 4 + x] = buffer[y * 4 * 320 + x];
        }
    }

    // make data provider with data.
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL);

    // prep the ingredients
    int bitsPerComponent = 8;
    int bitsPerPixel = 32;
    int bytesPerRow = 4 * 320;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;

    // make the cgimage
    CGImageRef imageRef = CGImageCreate(320, 480, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);

    // then make the uiimage from that
    UIImage *myImage = [UIImage imageWithCGImage:imageRef];
    return myImage;
}

- (void)saveGLScreenshotToPhotosAlbum {
    UIImageWriteToSavedPhotosAlbum([self getGLScreenshot], nil, nil, nil);  
}

स्रोत


1
क्यों MyDataLength 320 * 480 के 4 ontop से गुणा किया जाता है?
Jab

2
यह भी वास्तव में बहुत बेवकूफ लगता है कि वे हमें ऐसा करने का एक आसान तरीका प्रदान नहीं करते हैं।
Jab

320 * 480 पिक्सल की संख्या है। टाइम्स चार तो आप प्रत्येक पिक्सेल के लिए RGBA है।
आइस्टिना

आईफोन 4 पर चलने पर स्केल फैक्टर द्वारा मल्टीपल को याद रखें 4
19

1
@ ऐस्टिना, उपयोग करें UIImage *myImage = [[UIImage alloc] initWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationDownMirrored];और आपको अब 'बफर 2' की आवश्यकता नहीं है। BTW यह मुझे लगता है जैसे आप स्मृति प्रबंधन के बारे में भूल गए, कोई मुफ्त () या रिलीज़ () कॉल ...
ओलेग ट्रैक्मैन

10

स्विफ्ट में

func captureScreen() -> UIImage
{

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0);

    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return image
}

9

इस पोस्ट को देखें ऐसा लगता है कि आप अभी के लिए UIGetScreenImage () का उपयोग कर सकते हैं।


9
IOS 4 में इसे फिर से अनुमति नहीं है
sudo rm -rf

9

IOS10 के रूप में, यह थोड़ा सरल हो जाता है। UIKit आता है UIGraphicsImageRenderजो आपको अनुमति देता है

... ड्राइंग कार्यों को पूरा करें, जैसे कि रंग की गहराई और छवि पैमाने जैसे कॉन्फ़िगरेशन को संभालना, या कोर ग्राफिक्स संदर्भों को प्रबंधित करना

Apple डॉक्स - UIGraphicsImageRenderer

तो अब आप कुछ इस तरह कर सकते हैं:

let renderer = UIGraphicsImageRenderer(size: someView.bounds.size)

let image = renderer.image(actions: { context in
    someView.drawHierarchy(in: someView.bounds, afterScreenUpdates: true)
})

यहां के कई जवाबों ने ज्यादातर मामलों में मेरे लिए काम किया। लेकिन जब एक का स्नैपशॉट लेने की कोशिश कर ARSCNViewरहा था, मैं केवल ऊपर वर्णित विधि का उपयोग करके ऐसा करने में सक्षम था। हालाँकि यह ध्यान देने योग्य है कि इस समय, ARKit अभी भी बीटा में है और Xcode बीटा 4 में है


7

यह स्क्रीनशॉट को बचाएगा और साथ ही स्क्रीनशॉट को भी लौटाएगा।

-(UIImage *)capture{
    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *imageView = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(imageView, nil, nil, nil); //if you need to save
    return imageView;
}

5

मुझे लगता है कि यदि आप एक पूर्ण स्क्रीन ( स्टेटस बार को छोड़कर ) लेना चाहते हैं तो स्निपेट मदद करेगा , यदि आवश्यक हो तो बस अपने ऐप डेलीगेट के नाम के साथ AppDelegate बदलें।

- (UIImage *)captureFullScreen {

    AppDelegate *_appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        // for retina-display
        UIGraphicsBeginImageContextWithOptions(_appDelegate.window.bounds.size, NO, [UIScreen mainScreen].scale);
        [_appDelegate.window drawViewHierarchyInRect:_appDelegate.window.bounds afterScreenUpdates:NO];
    } else {
        // non-retina-display
        UIGraphicsBeginImageContext(_bodyView.bounds.size);
        [_appDelegate.window drawViewHierarchyInRect:_appDelegate.window.bounds afterScreenUpdates:NO];
    }

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

पूरी तरह से एक है कि नेविगेशन बार को जोड़ता है! अगर मैं कर सकता तो दो बार वोट करेगा! चीयर्स मेट
मार्सेलोसर्विस

4

मैं स्विफ्ट 3 कार्यान्वयन के साथ एक उत्तर नहीं पा सका। तो यहाँ यह जाता है।

static func screenshotOf(window: UIWindow) -> UIImage? {

    UIGraphicsBeginImageContextWithOptions(window.bounds.size, true, UIScreen.main.scale)

    guard let currentContext = UIGraphicsGetCurrentContext() else {
        return nil
    }

    window.layer.render(in: currentContext)
    guard let image = UIGraphicsGetImageFromCurrentImageContext() else {
        UIGraphicsEndImageContext()
        return nil
    }

    UIGraphicsEndImageContext()
    return image
}

3

IOS 7.0 या इससे ऊपर के लिए ..

यदि आप कहना चाहते हैं (myView) के स्क्रीनशॉट लेना चाहते हैं, तो आप इसे सिंगल लाइन के साथ कर सकते हैं:

[myView snapshotViewAfterScreenUpdates:NO];

3

यह स्विफ्ट 4.2 के साथ काम करेगा , स्क्रीनशॉट को लाइब्रेरी में सहेजा जाएगा, लेकिन कृपया इसे संपादित करना न भूलें info.plist @ NSPhotoLibraryAddUsageDescription:

  @IBAction func takeScreenshot(_ sender: UIButton) {

    //Start full Screenshot
    print("full Screenshot")
    UIGraphicsBeginImageContext(card.frame.size)
    view.layer.render(in: UIGraphicsGetCurrentContext()!)
    var sourceImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(sourceImage!, nil, nil, nil)

    //Start partial Screenshot
    print("partial Screenshot")
    UIGraphicsBeginImageContext(card.frame.size)
    sourceImage?.draw(at: CGPoint(x:-25,y:-100)) //the screenshot starts at -25, -100
    var croppedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(croppedImage!, nil, nil, nil)

}

2

व्यू से स्क्रीनशॉट प्राप्त करें

-(UIImage *)getScreenshotImage {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, FALSE, 2.0);
    } else {
        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, FALSE, 1.0);
    }

    [self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return result;
}

तस्वीरों के लिए छवि सहेजें

UIImageWriteToSavedPhotosAlbum(YOUR_IMAGE, nil, nil, nil);

कैसे

UIImageWriteToSavedPhotosAlbum([self getScreenshotImage], nil, nil, nil);

2

देखें से स्क्रीनशॉट प्राप्त करें:

- (UIImage *)takeSnapshotView {
    CGRect rect = [myView bounds];//Here you can change your view with myView
    UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [myView.layer renderInContext:context];
    UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return capturedScreen;//capturedScreen is the image of your view
}

आशा है, यह वही है जो आप खोज रहे हैं। कोई भी चिंता मुझे वापस मिल जाती है। :)


2

मैं इस सवाल का जवाब दे रहा हूं क्योंकि यह बहुत ज्यादा देखा गया है, और स्विफ्ट और ओबज-सी के कई जवाब हैं।

अस्वीकरण यह मेरा कोड नहीं है, और न ही मेरे उत्तर, यह केवल उन लोगों की मदद करने के लिए है जो यहां भूमि का त्वरित उत्तर पाते हैं। जहाँ क्रेडिट देय है, वहाँ क्रेडिट देने के मूल उत्तरों के लिंक हैं !! यदि आप उनके उत्तर का उपयोग करते हैं तो कृपया मूल उत्तरों को +1 के साथ सम्मानित करें!


का उपयोग करते हुए QuartzCore

#import <QuartzCore/QuartzCore.h> 

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
} else {
    UIGraphicsBeginImageContext(self.window.bounds.size);
}

[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(image);
if (imageData) {
    [imageData writeToFile:@"screenshot.png" atomically:YES];
} else {
    NSLog(@"error while taking screenshot");
}

स्विफ्ट में

func captureScreen() -> UIImage
{

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0);

    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return image
}

नोट: प्रोग्रामिंग के साथ प्रकृति के अनुसार, अपडेट करने की आवश्यकता हो सकती है इसलिए कृपया मुझे संपादित करें या मुझे बताएं! * इसके अलावा अगर मैं एक जवाब / विधि को शामिल करने में विफल रहा, जिसमें मुझे भी अच्छा लगता है!


1
यह उत्तर कुछ भी जोड़ने के लिए प्रतीत नहीं होता है। आपने पृष्ठ पर पहले से ही दो उत्तरों को कॉपी-पेस्ट कर दिया और परिणाम को स्वयं के रूप में पोस्ट किया।
user2357112

मेरा इरादा उनके उत्तरों का श्रेय लेना नहीं था, यह एक उत्तर में स्विफ्ट और ओबज-सी दोनों को शामिल करना था, इसलिए लोगों को खोजने के लिए यह तेज था। मैंने संबंधित उत्तरों को भी संदर्भित किया। अगर ऐसा नहीं किया जाना चाहिए, तो मैं अपना उत्तर हटा दूंगा और उनमें से सिर्फ एक पर वापस लौटूंगा।
Jab

मैं ObjC समाधान का उपयोग कर रहा हूँ। मेरे लिए, मुझे "स्व" के बाद ".view" जोड़ना था, लेकिन परिणाम 100% है। यह
सुनहरा है

यह प्रेजेंटेशन स्ट्रीम पर भी कब्जा करने के लिए काम करता था। साभार
YSR फैन

1

एक अन्य विकल्प उपकरणों पर स्वचालन उपकरण का उपयोग करना है। आप जो भी चाहते हैं उसमें स्क्रीन डालने के लिए एक स्क्रिप्ट लिखते हैं, फिर शॉट्स लेते हैं। यहां वह स्क्रिप्ट है जो मैंने अपने एक ऐप के लिए इस्तेमाल की थी। जाहिर है, आपके ऐप के लिए स्क्रिप्ट का विवरण अलग होगा।

var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var picker = window.pickers()[0];
var wheel = picker.wheels()[2];
var buttons = window.buttons();
var button1 = buttons.firstWithPredicate("name == 'dateButton1'");
var button2 = buttons.firstWithPredicate("name == 'dateButton2'");

function setYear(picker, year) {
    var yearName = year.toString();
    var yearWheel = picker.wheels()[2];
    yearWheel.selectValue(yearName);
}

function setMonth(picker, monthName) {
    var wheel = picker.wheels()[0];
    wheel.selectValue(monthName);
}

function setDay(picker, day) {
    var wheel = picker.wheels()[1];
    var name = day.toString();
    wheel.selectValue(name);
}

target.delay(1);
setYear(picker, 2015);
setMonth(picker, "July");
setDay(picker, 4);
button1.tap();
setYear(picker, 2015);
setMonth(picker, "December");
setDay(picker, 25);

target.captureScreenWithName("daysShot1");

var nButtons = buttons.length;
UIALogger.logMessage(nButtons + " buttons");
for (var i=0; i<nButtons; i++) {
    UIALogger.logMessage("button " + buttons[i].name());
}

var tabBar = window.tabBars()[0];
var barButtons = tabBar.buttons();

var nBarButtons = barButtons.length;
UIALogger.logMessage(nBarButtons + " buttons on tab bar");

for (var i=0; i<nBarButtons; i++) {
    UIALogger.logMessage("button " + barButtons[i].name());
}

var weeksButton = barButtons[1];
var monthsButton = barButtons[2];
var yearsButton = barButtons[3];

target.delay(2);
weeksButton.tap();
target.captureScreenWithName("daysShot2");
target.delay(2);
monthsButton.tap();
target.captureScreenWithName("daysShot3");
target.delay(2);
yearsButton.tap();
target.delay(2);
button2.tap();
target.delay(2);
setYear(picker, 2018);
target.delay(2);
target.captureScreenWithName("daysShot4");

1

Bellow साइट पर उपलब्ध दो विकल्प:

विकल्प 1: UIWindow का उपयोग करना (पूरी तरह से प्रयास करना और काम करना)

// create graphics context with screen size
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);

// grab reference to our window
UIWindow *window = [UIApplication sharedApplication].keyWindow;

// transfer content into our context
[window.layer renderInContext:ctx];
UIImage *screengrab = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

विकल्प 2: UIView का उपयोग करना

// grab reference to the view you'd like to capture
UIView *wholeScreen = self.splitViewController.view;

// define the size and grab a UIImage from it
UIGraphicsBeginImageContextWithOptions(wholeScreen.bounds.size, wholeScreen.opaque, 0.0);
[wholeScreen.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screengrab = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

रेटिना स्क्रीन के लिए (DenNukem उत्तर के रूप में)

// grab reference to our window
    UIWindow *window = [UIApplication sharedApplication].keyWindow;

    // create graphics context with screen size
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, [UIScreen mainScreen].scale);
    } else {
        UIGraphicsBeginImageContext(screenRect.size);
        [window.layer renderInContext:UIGraphicsGetCurrentContext()];
    }

अधिक विस्तार के लिए: http://pinkstone.co.uk/how-to-take-a-screeshot-in-ios-programs//


1

बस एक छोटा सा योगदान, मैंने इसे एक बटन के साथ किया है लेकिन दबाने का मतलब यह भी है कि बटन दबाया गया है। तो पहले मैंने अनहोनी की।

- (IBAction)screenShot:(id)sender {
    // Unpress screen shot button
    screenShotButton.highlighted = NO;

    // create graphics context with screen size
    CGRect screenRect = [[UIScreen mainScreen] bounds];

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
    } else {
        UIGraphicsBeginImageContext(self.view.bounds.size);
    }

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);

    // grab reference to our window
    UIWindow *window = [UIApplication sharedApplication].keyWindow;

    // transfer content into our context
    [window.layer renderInContext:ctx];
    UIImage *screengrab = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // save screengrab to Camera Roll
    UIImageWriteToSavedPhotosAlbum(screengrab, nil, nil, nil);
}

मुझे इस कोड की मुख्य बॉडी मिली: http://pinkstone.co.uk/how-to-take-a-screeshot-in-ios-programmatically/ जहाँ मैंने विकल्प 1 का उपयोग किया, विकल्प 2 काम नहीं कर रहा था मेरे लिए। इस धागे से रेंटिना स्क्रीन के आकार और स्क्रीनशोटन के अनसुने होने के समायोजन को जोड़ा गया। मैं जिस दृश्य का उपयोग कर रहा हूं, वह बटन और लेबल की एक स्टोरीबोर्ड स्क्रीन है और कार्यक्रम के माध्यम से बाद में कई यूआईवीयूवाई के साथ जोड़ा गया है।


संपादन के लिए धन्यवाद। मैंने महसूस किया कि मैं टिप्पणी वाले कोड में छोड़ दिया था, लेकिन फिर सोचा कि "यह है कि चिपकाया कोड कितना वास्तविक है"। लाइव वर्किंग कोड जो अब ऐप स्टोर में है।
सिमांसकी

1

स्विफ्ट में आप निम्नलिखित कोड का उपयोग कर सकते हैं।

if UIScreen.mainScreen().respondsToSelector(Selector("scale")) {
    UIGraphicsBeginImageContextWithOptions(self.window!.bounds.size, false, UIScreen.mainScreen().scale)
}
else{
    UIGraphicsBeginImageContext(self.window!.bounds.size)
}
self.window?.layer.renderInContext(UIGraphicsGetCurrentContext())
var image : UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

0

स्विफ्ट 4:

func makeImage(withView view: UIView) -> UIImage? {

    let rect = view.bounds

    UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)

    guard let context = UIGraphicsGetCurrentContext() else {
      assertionFailure()
      return nil
    }

    view.layer.render(in: context)

    guard let image = UIGraphicsGetImageFromCurrentImageContext() else {
      assertionFailure()
      return nil
    }

    UIGraphicsEndImageContext()

    return image
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.