在我的應用程序中,我必須以Base64字符串的形式將UIImage上載到服務器,條件是字符串不得超過54999個字符。縮小UIImage以適應最大Base64長度
我目前使用一般的作品,但它有時甚至是一個因素需要大量的時間,內存和上傳的圖片Base64編碼字符串,通常是54999.非常關閉的長度碼10
var imageData = UIImagePNGRepresentation(image)
var base64String = imageData.base64EncodedStringWithOptions(.allZeros)
var scaledImage: UIImage = image
var newSize: CGSize = image.size
while ((base64String as NSString).length > 54999)
{
newSize.width *= 0.5
newSize.height *= 0.5
scaledImage = image.imageScaledToFitSize(newSize)
imageData = UIImagePNGRepresentation(scaledImage)
base64String = imageData.base64EncodedStringWithOptions(.allZeros)
}
// proceed to upload Base64 string...
在開始的時候我以爲我會這樣下面的方式,但是這顯然是因爲有文件的大小和它的Base64編碼長度之間不存在線性相關性並沒有在所有的工作:
let maxLength: NSInteger = 54999
if ((base64String as NSString).length > maxLength)
{
let downScaleFactor: CGFloat = CGFloat(maxLength)/CGFloat((base64String as NSString).length)
var size: CGSize = image.size
size.width *= downScaleFactor
size.height *= downScaleFactor
scaledImage = image.imageScaledToFitSize(size)
imageData = UIImagePNGRepresentation(scaledImage)
base64String = imageData.base64EncodedStringWithOptions(.allZeros)
}
必須有一個更好的辦法做這個。