Làm cách nào để lưu hình ảnh vào cuộn camera?


126

Tôi chưa quen với Xcode (sử dụng 4.3) và không biết cách lưu hình ảnh vào cuộn camera của thiết bị. Tất cả những gì tôi đã làm cho đến nay là thiết lập IBAction cho nút để lưu hình ảnh. Tôi có thể sử dụng phương pháp hoặc chức năng thư viện nào để lưu hình ảnh vào cuộn camera của người dùng?

Câu trả lời:


238

Bạn sử dụng UIImageWriteToSavedPhotosAlbum()chức năng.

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

Biên tập:

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

    UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);
}

Giả sử tôi có '- (IBAction) trênClickSavePhoto: (id) người gửi;' trong tệp ViewControll.h của tôi, sử dụng những gì bạn có ở trên, chính xác những gì tôi cần đặt trong tệp ViewControll.m? Cảm ơn một lần nữa rất nhiều!
dùng1470914

1
@ user1470914 Xem chỉnh sửa của tôi. Ngoài ra, bạn lấy hình ảnh ở đâu để lưu vào camera? Nó đã có trong gói ứng dụng của bạn chưa, hoặc người dùng có chụp ảnh và sau đó bạn lưu nó vào cuộn camera không?
pasawaya

Cảm ơn sự kiên nhẫn của bạn. Tôi chưa có cơ hội để xem xét lại vấn đề này cho đến bây giờ. EDIT của bạn chúng tôi siêu hữu ích. Hình ảnh nằm trong gói ứng dụng. Có một số hình ảnh trong ứng dụng và chúng có thể được xem dưới dạng hình thu nhỏ. Khi một hình thu nhỏ được chọn, nó sẽ chuyển sang chế độ xem mới và có thể xem phiên bản toàn màn hình. Tôi có một nút ở góc bên phải của nút điều hướng trên cùng có nội dung "lưu" và đây là nút mà tôi muốn lưu hình ảnh vào cuộn giấy của thiết bị để có thể áp dụng làm hình nền. Cảm ơn một lần nữa vì sự giúp đỡ và kiên nhẫn của bạn (không chắc tại sao casperOne lại đóng cái này).
dùng1470914

Tôi cũng đã thêm vào UIImageView *imageToBeSaved;tập tin .h của tôi. Tôi nghĩ rằng tôi sẽ phải thêm @synthesize imageToBeSavedvào .m của mình nhưng tôi gặp lỗi "thiếu ngữ cảnh cho khai báo thuộc tính"
user1470914

4
Từ iOS10 trở đi, sử dụng khóa NSPhotoL LibraryUsageDes mô tả trong bản gốc là bắt buộc. Khác khi ứng dụng gặp sự cố.
ASLLOP

56

Đây là câu trả lời cho iOS8 + bằng cách sử dụng khung Ảnh.

Mục tiêu-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);
    }
}];

Nhanh:

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

Đây là một liên kết đến tài liệu của Apple.

Đừng quên thêm khóa / giá trị thích hợp vào thông tin của bạn. Hãy yêu cầu quyền truy cập vào thư viện ảnh:

<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>

2
Làm cách nào để có được url hình ảnh @ricardopereira
Mansuu ....


9

Để tham khảo, bạn có thể lưu video theo cách tương tự:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);

Bạn có thể muốn lưu video để tải lên Instagram, ví dụ:

// 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];
}

4

Lưu hình ảnh trong thư viện ảnh trong Swift 4

Thêm "Quyền riêng tư - Thư viện ảnh bổ sung Mô tả sử dụng" trong info.plist

Sau đó sử dụng mã sau để lưu hình ảnh

UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)

0

Sử dụng asImage () để có được nội dung độc đáo để lưu vào cuộn camera.

Nếu bạn sử dụng asImage (), bạn có thể lưu nhiều thứ thú vị vào cuộn camera chỉ bằng một vài dòng mã! Điều này có thể rất mạnh nếu đối tượng có một số độ trong suốt đã được kết hợp.

asImage () hoạt động với UITextView, WKWebView, UIImageView, UIButton, UISlider, UITableView để đặt tên cho một số đối tượng (nhưng chúng có thể cần hiển thị khi bạn nhận được hình ảnh (có không phải là alpha)). Tôi thậm chí còn sử dụng nó để chụp ốp lát, nhưng nó đã được tải vào UIImageView trong thiết kế của tôi. Tôi nghi ngờ asImage () cũng có thể hoạt động với nhiều loại đối tượng hơn, nhưng tôi chỉ thử những loại tôi đã đề cập.

Nếu đó là UITextView và bạn đặt màu nền thành .clear thì văn bản sẽ được lưu với nền trong suốt. Nếu văn bản của bạn chứa biểu tượng cảm xúc hoặc Memoji, giờ đây bạn có thể đưa những hình ảnh đó vào cuộn camera hoặc vào nội bộ UIImageViews cho ứng dụng của bạn. Có Memoji / Emoji với nền trong suốt trong cuộn camera của bạn, nơi chúng có thể được sử dụng trong bất kỳ ứng dụng nào đều mạnh mẽ.

Các đối tượng khác có thể có một số độ trong suốt nếu bạn cắt hình ảnh thành một vòng tròn hoặc đặt bán kính góc để cắt bớt các góc.

Lưu ý trong mã của tôi, con trỏToTextObjectSelected là một 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.