ฉันเพิ่งเริ่มใช้ Xcode (ใช้ 4.3) และไม่แน่ใจว่าจะบันทึกภาพลงในม้วนฟิล์มของอุปกรณ์ได้อย่างไร สิ่งที่ฉันทำจนถึงตอนนี้คือตั้งค่า IBAction สำหรับปุ่มเพื่อบันทึกภาพ ฉันสามารถใช้วิธีการหรือฟังก์ชันไลบรารีใดในการบันทึกภาพลงในม้วนฟิล์มของผู้ใช้
ฉันเพิ่งเริ่มใช้ Xcode (ใช้ 4.3) และไม่แน่ใจว่าจะบันทึกภาพลงในม้วนฟิล์มของอุปกรณ์ได้อย่างไร สิ่งที่ฉันทำจนถึงตอนนี้คือตั้งค่า IBAction สำหรับปุ่มเพื่อบันทึกภาพ ฉันสามารถใช้วิธีการหรือฟังก์ชันไลบรารีใดในการบันทึกภาพลงในม้วนฟิล์มของผู้ใช้
คำตอบ:
คุณใช้UIImageWriteToSavedPhotosAlbum()
ฟังก์ชัน
//Let's say the image you want to save is in a UIImage called "imageToBeSaved"
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);
แก้ไข:
//ViewController.m
- (IBAction)onClickSavePhoto:(id)sender{
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);
}
UIImageView *imageToBeSaved;
ไฟล์. h ของฉัน ฉันคิดว่าฉันจะต้องเพิ่ม@synthesize imageToBeSaved
ใน. m ของฉัน แต่ฉันได้รับข้อผิดพลาดที่ระบุว่า "ไม่มีบริบทสำหรับการประกาศการนำคุณสมบัติ"
นี่คือคำตอบสำหรับ iOS8 + โดยใช้กรอบรูปถ่าย
Objective-C:
#import <Photos/Photos.h>
UIImage *snapshot = self.myImageView.image;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:snapshot];
changeRequest.creationDate = [NSDate date];
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"successfully saved");
}
else {
NSLog(@"error saving to photos: %@", error);
}
}];
สวิฟท์:
// Swift 4.0
import Photos
let snapshot: UIImage = someImage
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: snapshot)
}, completionHandler: { success, error in
if success {
// Saved successfully!
}
else if let error = error {
// Save photo failed with error
}
else {
// Save photo failed with no error
}
})
นี่คือลิงค์ไปยังเอกสารของ Apple
อย่าลืมใส่คีย์ / ค่าที่เหมาะสมลงใน info.plist ของคุณเพื่อขออนุญาตเข้าถึงคลังรูปภาพ:
<key>NSCameraUsageDescription</key>
<string>Enable camera access to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Enable photo library access to select a photo from your library.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Enable photo library access to save images to your photo library directly from the app.</string>
สำหรับการอ้างอิงคุณสามารถบันทึกวิดีโอในลักษณะเดียวกัน:
UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);
คุณอาจต้องการบันทึกวิดีโอเพื่ออัปโหลดไปยัง Instagram เช่น:
// Save video to camera roll; we can share to Instagram from there.
-(void)didTapShareToInstagram:(id)sender {
UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), (void*)CFBridgingRetain(@{@"caption" : caption}));
}
- (void) video: (NSString *) videoPath
didFinishSavingWithError: (NSError *) error
contextInfo: (void *) contextInfoPtr {
NSDictionary *contextInfo = CFBridgingRelease(contextInfoPtr);
NSString *caption = contextInfo[@"caption"];
NSString *escapedString = [videoPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString
NSString *escapedCaption = [caption stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString
NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@", escapedString, escapedCaption]];
[[UIApplication sharedApplication] openURL:instagramURL];
}
จากนั้นใช้รหัสต่อไปนี้เพื่อบันทึกภาพ
UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)
ใช้ asImage () เพื่อรับเนื้อหาที่ไม่ซ้ำใครเพื่อบันทึกลงในม้วนฟิล์ม
หากคุณใช้ asImage () คุณสามารถบันทึกกิจกรรมสนุก ๆ มากมายลงในม้วนฟิล์มได้ด้วยรหัสเพียงไม่กี่บรรทัด! สิ่งนี้จะมีประสิทธิภาพมากหากวัตถุมีความโปร่งใสรวมอยู่แล้ว
asImage () ทำงานร่วมกับ UITextView, WKWebView, UIImageView, UIButton, UISlider, UITableView เพื่อตั้งชื่อวัตถุบางอย่าง (แต่อาจจำเป็นต้องมองเห็นได้เมื่อคุณได้รับภาพ (มีอัลฟาที่ไม่ใช่ศูนย์)) ฉันใช้มันเพื่อจับภาพไทล์ แต่มันถูกโหลดลงใน UIImageView แล้วในการออกแบบของฉัน ฉันสงสัยว่า asImage () อาจใช้งานได้กับอ็อบเจ็กต์ประเภทอื่น ๆ อีกมากมาย แต่ฉันลองเฉพาะสิ่งที่ฉันพูดถึงเท่านั้น
หากเป็น UITextView และคุณตั้งค่าสีพื้นหลังเป็น. clear ข้อความจะถูกบันทึกด้วยพื้นหลังโปร่งใส หากข้อความของคุณมีอิโมจิหรือ Memoji ตอนนี้คุณสามารถนำภาพเหล่านั้นไปไว้ในม้วนฟิล์มหรือใน UIImageViews ภายในแอป การมี Memoji / Emoji ที่มีพื้นหลังโปร่งใสในม้วนฟิล์มของคุณซึ่งสามารถใช้กับแอปพลิเคชันต่างๆได้อย่างมีประสิทธิภาพ
วัตถุอื่น ๆ อาจมีความโปร่งใสหากคุณครอบตัดรูปภาพเป็นวงกลมหรือกำหนดรัศมีมุมเพื่อตัดมุม
หมายเหตุในรหัสของฉัน pointerToTextObjectSelected คือ UITextView
var pointerToTextObjectSelected = UITextView()
// above populated elsewhere
let thisObject = pointerToTextObjectSelected.asImage()
let imageData = thisObject.pngData()
let imageToSave = UIImage(data: imageData!)
UIImageWriteToSavedPhotosAlbum(imageToSave!, nil, nil, nil)