2017-10-07 3 views
0

Ich Umwandeln des Bildes I aus der Galerie in seine URL bin Kommissionierung wie so ...Problem mit URL des Bildes in der Galerie bekommen

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 
UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 

let imageURL = info[UIImagePickerControllerReferenceURL] as? NSURL 
let imageName = imageURL?.lastPathComponent 
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! 
let photoURL = NSURL(fileURLWithPath: documentDirectory) 
self.localPath = photoURL.appendingPathComponent(imageName!) 

do { 
    try UIImageJPEGRepresentation(image, 1.0)?.write(to: localPath!) 
    print("File Saved") 
    imageArray.append(image) 

    } catch { //Error } 
    self.collectionView.reloadData() 
    } else { //Error here } 
     self.dismiss(animated: true, completion: nil) 
    } 

Nun, wenn ich 2 Bilder haben, möchte ich weitergeben sie einzeln zu meinem API-Aufruf als Parameter. Das bin ich wie so tun ...

for imgURL in imageArray { 
      let url = "http://myapp.com/vw/images_upload" 
      let headers = [ "Content-Type":"application/x-www-form-urlencoded"] 

    let Parameters = 
       [ 
       "image": imgURL, 
       "seller_id": id 
       ] as [String : Any] 

Alamofire.request(url, method: .post, parameters: Parameters, encoding: URLEncoding.httpBody, headers: headers) 

       .responseJSON { (response) in 
        if let httpResponse = response.response { 
         print("error \(httpResponse.statusCode)") 

         if httpResponse.statusCode == 200 { 
          if let result = response.result.value as? [String:Any] { 
           if result["success"] as! Int == 0 { 
            print("Something went wrong!")  
           } else if result["success"] as! Int == 1 { 
            print("UPLOADED IMAGE SUCCESSFULLY!!") 
           }}}}}} 

Aber in dem Parameter, in imgURL, ich bin nicht immer die URL des Bildes. Oben hatte ich die URL in der localPath. Aber ich kann localPath nicht durchlaufen, da es einen Fehler gibt. Auch in der imageArray übergebe ich das Bild, das nicht im URL-Format ist ... es ist in diesem Format: <UIImage: 0x60800009f9f0> size {4288, 2848} orientation 0 scale 1.000000... Wie das URL-Format in die imageArray übergeben werden kann, die ich nicht verstehen kann Das ist das Problem ..?

Auch wie bekomme ich die URL des Bildes, so dass ich es in den API-Aufruf übergeben kann ...? Bitte helfen Sie ...

+0

'lassen image = info [UIImagePickerControllerOriginalImage] wie? UIImage "gibt dir ein' UIImage' zurück. Dieses Bild wird dann in Ihrem 'imageArray' von' imageArray.append (image) 'gespeichert. Wenn Sie die URLs der Bilder in Ihrem Array speichern möchten, sollten Sie stattdessen imageArray.append (imageURL) verwenden. –

+0

imageArray ist ein Array von UIImage, so dass es den Fehler 'Wert des Typs' NSURL 'in den erwarteten Argumenttyp' UIImage 'konvertieren kann. – bws

+0

Wenn Ihr 'imageArray' der Typ von' [UIImage] 'ist, wie können Sie jedes Element erwarten als URL? Sie müssen ein separates Array für Ihre URLs erstellen, abhängig vom Bild. Und müssen Sie das Bild nicht zuerst auf den Remote-Server hochladen und dann die URL von dort abrufen -> speichern Sie diese URL auf andere Anfrage. – Aks

Antwort

0

Hallo, was ich hier von Ihrer Frage verstehe, ist, dass Sie ein Bild zu einem Bild anzeigen und Sie den Pfad dieses Bildes zu einem API übergeben möchten. Also habe ich eine Funktion geschrieben, um das gleiche mit einer Größenanpassung Fähigkeit zu tun, die Sie nach Ihren Bedürfnissen vermeiden oder ändern können.

So übergeben Sie Ihr Bild von der Bildauswahl und einem Standardnamen String (zB: "image1") und Sie erhalten den Bildpfad/URL im Gegenzug func storeImage (Bild: UIImage, fileName: String) -> String { var resizedImage = Bild

 func storeImage(image:UIImage, fileName:String) -> String { 
    var resizedImage = image 

    if (image.size.width > 200) { 
     let width = 200.0 as CGFloat 
     let height = image.size.height * width/image.size.width 
     resizedImage = image.scaleImage(toSize: CGSize(width: width, height: height))! 
    } 
    else if (image.size.height > 200) { 
     let height = 200.0 as CGFloat 
     let width = image.size.width * height/image.size.height 
     resizedImage = image.scaleImage(toSize: CGSize(width: width, height: height))! 
    } 

    let imageData = NSData(data:UIImagePNGRepresentation(resizedImage)!) 
    let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) 
    let docs: String = paths[0] 
    let fullPath = docs.stringByAppendingPathComponent(path: fileName) 

    _ = imageData.write(toFile: fullPath, atomically: true) 
    return fullPath 
} 
Verwandte Themen