Bagaimana cara menyimpan gambar ke perpustakaan foto iPhone?
193
Apa yang harus saya lakukan untuk menyimpan gambar yang telah dihasilkan oleh program saya (mungkin dari kamera, mungkin tidak) ke pustaka foto sistem pada iPhone?
UIImageWriteToSavedPhotosAlbum(UIImage*image,
id completionTarget,
SEL completionSelector,void*contextInfo);
Anda hanya perlu completionTarget , completionSelector dan contextInfo jika Anda ingin diberitahu ketika UIImagedilakukan menghemat, jika tidak, anda dapat lulus dalam nil.
Hai terima kasih atas solusi hebat Anda. Di sini saya punya satu keraguan bagaimana kita bisa menghindari duplikat saat menyimpan gambar di perpustakaan foto. Terima kasih sebelumnya.
Apakah ada cara untuk menyimpan metadata sewenang-wenang bersama foto?
zakdances
2
Saya mencoba menyimpan menggunakan ALAssetsLibrary, dibutuhkan waktu yang sama untuk menghemat UIImageWriteToSavedPhotosAlbum.
Hlung
Dan ini membekukan kamera :( Saya kira itu tidak didukung latar belakang?
Hlung
Yang ini jauh lebih bersih b / c Anda bisa menggunakan blok untuk menangani penyelesaian.
jpswain
5
Saya menggunakan kode ini dan saya termasuk kerangka kerja ini #import <AssetsLibrary / AssetsLibrary.h> bukan AVFoundation. Bukankah seharusnya jawabannya diedit? @Denis
Cukup berikan gambar dari array ke sana seperti itu
-(void) saveMePlease {//Loop through the array herefor(int i=0:i<[arrayOfPhotos count]:i++){NSString*file =[arrayOfPhotos objectAtIndex:i];NSString*path =[get the path of the image like you would in DOCS FOLDER or whatever];NSString*imagePath =[path stringByAppendingString:file];UIImage*image =[[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];//Now it will do this for each photo in the arrayUIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);}}
Maaf untuk kesalahan ketik agak hanya melakukan ini dengan cepat tetapi Anda mengerti maksudnya
Menggunakan ini akan melewatkan beberapa foto, saya sudah mencobanya. Cara yang benar untuk itu adalah dengan menggunakan panggilan balik dari pemilih selesai.
SamChen
1
dapatkah kita menyimpan gambar dengan nama khusus?
Pengguna 1531343
Orang tidak boleh menggunakan loop untuk ini. Ini mengarah pada kondisi balapan dan crash.
saurabh
4
Saat menyimpan berbagai foto, jangan gunakan loop untuk, lakukan hal berikut
-(void)saveToAlbum{[self performSelectorInBackground:@selector(startSavingToAlbum) withObject:nil];}-(void)startSavingToAlbum{
currentSavingIndex =0;UIImage* img = arrayOfPhoto[currentSavingIndex];//get your imageUIImageWriteToSavedPhotosAlbum(img,self,@selector(image:didFinishSavingWithError:contextInfo:),nil);}-(void)image:(UIImage*) image didFinishSavingWithError:(NSError*) error contextInfo:(void*) contextInfo{//can also handle error message as well
currentSavingIndex ++;if(currentSavingIndex >= arrayOfPhoto.count){return;//notify the user it's done.}else{UIImage* img = arrayOfPhoto[currentSavingIndex];UIImageWriteToSavedPhotosAlbum(img,self,@selector(image:didFinishSavingWithError:contextInfo:),nil);}}
// Save it to the camera roll / saved photo album// UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image,self,"image:didFinishSavingWithError:contextInfo:",nil)
func image(image:UIImage!, didFinishSavingWithError error:NSError!, contextInfo:AnyObject!){if(error !=nil){// Something wrong happened.}else{// Everything is alright.}}
untuk setiap gambar yang ingin Anda simpan, tambahkan ke NSMutableArray
//in the .h file put:NSMutableArray*myPhotoArray;///then in the .m-(void) viewDidLoad {
myPhotoArray =[[NSMutableArray alloc]init];}//However Your getting images-(void) someOtherMethod {UIImage*someImage =[your prefered method ofusingthis];[myPhotoArray addObject:someImage];}-(void) saveMePlease {//Loop through the array herefor(int i=0:i<[myPhotoArray count]:i++){NSString*file =[myPhotoArray objectAtIndex:i];NSString*path =[get the path of the image like you would in DOCS FOLDER or whatever];NSString*imagePath =[path stringByAppendingString:file];UIImage*image =[[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];//Now it will do this for each photo in the arrayUIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);}}
Jika Anda tidak ingin diberitahu ketika gambar selesai disimpan, maka Anda dapat melewati nol pada parameter completionTarget , completionSelector dan contextInfo .
Yang penting untuk dicatat di sini adalah bahwa metode Anda yang mengamati penyimpanan gambar harus memiliki 3 parameter ini yang lain Anda akan mengalami kesalahan NSInvocation.
Jawaban:
Anda dapat menggunakan fungsi ini:
Anda hanya perlu completionTarget , completionSelector dan contextInfo jika Anda ingin diberitahu ketika
UIImage
dilakukan menghemat, jika tidak, anda dapat lulus dalamnil
.Lihat dokumentasi resmi untuk
UIImageWriteToSavedPhotosAlbum()
.sumber
Sudah usang di iOS 9.0.
Ada jauh lebih cepat daripada UIImageWriteToSavedPhotosAlbum cara untuk melakukannya menggunakan kerangka iOS 4.0+
sumber
ALAssetsLibrary
, dibutuhkan waktu yang sama untuk menghematUIImageWriteToSavedPhotosAlbum
.Cara paling sederhana adalah:
Sebab
Swift
, Anda bisa merujuk ke Menyimpan ke perpustakaan foto iOS menggunakan swiftsumber
Satu hal yang perlu diingat: Jika Anda menggunakan panggilan balik, pastikan pemilih Anda sesuai dengan formulir berikut:
Kalau tidak, Anda akan crash dengan kesalahan seperti berikut ini:
[NSInvocation setArgument:atIndex:]: index (2) out of bounds [-1, 1]
sumber
Cukup berikan gambar dari array ke sana seperti itu
Maaf untuk kesalahan ketik agak hanya melakukan ini dengan cepat tetapi Anda mengerti maksudnya
sumber
Saat menyimpan berbagai foto, jangan gunakan loop untuk, lakukan hal berikut
sumber
Dalam Swift :
sumber
Fungsi di bawah ini akan berfungsi. Anda dapat menyalin dari sini dan menempel di sana ...
sumber
Cepat 4
sumber
jawaban terakhir saya akan melakukannya ..
untuk setiap gambar yang ingin Anda simpan, tambahkan ke NSMutableArray
sumber
sumber
Saya membuat kategori UIImageView untuk ini, berdasarkan pada beberapa jawaban di atas.
File Tajuk:
Penerapan
Sekarang cukup panggil fungsi ini di tampilan gambar Anda:
Secara opsional, Anda dapat mengubah parameter minimumPressDuration.
sumber
Dalam Swift 2.2
Jika Anda tidak ingin diberitahu ketika gambar selesai disimpan, maka Anda dapat melewati nol pada parameter completionTarget , completionSelector dan contextInfo .
Contoh:
Yang penting untuk dicatat di sini adalah bahwa metode Anda yang mengamati penyimpanan gambar harus memiliki 3 parameter ini yang lain Anda akan mengalami kesalahan NSInvocation.
Semoga ini bisa membantu.
sumber
Anda bisa menggunakan ini
sumber