दिलचस्प पोस्ट
रेल में स्तंभ नामों के लिए उपनाम कैसे अजगर शब्दकोश में यादृच्छिक मूल्य प्राप्त करने के लिए आईएसीए क्या है और मैं इसका उपयोग कैसे करूं? stat () त्रुटि 'ऐसा कोई फ़ाइल या निर्देशिका' नहीं है जब फ़ाइल नाम readdir () द्वारा वापस किया जाता है MySQL के साथ औसत गणना करने का आसान तरीका गैर आईई ब्राउज़र्स के लिए ऑनबेइनप्रिंट () और ओनप्रिस्ट () समकक्ष मैं DateTimePicker नियंत्रण पर कुछ दिनांक कैसे अक्षम करूं? सी ++ सीमा पुनरावर्ती गहराई है? सीक्रेट की को स्ट्रिंग और व्हाइस वर्सा में परिवर्तित करना ctorParameters.map angular2-mdl में एक फ़ंक्शन नहीं है android.os.FileUriExposedException: फ़ाइल: ///storage/emulated/0/test.txt Intent.getData () के माध्यम से ऐप से परे खुलासा Vb.net यादृच्छिक संख्या जनरेटर उसी नंबर पैदा कई बार एक प्रॉक्सी के पीछे file_get_contents? <Div> पुन: आकार देने योग्य MySQL में पंक्तियों के एक सेट पर संचयी राशि

आईओएस के माध्यम से एनिमेटेड जीआईआईएफ़ बनाना और निर्यात करना है?

मेरे पास आईओएस एप के भीतर यूज़र-कस्टमाइज़ की गई छवियां हैं जो एक सरल, फ़्रेम-बाय-फ़्रेम फ्लिप बुक शैली में एनिमेटेड हैं।

मेरा प्रश्न यह है: क्या उपयोगकर्ता एक एनीमेटेड जीआईएफ के रूप में अपने एनीमेशन को निर्यात करने का एक तरीका है? आदर्श रूप से, मैं उन्हें ईमेल, सामाजिक शेयर (टी / एफबी) या (सबसे खराब स्थिति ..) को सक्षम करना चाहता हूं iTunes के जरिए एक एनिमेटेड जीआईफ़ को उनके दस्तावेज़ फ़ोल्डर में सहेजने के लिए बचाया

मुझे पता है कि फ़ोटो लाइब्रेरी में। पीएनजी को कैसे बचाया जाए, और मुझे एनीमेशन को एक क्यूटी फ़ाइल के रूप में रिकॉर्ड करने का एक तरीका मिला ( http://www.cimgf.com/2009/02/03/record-your-core-animation -निदान / ), लेकिन मुझे एक सादे पुराने एनिमेटेड जीआईएफ को बाहर निकालने का कोई तरीका नहीं मिला है। क्या मैं कोर एनिमेशन या कहीं और में कुछ याद कर रहा हूं? क्या कोई दृष्टिकोण, चौखटे या संसाधन हैं जो कि कोई भी सुझा सकता है? क्षमा करें यदि प्रश्न बहुत सामान्य है – प्रारंभिक बिंदु ढूंढने के लिए संघर्ष करना किसी भी मदद की सराहना की

Solutions Collecting From Web of "आईओएस के माध्यम से एनिमेटेड जीआईआईएफ़ बनाना और निर्यात करना है?"

आप छवि I / O ढांचे का उपयोग करके एक एनिमेटेड GIF बना सकते हैं (जो कि आईओएस एसडीके का हिस्सा है)। आप मोबाइल MobileCoreServices फ्रेमवर्क को भी शामिल करना चाहेंगे, जो कि जीआईएफ़ टाइप निरंतर को परिभाषित करता है। आपको इन लक्ष्यों को अपने लक्ष्य में जोड़ने की जरूरत है, और फ़ाइल में उनके शीर्ष लेख आयात करें जहां आप एनिमेटेड जीआईएफ़ बनाना चाहते हैं, जैसे:

 #import <ImageIO/ImageIO.h> #import <MobileCoreServices/MobileCoreServices.h> 

उदाहरण के आधार पर यह सबसे आसान है। मैं आपको यह कोड दिखाऊंगा जिसका उपयोग मैं अपने iPhone 5 पर यह GIF बनाने में किया था:

दिखाए गए कोड द्वारा बनाए गए एनिमेटेड GIF

सबसे पहले, एक सहायक फ़ंक्शन है जो एक आकार और एक कोण लेता है और उस कोण पर लाल डिस्क का एक UIImage देता है:

 static UIImage *frameImage(CGSize size, CGFloat radians) { UIGraphicsBeginImageContextWithOptions(size, YES, 1); { [[UIColor whiteColor] setFill]; UIRectFill(CGRectInfinite); CGContextRef gc = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(gc, size.width / 2, size.height / 2); CGContextRotateCTM(gc, radians); CGContextTranslateCTM(gc, size.width / 4, 0); [[UIColor redColor] setFill]; CGFloat w = size.width / 10; CGContextFillEllipseInRect(gc, CGRectMake(-w / 2, -w / 2, w, w)); } UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

अब हम GIF बना सकते हैं सबसे पहले हम फ्रेम की संख्या के लिए एक स्थिरता को परिभाषित करेंगे, क्योंकि हमें दो बार बाद में इसकी ज़रूरत है:

 static void makeAnimatedGif(void) { static NSUInteger const kFrameCount = 16; 

एनिमेशन को दोहराए जाने की संख्या को निर्दिष्ट करने के लिए हमें एक प्रॉपर्टी डिक्शनरी की आवश्यकता होगी:

  NSDictionary *fileProperties = @{ (__bridge id)kCGImagePropertyGIFDictionary: @{ (__bridge id)kCGImagePropertyGIFLoopCount: @0, // 0 means loop forever } }; 

और हमें एक और प्रॉपर्टी डिक्शनरी की आवश्यकता होगी, जिसे हम प्रत्येक फ़्रेम से संलग्न करेंगे, यह निर्दिष्ट करते हुए कि फ़्रेम कितनी देर प्रदर्शित होती है:

  NSDictionary *frameProperties = @{ (__bridge id)kCGImagePropertyGIFDictionary: @{ (__bridge id)kCGImagePropertyGIFDelayTime: @0.02f, // a float (not double!) in seconds, rounded to centiseconds in the GIF data } }; 

हम अपने दस्तावेज़ निर्देशिका में जीआईएफ के लिए एक यूआरएल भी बनायेंगे:

  NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"animated.gif"]; 

अब हम एक CGImageDestination बना सकते हैं जो कि निर्दिष्ट यूआरएल को एक जीआईएफ लिखता है:

  CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypeGIF, kFrameCount, NULL); CGImageDestinationSetProperties(destination, (__bridge CFDictionaryRef)fileProperties); 

मुझे पता चला है कि fileProperties के अंतिम तर्क के रूप में fileProperties पारित fileProperties में काम नहीं कर रहा है। आपको CGImageDestinationSetProperties का उपयोग CGImageDestinationSetProperties

अब हम अपने फ्रेम बना और लिख सकते हैं:

  for (NSUInteger i = 0; i < kFrameCount; i++) { @autoreleasepool { UIImage *image = frameImage(CGSizeMake(300, 300), M_PI * 2 * i / kFrameCount); CGImageDestinationAddImage(destination, image.CGImage, (__bridge CFDictionaryRef)frameProperties); } } 

ध्यान दें कि हम प्रत्येक फ्रेम छवि के साथ फ्रेम गुणों को पास करते हैं

हमने तय किए गए फ्रेम की सटीक संख्या जोड़ दी है, हम गंतव्य को अंतिम रूप देते हैं और इसे जारी करते हैं:

  if (!CGImageDestinationFinalize(destination)) { NSLog(@"failed to finalize image destination"); } CFRelease(destination); NSLog(@"url=%@", fileURL); } 

यदि आप इसे सिम्युलेटर पर चलाते हैं, तो आप डिबग कंसोल से यूआरएल की प्रतिलिपि बना सकते हैं और छवि को देखने के लिए इसे अपने ब्राउजर में पेस्ट कर सकते हैं। यदि आप इसे डिवाइस पर चलाते हैं, तो आप उपकरण से एप्लिकेशन सैंडबॉक्स डाउनलोड करने और छवि को देखने के लिए Xcode ऑर्गनाइजर विंडो का उपयोग कर सकते हैं। या आप iExplorer जैसी एक ऐप का उपयोग कर सकते हैं जिससे आपको सीधे अपने डिवाइस की फाइलसिस्टम ब्राउज़ कर सकते हैं। (यह जेलब्रेकिंग की आवश्यकता नहीं है।)

मैं इसे आईफोन 5 पर चलने वाले अपने आईफोन 5 पर परीक्षण किया, लेकिन मुझे विश्वास है कि कोड को आईओएस 4.0 के रूप में काम करना चाहिए।

मैंने इस कोड में सभी कोड को आसान नकल के लिए रखा है।

यदि आप स्विफ्ट 3 समाधान की तलाश में हैं, तो आप https://github.com/onmyway133/GifMagic पर एक नज़र डाल सकते हैं। इसमें Encoder और Decoder जो जीआईएफ फाइल को इकट्ठा और डिस्मैंबल करता है।

असल में, आपको इन कार्यों के साथ Image IO फ्रेमवर्क का उपयोग करना चाहिए CGImageDestinationCreateWithURL , CGImageDestinationSetProperties , CGImageDestinationAddImage , CGImageDestinationFinalize

स्विफ्ट https://developer.apple.com/library/content/documentation/swift/Conceptual/buildingCocoaApps/WorkingWithCocoaDataTypes.html के साथ भी

एनोटेट किए गए एपीआई से लौटाए गए कोर फाउंडेशन ऑब्जेक्ट स्वचालित रूप से स्विफ्ट में प्रबंधित मेमोरी हैं – आपको सीएफआरटाइन, सीएफआरईलीज या सीएफएयूटीएरियॉयर का इस्तेमाल करने की ज़रूरत नहीं है।

स्विफ्ट 3 के लिए

 import Foundation import UIKit import ImageIO import MobileCoreServices extension UIImage { static func animatedGif(from images: [UIImage]) { let fileProperties: CFDictionary = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]] as CFDictionary let frameProperties: CFDictionary = [kCGImagePropertyGIFDictionary as String: [(kCGImagePropertyGIFDelayTime as String): 1.0]] as CFDictionary let documentsDirectoryURL: URL? = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) let fileURL: URL? = documentsDirectoryURL?.appendingPathComponent("animated.gif") if let url = fileURL as CFURL? { if let destination = CGImageDestinationCreateWithURL(url, kUTTypeGIF, images.count, nil) { CGImageDestinationSetProperties(destination, fileProperties) for image in images { if let cgImage = image.cgImage { CGImageDestinationAddImage(destination, cgImage, frameProperties) } } if !CGImageDestinationFinalize(destination) { print("Failed to finalize the image destination") } print("Url = \(fileURL)") } } } } 

मैंने इसे ऊपर के उत्तर से बदल दिया है मुझे उम्मीद है यह मदद करेगा।

एक सार के रूप में उपलब्ध है

संपादकों का स्वागत किया जाता है