Я пытаюсь отправлять и получать изображения через 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?