Bagaimana saya bisa menyimpan gambar ke rol kamera?

126

Saya baru mengenal Xcode (menggunakan 4.3) dan tidak yakin bagaimana cara menyimpan gambar ke rol kamera perangkat. Semua yang telah saya lakukan sejauh ini adalah menyiapkan IBAction untuk tombol untuk menyimpan gambar. Metode atau fungsi perpustakaan apa yang dapat saya gunakan untuk menyimpan gambar ke gulungan kamera pengguna?

pengguna1470914
sumber

Jawaban:

238

Anda menggunakan UIImageWriteToSavedPhotosAlbum()fungsinya.

//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);
}
pasawaya
sumber
Katakanlah saya memiliki '- (IBAction) diClickSavePhoto: (id) pengirim;' dalam file ViewController.h saya, menggunakan apa yang Anda miliki di atas, apa sebenarnya yang harus saya tempatkan dalam file ViewController.m? Sekali lagi terima kasih banyak!
user1470914
1
@ user1470914 Lihat hasil edit saya. Juga, dari mana Anda mendapatkan gambar untuk disimpan ke rol kamera? Apakah sudah ada dalam bundel aplikasi Anda, atau apakah pengguna mengambil gambar dan kemudian Anda menyimpannya ke rol kamera?
pasawaya
Terima kasih atas kesabaran Anda qegal. Saya belum punya kesempatan untuk meninjau kembali masalah ini sampai sekarang. EDIT Anda sangat membantu kami. Gambar ada di bundel aplikasi. Ada beberapa gambar dalam aplikasi dan mereka dapat dilihat sebagai gambar kecil. Ketika thumbnail kecil dipilih, ia pergi ke tampilan baru dan versi layar penuh dapat dilihat. Saya memiliki tombol di sudut kanan nav atas yang bertuliskan "save" dan ini adalah tombol yang saya ingin simpan gambar ke gulungan kamera perangkat sehingga dapat diterapkan sebagai wallpaper. Sekali lagi terima kasih atas bantuan dan kesabaran Anda (tidak yakin mengapa casperOne menutup ini).
user1470914
Saya juga menambahkan UIImageView *imageToBeSaved;ke file .h saya. Saya pikir saya harus menambahkan @synthesize imageToBeSaved.m saya tetapi saya mendapatkan kesalahan yang mengatakan "konteks yang hilang untuk deklarasi implementasi properti"
user1470914
4
Dari iOS10 dan seterusnya, menggunakan kunci NSPhotoLibraryUsageDescription dalam daftar adalah wajib. Selain itu, aplikasi mogok.
ASLLOP
56

Inilah jawaban untuk iOS8 + menggunakan kerangka Foto.

Tujuan-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);
    }
}];

Cepat:

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

Berikut tautan ke dokumentasi Apple.

Jangan lupa untuk menambahkan kunci / nilai yang sesuai ke info.plist Anda untuk meminta izin untuk mengakses perpustakaan foto:

<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>
digitalHound
sumber
2
Bagaimana bisa mendapatkan url gambar @ricardopereira
Mansuu ....
@Mansuu Silakan lihat di stackoverflow.com/a/37248867/3641812
ricardopereira
9

Untuk referensi, Anda dapat menyimpan video dengan cara yang sama:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);

Anda mungkin ingin menyimpan video untuk diunggah ke Instagram, misalnya:

// 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];
}
Graham Perks
sumber
4

Simpan gambar di perpustakaan foto di Swift 4

Tambahkan "Privasi - Deskripsi Penggunaan Tambahan Perpustakaan Foto" di info.plist

Kemudian gunakan kode berikut untuk menyimpan gambar

UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)
Mahesh Chaudhari
sumber
0

Gunakan asImage () untuk mendapatkan konten unik untuk disimpan ke rol kamera.

Jika Anda menggunakan asImage (), Anda dapat menyimpan berbagai hal menyenangkan ke rol kamera hanya dengan beberapa baris kode! Ini bisa sangat kuat jika objek memiliki transparansi yang sudah dimasukkan.

asImage () bekerja dengan UITextView, WKWebView, UIImageView, UIButton, UISlider, UITableView untuk memberi nama beberapa objek (tetapi mereka mungkin harus terlihat ketika Anda mendapatkan gambar (memiliki non alpha nol)). Saya bahkan menggunakannya untuk menangkap ubin, tapi itu sudah dimuat ke dalam UIImageView dalam desain saya. Saya menduga asImage () dapat bekerja dengan lebih banyak tipe objek juga, tetapi saya hanya mencoba yang saya sebutkan.

Jika itu adalah UITextView, dan Anda mengatur warna latar belakang menjadi .clear maka teks akan disimpan dengan latar belakang transparan. Jika teks Anda mengandung emoji atau Memoji, kini Anda dapat memasukkan gambar-gambar itu ke dalam rol kamera, atau ke UIImageViews internal ke aplikasi Anda. Memiliki Memoji / Emoji dengan latar belakang transparan di rol kamera Anda di mana mereka dapat digunakan dalam berbagai aplikasi sangat kuat.

Objek lain mungkin memiliki transparansi jika Anda memotong gambar foto menjadi lingkaran, atau mengatur radius sudut untuk memotong sudut.

Catatan dalam kode saya, pointerToTextObjectSelected adalah 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)
pengguna3408691
sumber