Jestem nowy w Xcode (używając 4.3) i nie jestem pewien, jak zapisać obraz do rolki aparatu urządzenia. Wszystko, co zrobiłem do tej pory, to ustawienie IBAction dla przycisku, aby zapisać obraz. Jaką metodę lub funkcję biblioteki można użyć do zapisania obrazu w rolce aparatu użytkownika?Jak zapisać obraz na rolce z aparatu?
Odpowiedz
Używa się funkcji UIImageWriteToSavedPhotosAlbum()
.
//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);
}
Dla porównania można zapisywać filmy w podobny sposób:
UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);
może chcesz zapisać plik do przesłania 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];
}
Oto odpowiedź f lub iOS8 przy użyciu frameworku 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 3.0
import Photos
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.
Jak uzyskać adres URL obrazu @ricardopereira –
@Mansuu Proszę spojrzeć na https://stackoverflow.com/a/37248867/3641812 – ricardopereira
Załóżmy, że mam "- (IBAction) onClickSavePhoto: (id) sender;" w moim pliku ViewController.h, używając tego, co masz powyżej, co dokładnie powinienem umieścić w pliku ViewController.m? Jeszcze raz dziękuję! – user1470914
@ user1470914 Zobacz moją zmianę. Ponadto, skąd otrzymujesz obraz do zapisania w rolce z aparatu? Czy jest już w pakiecie aplikacji, czy użytkownik robi zdjęcie, a następnie zapisuje je w rolce z aparatu? – pasawaya
Dziękuję za cierpliwość qegal. Nie miałem okazji ponownie powrócić do tego problemu do tej pory. EDIT nas super pomocny. Obraz znajduje się w pakiecie aplikacji. W aplikacji dostępnych jest kilka zdjęć, które można wyświetlić jako małe miniatury. Po wybraniu małej miniatury następuje przejście do nowego widoku i wyświetlenie wersji pełnoekranowej. Mam przycisk w prawym rogu górnego panelu nawigacyjnego, który mówi "zapisz" i jest to przycisk, który chcę zapisać obraz na rolce urządzenia, aby mógł zostać zastosowany jako tapeta. Jeszcze raz dziękuję za pomoc i cierpliwość (nie wiesz, dlaczego casperOne to zamknął). – user1470914