Jika saya memiliki UIImage
dari imagePicker, bagaimana cara menyimpannya ke subfolder di direktori dokumen?
Jika saya memiliki UIImage
dari imagePicker, bagaimana cara menyimpannya ke subfolder di direktori dokumen?
Jawaban:
Tentu saja Anda dapat membuat subfolder di folder dokumen aplikasi Anda. Anda biasa NSFileManager
melakukan itu.
Anda gunakan UIImagePNGRepresentation
untuk mengubah gambar Anda ke NSData dan menyimpannya ke disk.
// Create path.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];
// Save image.
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
Data Inti tidak ada hubungannya dengan menyimpan gambar ke disk.
Di Swift 3:
// Create path.
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let filePath = "\(paths[0])/MyImageName.png"
// Save image.
UIImagePNGRepresentation(image)?.writeToFile(filePath, atomically: true)
.write() throws
Anda harus membuat representasi gambar Anda sebagai format tertentu (katakanlah, JPEG atau PNG), dan kemudian memanggil writeToFile:atomically:
representasi tersebut:
UIImage *image = ...;
NSString *path = ...;
[UIImageJPEGRepresentation(image, 1.0) writeToFile:path atomically:YES];
Hal di atas berguna, tetapi tidak menjawab pertanyaan Anda tentang cara menyimpan di subdirektori atau mendapatkan gambar dari UIImagePicker.
Pertama, Anda harus menentukan bahwa pengontrol Anda mengimplementasikan delegasi pemilih gambar, baik dalam file kode .m atau .h, seperti:
@interface CameraViewController () <UIImagePickerControllerDelegate>
@end
Kemudian Anda menerapkan metode imagePickerController: didFinishPickingMediaWithInfo: delegasi, di mana Anda bisa mendapatkan foto dari pemilih gambar dan menyimpannya (tentu saja, Anda mungkin memiliki kelas / objek lain yang menangani penyimpanan, tetapi saya hanya akan menunjukkan kodenya di dalam metode):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// get the captured image
UIImage *image = (UIImage *)info[UIImagePickerControllerOriginalImage];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *imageSubdirectory = [documentsDirectory stringByAppendingPathComponent:@"MySubfolderName"];
NSString *filePath = [imageSubdirectory stringByAppendingPathComponent:@"MyImageName.png"];
// Convert UIImage object into NSData (a wrapper for a stream of bytes) formatted according to PNG spec
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:filePath atomically:YES];
}
Jika Anda ingin menyimpan sebagai gambar JPEG, 3 baris terakhir adalah:
NSString *filePath = [imageSubdirectory stringByAppendingPathComponent:@"MyImageName.jpg"];
// Convert UIImage object into NSData (a wrapper for a stream of bytes) formatted according to JPG spec
NSData *imageData = UIImageJPEGRepresentation(image, 0.85f); // quality level 85%
[imageData writeToFile:filePath atomically:YES];
extension UIImage {
/// Save PNG in the Documents directory
func save(_ name: String) {
let path: String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let url = URL(fileURLWithPath: path).appendingPathComponent(name)
try! UIImagePNGRepresentation(self)?.write(to: url)
print("saved image at \(url)")
}
}
// Usage: Saves file in the Documents directory
image.save("climate_model_2017.png")
Pertama, Anda harus mendapatkan direktori Dokumen
/* create path to cache directory inside the application's Documents directory */
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"fileName"];
Maka Anda harus menyimpan foto tersebut ke file
NSData *photoData = UIImageJPEGRepresentation(photoImage, 1);
[photoData writeToFile:filePath atomically:YES];
Di Swift 4.2:
// Create path.
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let filePath = paths.first?.appendingPathComponent("MyImageName.png") {
// Save image.
do {
try image.pngData()?.write(to: filePath, options: .atomic)
} catch {
// Handle the error
}
}
Di Swift 4:
// Create path.
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let filePath = paths.first?.appendingPathComponent("MyImageName.png") {
// Save image.
do {
try UIImagePNGRepresentation(image)?.write(to: filePath, options: .atomic)
}
catch {
// Handle the error
}
}