Скачать массив изображений в виде байтового массива и преобразовать в изображения - PullRequest
0 голосов
/ 13 июня 2018
 for i in 0..<array.count
    {
        let escapedString = array[i].addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
        var c = ""
        DispatchQueue.main.async {
            Alamofire.request("url&mfileName=\(escapedString!)").responseJSON { response in
                switch response.result{
                case .success(let data) :
                    let json = JSON(data)
                    c = json["imageBase64"].stringValue
                    if let decodedData = Data(base64Encoded: c , options: .ignoreUnknownCharacters) {
                        let image = UIImage(data: decodedData)!
                        //self.docimages.append(image!)
                        self.docimages.append(image)
                    }
                    break

                case .failure(let error) :
                    print(error)
                    break
                }
            }
        }
    }

У меня есть массив путей к изображениям.Я должен сделать вызов API, чтобы получить массив байтов каждого изображения.После получения массива я должен добавить его в массив изображений.

Проблема в том, что изображения загружаются не в том же порядке, что и исходный массив.Есть ли способ загрузить изображения в том же порядке, что и исходный массив?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Да Вы можете загрузить изображения в том же порядке, используя следующий метод

//Declare the Variables Globally
var imageDownloadArrayString = [String]() 
var imageDownloadArray = [UIImage]()
var imageUrl : [URL] = []

// Put the your image path
for imageUrls in imagePathArray {  // put your image path array
  //self.imageDownloadArrayString.append(imageUrls)  // imagePathArray in String
  self.imageUrl.append((URL(string:imageUrls)! as NSURL) as URL)
}

//Download the images

DispatchQueue.main.async(execute: {
 for url in self.imageUrl {
    let image = try! UIImage(data: Data(contentsOf: url))
    self.imageDownloadArray.append(image!) 
  }
}

Этот imageDownloadArray содержит порядок изображений.Есть сомнения, пожалуйста, спросите меня?Этот код работает для меня!

0 голосов
/ 13 июня 2018

вы можете использовать OperationQueue с AsyncBlockOperation , чтобы заставить каждое изображение конкурировать до того, как начнется загрузка другого, проверьте изображение

enter image description here

Пример

     let queue = OperationQueue()

        queue.maxConcurrentOperationCount = 1
        downloadImage(path: "path1")
        downloadImage(path: "path2")
        downloadImage(path: "path3")
        downloadImage(path: "path4")
        downloadImage(path: "path5")

func downloadImage(path:String){

    queue.addOperationWithAsyncBlock { op in

        Alamofire.request(path).responseJSON { response in
            switch response.result{
            case .success(let data) :
                let json = JSON(data)
                c = json["imageBase64"].stringValue
                if let decodedData = Data(base64Encoded: c , options: .ignoreUnknownCharacters) {
                    let image = UIImage(data: decodedData)!
                    //self.docimages.append(image!)
                    self.docimages.append(image)
                    op.complete()

                }
                break

            case .failure(let error) :
                print(error)
                break
            }
        }

    }
}
0 голосов
/ 13 июня 2018

Да, Вы можете.Есть несколько способов сделать это.Но здесь я объясню вам самый простой способ.

Здесь вы делаете ошибку.Вам нужно создать Custom Class, как показано ниже.

STEP: 1

class ImageHolder {
   var index : Int
   var imagePath : String
   var image : UIImage?
   init(index : Int, imagePath : String){
      self.index = index
      self.imagePath = imagePath
   }
}

STEP: 2 Теперь, используя цикл for,у вас будет объект класса с Index & ImagePath , в котором он находится.

STEP: 3 Последний шаг, вам просто нужно назначитьUIImage, недавно загруженный в этот объект класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...