Как отправить изображения по TCP-соединению в Swift? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь отправлять и получать изображения через TCP-сокет в Swift в base64 String.

Отправка:

let compressedImage = nsImage.compressUnderMegaBytes(megabytes: 0.4)

        var data: Data = compressedImage!.tiffRepresentation!
        let bitmap: NSBitmapImageRep = NSBitmapImageRep(data: data)!
        data = bitmap.representation(using: .png, properties: [:])!
        let base64: String = "data:image/png;base64,\(data.base64EncodedString(options:.endLineWithLineFeed))**end"
        socket?.sendMessage(message: base64)

Функция отправки:

func sendMessage(message: String) {
        let data = message.data(using: .ascii)!
        _ = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }
    }

Код получения

private func readAvailableBytes(stream: InputStream) {
       // let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: maxReadLength)
        print("reading incomming data \n\n\n")
        var buffer = [UInt8](repeating: 0, count: maxReadLength)

        while inputStream.hasBytesAvailable {
            let numberOfBytesRead = inputStream.read(&buffer, maxLength: maxReadLength)
            if numberOfBytesRead < 0 {
                break
            }
            if let receivedMsg = String(bytes: buffer[..<numberOfBytesRead], encoding: .ascii) {
                delegate?.scoktDidRecivceNewMessage(message: receivedMsg)
            }
        }
    } 

делегат

func scoktDidRecivceNewMessage(message: String) {
       // print("Recived Command @ cient : \(message)")
        if message.contains("data:image/png;base64,") {
            hasStartedReadingImage = true
            base64ImageFrame = message
        }

        if hasStartedReadingImage {
            if message.contains("**end")
            {
                hasStartedReadingImage = false
                base64ImageFrame.append(message)
                var base64 = base64ImageFrame.replacingOccurrences(of: "data:image/jpeg;base64,", with: "")
                base64 = base64.replacingOccurrences(of: "**end", with: "")

                let nsImage = base64.base64Convert()
                DispatchQueue.main.async {
                    self.imgStremingView.image = nsImage
                }


            }else
            {
               base64ImageFrame.append(message)
            }
        }

    }

Я не могу получить правильный base64 на стороне клиента.если я делаю что-то не так, как лучше всего отправить изображение по TCP?

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