Android 将图像保存到自定义文件夹

Android 将图像保存到自定义文件夹,android,ios,iphone,swift,titanium,Android,Ios,Iphone,Swift,Titanium,我开发了一个应用程序,可以通过手机摄像头拍照。但现在我需要将图像存储到手机存储器中,并保存到我创建的文件夹中 我试过这个: var filename = Titanium.Filesystem.resourcesDirectory + "/newImageFile.jpg"; var imageFile = Titanium.Filesystem.getFile(filename); imageFile.write(capturedImg); 但它并没有出现在画廊里。如何将图像存储到手机存储器

我开发了一个应用程序,可以通过手机摄像头拍照。但现在我需要将图像存储到手机存储器中,并保存到我创建的文件夹中

我试过这个:

var filename = Titanium.Filesystem.resourcesDirectory + "/newImageFile.jpg";
var imageFile = Titanium.Filesystem.getFile(filename);
imageFile.write(capturedImg);

但它并没有出现在画廊里。如何将图像存储到手机存储器中,以及如何在手机存储器中创建服装文件夹以存储图像?

这将创建相册并保存到此相册中

我想出了这个单例类来处理它:

import Photos

class CustomPhotoAlbum {

static let albumName = "Titanium"
static let sharedInstance = CustomPhotoAlbum()

var assetCollection: PHAssetCollection!

init() {

    func fetchAssetCollectionForAlbum() -> PHAssetCollection! {

        let fetchOptions = PHFetchOptions()
        fetchOptions.predicate = NSPredicate(format: "title = %@", CustomPhotoAlbum.albumName)
        let collection = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)

        if let firstObject: AnyObject = collection.firstObject {
            return collection.firstObject as! PHAssetCollection
        }

        return nil
    }

    if let assetCollection = fetchAssetCollectionForAlbum() {
        self.assetCollection = assetCollection
        return
    }

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({
        PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(CustomPhotoAlbum.albumName)
    }) { success, _ in
        if success {
            self.assetCollection = fetchAssetCollectionForAlbum()
        }
    }
}

func saveImage(image: UIImage) {

    if assetCollection == nil {
        return   // If there was an error upstream, skip the save.
    }

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({
        let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
        let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset
        let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
        albumChangeRequest.addAssets([assetPlaceholder])
    }, completionHandler: nil)
}
}

当您第一次实例化该类时,将创建自定义相册(如果它不存在)。您可以像这样保存图像:

CustomPhotoAlbum.sharedInstance.saveImage(image)

注意:CustomPhotoAlbum类假定应用程序已具有访问照片库的权限。处理权限有点超出了此问题/答案的范围因此请确保PHPhotoLibrary.authorizationStatus()==.authorization,然后再使用它。并在必要时请求授权。

这将创建相册并保存到此相册中

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
            {
            NSData *imageData =  [info objectForKey:UIImagePickerControllerOriginalImage];   
    if(picker.sourceType==UIImagePickerControllerSourceTypeCamera)
      {
      //to save camera roll
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
           [PHAssetChangeRequest creationRequestForAssetFromImage:image];
                                            } completionHandler:nil];
      }

            }
我想出了这个单例类来处理它:

import Photos

class CustomPhotoAlbum {

static let albumName = "Titanium"
static let sharedInstance = CustomPhotoAlbum()

var assetCollection: PHAssetCollection!

init() {

    func fetchAssetCollectionForAlbum() -> PHAssetCollection! {

        let fetchOptions = PHFetchOptions()
        fetchOptions.predicate = NSPredicate(format: "title = %@", CustomPhotoAlbum.albumName)
        let collection = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)

        if let firstObject: AnyObject = collection.firstObject {
            return collection.firstObject as! PHAssetCollection
        }

        return nil
    }

    if let assetCollection = fetchAssetCollectionForAlbum() {
        self.assetCollection = assetCollection
        return
    }

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({
        PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(CustomPhotoAlbum.albumName)
    }) { success, _ in
        if success {
            self.assetCollection = fetchAssetCollectionForAlbum()
        }
    }
}

func saveImage(image: UIImage) {

    if assetCollection == nil {
        return   // If there was an error upstream, skip the save.
    }

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({
        let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
        let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset
        let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
        albumChangeRequest.addAssets([assetPlaceholder])
    }, completionHandler: nil)
}
}

当您第一次实例化该类时,将创建自定义相册(如果它不存在)。您可以像这样保存图像:

CustomPhotoAlbum.sharedInstance.saveImage(image)
注意:CustomPhotoAlbum类假定应用程序已具有访问照片库的权限。处理权限有点超出了此问题/答案的范围因此请确保PHPhotoLibrary.authorizationStatus()==.authorization,然后再使用它。并在必要时请求授权。

-(void)imagePickerController:(UIImagePickerController*)picker已使用信息完成PickingMediaWithInfo:(NSDictionary*)信息
 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
            {
            NSData *imageData =  [info objectForKey:UIImagePickerControllerOriginalImage];   
    if(picker.sourceType==UIImagePickerControllerSourceTypeCamera)
      {
      //to save camera roll
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
           [PHAssetChangeRequest creationRequestForAssetFromImage:image];
                                            } completionHandler:nil];
      }

            }
{ NSData*imageData=[info-objectForKey:UIImagePickerControllerOriginalImage]; if(picker.sourceType==UIImagePickerControllerSourceTypeCamera) { //保存相机卷 [[PHPhotoLibrary sharedPhotoLibrary]性能更改:^{ [PhaseSetChangeRequest creationRequestForAssetFromImage:image]; }completionHandler:nil]; } }
这会将图像保存在您拍摄的相机卷中

-(无效)图像拾取控制器:(UIImagePickerController*)拾取器已完成使用信息的拾取媒体:(NSDictionary*)信息
{
NSData*imageData=[info-objectForKey:UIImagePickerControllerOriginalImage];
if(picker.sourceType==UIImagePickerControllerSourceTypeCamera)
{
//保存相机卷
[[PHPhotoLibrary sharedPhotoLibrary]性能更改:^{
[PhaseSetChangeRequest creationRequestForAssetFromImage:image];
}completionHandler:nil];
}
}
这会将图像保存在您拍摄的相机卷中