Jak Mogę zapisać obraz na rolce aparatu?

Jestem nowy w Xcode (za pomocą 4.3) i nie jestem pewien, jak zapisać obraz na rolce aparatu urządzenia. Wszystko, co zrobiłem do tej pory, to skonfigurowanie IBAction dla przycisku, aby zapisać obraz. Jakiej metody lub funkcji bibliotecznej mogę użyć do zapisania obrazu w rolce aparatu użytkownika?

Author: pasawaya, 2012-06-21

5 answers

Używasz UIImageWriteToSavedPhotosAlbum() Funkcja.

//Let's say the image you want to save is in a UIImage called "imageToBeSaved"
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);

Edit:

//ViewController.m
- (IBAction)onClickSavePhoto:(id)sender{

    UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);
}
 241
Author: pasawaya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-04 22:14:57

Oto odpowiedź dla iOS8 + za pomocą frameworka Zdjęcia.

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:

// 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
    }
})

Oto link do dokumentacji Apple.

Nie zapomnij dodać odpowiedniego klucza / wartości do swoich informacji.plist prosi o pozwolenie na dostęp do biblioteki zdjęć:

<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>
 58
Author: digitalHound,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-27 03:04:22

Dla odniesienia, można zapisać filmy w podobny sposób:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);
Możesz zapisać film, aby przesłać go na Instagram, na przykład:
// 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];
}
 9
Author: Graham Perks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-19 21:32:58

Zapisz obraz w bibliotece zdjęć w Swift 4

Dodaj "Privacy-Photo Library Additions Usage Description" W info.plist

Następnie użyj poniższego kodu, aby zapisać obraz

UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)
 6
Author: Mahesh Chaudhari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Użyj asimage (), aby uzyskać unikalną zawartość do zapisania w rolce aparatu.

Jeśli używasz asimage (), możesz zapisać wiele ciekawych rzeczy na rolce aparatu za pomocą kilku linijek kodu! Może to być bardzo potężne, jeśli obiekt ma już wbudowaną przezroczystość.

Asimage () działa z UITextView, WKWebView, UIImageView, UIButton, UISlider, UITableView, aby nazwać niektóre obiekty (ale mogą one być widoczne, gdy pojawi się obraz (mający niezerową Alfę)). Nawet użyj go do przechwytywania kafelków, ale to jest załadowane do interfejsu UIImageView już w moim projekcie. Podejrzewam, że asimage () może działać również z wieloma innymi typami obiektów, ale próbowałem tylko tych, o których wspomniałem.

Jeśli jest to UITextView i ustawiasz kolor tła na .Wyczyść następnie tekst zostanie zapisany z przezroczystym tłem. Jeśli Tekst zawiera emoji lub Memoji, możesz teraz przenieść te obrazy do rolki aparatu lub do interfejsu UIImageViews wewnątrz aplikacji. Posiadanie Memoji / Emoji z przezroczystym tło w rolce aparatu, gdzie mogą być używane w różnych aplikacjach, jest potężne.

Inne obiekty mogą mieć pewną przezroczystość, jeśli kadrujesz zdjęcie do okręgu lub ustawiasz promień rogu, aby przyciąć rogi.

Uwaga w moim kodzie, pointerToTextObjectSelected to 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)

 0
Author: user3408691,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-04 06:36:40