我一直在谷歌上搜索,只找到了一些可以降低高度/宽度或者如何通过CoreImage编辑UIImage外观的库.但我还没有看到或找到一个库,帖子解释如何减小图像大小,以便当它上传时,它不是完整的图像大小.

到目前为止,我有这样的 idea :

        if image != nil {
        //let data = NSData(data: UIImagePNGRepresentation(image))
        let data = UIImagePNGRepresentation(image)
        body.appendString("--\(boundary)\r\n")
        body.appendString("Content-Disposition: form-data; name=\"image\"; filename=\"randomName\"\r\n")
        body.appendString("Content-Type: image/png\r\n\r\n")
        body.appendData(data)
        body.appendString("\r\n")
    }

它正在发送12MB的照片.我怎么才能把这个减到1MB呢?谢谢!

推荐答案

Xcode 9 • Swift 4 or later

编辑/更新:对于iOS10+,我们可以使用UIGraphicsImageRenderer.对于较旧的SWIFT语法,请判断编辑历史记录.

extension UIImage {
    func resized(withPercentage percentage: CGFloat, isOpaque: Bool = true) -> UIImage? {
        let canvas = CGSize(width: size.width * percentage, height: size.height * percentage)
        let format = imageRendererFormat
        format.opaque = isOpaque
        return UIGraphicsImageRenderer(size: canvas, format: format).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))
        }
    }
    func resized(toWidth width: CGFloat, isOpaque: Bool = true) -> UIImage? {
        let canvas = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
        let format = imageRendererFormat
        format.opaque = isOpaque
        return UIGraphicsImageRenderer(size: canvas, format: format).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))
        }
    }
}

用法:

let image = UIImage(data: try! Data(contentsOf: URL(string:"http://i.stack.imgur.com/Xs4RX.jpg")!))!

let thumb1 = image.resized(withPercentage: 0.1)
let thumb2 = image.resized(toWidth: 72.0)

Ios相关问答推荐

带有动画层的UIView表示不会在工作表中设置动画

设置堆栈视图的所有属性

SwiftUI标题/标题文本背景 colored颜色 屏幕宽度

部分保留 UITextField 中的占位符

Flutter动画放大图

为什么这个 init 被分派到一个内部扩展 init?

在 SwiftUI 中,绑定应该放在 ViewModel 中吗?

Swift/iOS:泛型错误:协议需要嵌套类型V;你想添加它吗?

SwiftUI:如何为 ScrollView 制作可拉伸(灵活)的粘性标题?

如何在Collection 后更改并保留按钮 colored颜色 ,然后在 SwiftUI 中切换回来?

如何在不支持并发的自动关闭中修复'async'调用?

JSONDecoder 在模拟器上运行良好时无法在真实设备上解码

在 Swift 中执行 while 循环

如何使用 swift 显示 .svg 图像

向标签栏控制器添加新标签

判断从 JSON 字符串返回的 Objective-C 中的空值

从 UIScrollview 中删除内容和框架布局指南

比较没有时间分量的 NSDates

UINavigationBar - 以编程方式设置标题?

iPhone UITableView.如何开启音乐 App 之类的单字母字母列表?