通过iOS Amazon SDK在S3上缓慢上传图像

通过amazon SDK在s3的多个线程上上传图像需要花费大量时间。让我知道您是否遇到相同的问题并找到任何解决方案。

weiqingtao 回答:通过iOS Amazon SDK在S3上缓慢上传图像

没有您的代码,很难回答这个问题。但是正如您所说的,上载需要很多时间,我认为您的问题在于图像的大小。从iPhone中选取图像时,图像质量很高。其高分辨率和文件大小是上传速度缓慢的原因。因此,在上传到AWS存储桶之前,请根据需要压缩图像并降低分辨率。

当您选择图像时,

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

        let fileManager = FileManager.default
        let documentsPath = fileManager.urls(for: .documentDirectory,in: .userDomainMask).first
        let imagePath = documentsPath?.appendingPathComponent("image.jpg")

        // extract image from the picker and save it
        if let pickedImage = self.scale(image: (info[UIImagePickerController.InfoKey.originalImage] as? UIImage)!,toLessThan: 320) {

            let imageData = pickedImage.jpegData(compressionQuality: 0.5)
            try! imageData!.write(to: imagePath!)

            DispatchQueue.main.async {
                self.imgProfileImageView.image = pickedImage
            }


        }
        picker.dismiss(animated: true) {
        }
    }

您可以使用此功能降低分辨率

private func scale(image originalImage: UIImage,toLessThan maxResolution: CGFloat) -> UIImage? {
    guard let imageReference = originalImage.cgImage else { return nil }

    let rotate90 = CGFloat.pi/2.0 // Radians
    let rotate180 = CGFloat.pi // Radians
    let rotate270 = 3.0*CGFloat.pi/2.0 // Radians

    let originalWidth = CGFloat(imageReference.width)
    let originalHeight = CGFloat(imageReference.height)
    let originalOrientation = originalImage.imageOrientation

    var newWidth = originalWidth
    var newHeight = originalHeight

    if originalWidth > maxResolution || originalHeight > maxResolution {
        let aspectRatio: CGFloat = originalWidth / originalHeight
        newWidth = aspectRatio > 1 ? maxResolution : maxResolution * aspectRatio
        newHeight = aspectRatio > 1 ? maxResolution / aspectRatio : maxResolution
    }

    let scaleRatio: CGFloat = newWidth / originalWidth
    var scale: CGAffineTransform = .init(scaleX: scaleRatio,y: -scaleRatio)
    scale = scale.translatedBy(x: 0.0,y: -originalHeight)

    var rotateAndMirror: CGAffineTransform

    switch originalOrientation {
    case .up:
        rotateAndMirror = .identity

    case .upMirrored:
        rotateAndMirror = .init(translationX: originalWidth,y: 0.0)
        rotateAndMirror = rotateAndMirror.scaledBy(x: -1.0,y: 1.0)

    case .down:
        rotateAndMirror = .init(translationX: originalWidth,y: originalHeight)
        rotateAndMirror = rotateAndMirror.rotated(by: rotate180 )

    case .downMirrored:
        rotateAndMirror = .init(translationX: 0.0,y: originalHeight)
        rotateAndMirror = rotateAndMirror.scaledBy(x: 1.0,y: -1.0)

    case .left:
        (newWidth,newHeight) = (newHeight,newWidth)
        rotateAndMirror = .init(translationX: 0.0,y: originalWidth)
        rotateAndMirror = rotateAndMirror.rotated(by: rotate270)
        scale = .init(scaleX: -scaleRatio,y: scaleRatio)
        scale = scale.translatedBy(x: -originalHeight,y: 0.0)

    case .leftMirrored:
        (newWidth,newWidth)
        rotateAndMirror = .init(translationX: originalHeight,y: originalWidth)
        rotateAndMirror = rotateAndMirror.scaledBy(x: -1.0,y: 1.0)
        rotateAndMirror = rotateAndMirror.rotated(by: rotate270)

    case .right:
        (newWidth,y: 0.0)
        rotateAndMirror = rotateAndMirror.rotated(by: rotate90)
        scale = .init(scaleX: -scaleRatio,y: 0.0)

    case .rightMirrored:
        (newWidth,newWidth)
        rotateAndMirror = .init(scaleX: -1.0,y: 1.0)
        rotateAndMirror = rotateAndMirror.rotated(by: CGFloat.pi/2.0)
    }

    UIGraphicsBeginImageContext(CGSize(width: newWidth,height: newHeight))
    guard let context = UIGraphicsGetCurrentContext() else { return nil }
    context.concatenate(scale)
    context.concatenate(rotateAndMirror)
    context.draw(imageReference,in: CGRect(x: 0,y: 0,width: originalWidth,height: originalHeight))
    let copy = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return copy
}
本文链接:https://www.f2er.com/3075706.html

大家都在问