IOS使用名称保存图像

时间:2016-03-04 12:34:33

标签: ios swift image file save

我有一个应用程序拍摄照片并将其与另一个图像合并。我希望能够显示在应用程序中拍摄的图像(并且只显示我的应用程序)并在图库视图中显示它们。我遇到的问题是为图像命名。

我尝试了很多不同的方法

首次尝试

UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil)

这保存了图像,但我不知道如何检索它

第二次尝试

PHPhotoLibrary.sharedPhotoLibrary().performChanges({
    let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(newImage)

    }, completionHandler: { (success, error) -> Void in
        if success {
            //image saved to photos library.
            print("image saved")
        }
});

与首次尝试相同的问题

第三次尝试

let date :NSDate = NSDate()

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'_'HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "GMT")

let imageName = "\(dateFormatter.stringFromDate(date)).jpg"

//var paths: [AnyObject] = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true)
var documentsDirectoryPath = getDocumentsURL().relativePath
documentsDirectoryPath! += imageName

let settingsData: NSData = UIImageJPEGRepresentation(newImage, 1.0)!
settingsData.writeToFile(documentsDirectoryPath!, atomically: true)

这似乎是最有希望但文件可以保存机器人

我已经在这里查看了各种答案,但我仍然无法确定解决方案

2 个答案:

答案 0 :(得分:4)

添加斜杠作为imageName字符串的第一个字符,如下所示:

let imageName = "/\(dateFormatter.stringFromDate(date)).jpg"

否则路径将是" .... / Documentsmyimagename"但它应该是" .... / Documents / myimagename" 即没有附加斜线,图像将保存到上面的文件夹中" Documents"

我还建议不要在文件名中使用冒号字符,在mac上不允许使用冒号并自动替换冒号。

这是我在一个新的XCode项目中测试过的代码,对我有用(我把一个文件" myimage.png"放在项目的根文件夹中):

let newImage = UIImage.init(named: "myimage")


        let date :NSDate = NSDate()

        let dateFormatter = NSDateFormatter()
        //dateFormatter.dateFormat = "yyyy-MM-dd'_'HH:mm:ss"
        dateFormatter.dateFormat = "yyyy-MM-dd'_'HH_mm_ss"

        dateFormatter.timeZone = NSTimeZone(name: "GMT")

        let imageName = "/\(dateFormatter.stringFromDate(date)).jpg"
        print(imageName)
        //var paths: [AnyObject] = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true)
        //var documentsDirectoryPath = getDocumentsURL().relativePath
        var documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 
        documentsDirectoryPath += imageName
        print(documentsDirectoryPath)

        let settingsData: NSData = UIImageJPEGRepresentation(newImage!, 1.0)!
        settingsData.writeToFile(documentsDirectoryPath, atomically: true)

答案 1 :(得分:1)

SWIFT 3:)

foreach (var type in consumerTypes)
{
    var consumerType = type;
    var queueName = string.Format("{0}_{1}",
        Environment.MachineName, consumerType.ToString());
    cfg.ReceiveEndpoint(host, queueName,
        e =>
        {
            e.Consumer(consumerType, getConsumer);
        });
}