1. ホーム
  2. ios

[解決済み] UIImageのサイズを変更して、アップロードする画像のサイズを小さくするにはどうすればよいですか?

2023-05-05 02:14:37

質問

私はグーグルで検索し、高さ/幅を減らすか、CoreImage を介して UIImage の外観を何らかの方法で編集するライブラリにしか出くわしたことがありません。しかし、アップロード時にフル画像サイズではなく、画像サイズを縮小する方法を説明する 1 つのライブラリ、ポストを見たり見つけたりしたことがありません。

今のところ、私はこれを持っています。

        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 またはそれ以降

edit/updateしました。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)