Làm cách nào để thay đổi kích thước của UIImage để giảm kích thước hình ảnh tải lên


78

Tôi đã tìm kiếm trên google và chỉ bắt gặp các thư viện làm giảm chiều cao / chiều rộng hoặc một số cách chỉnh sửa giao diện UIImage thông qua CoreImage. Nhưng tôi chưa thấy hoặc chưa tìm thấy một thư viện, bài viết giải thích cách giảm dung lượng hình ảnh để khi tải lên, nó không phải là kích thước hình ảnh đầy đủ.

cho đến nay tôi có cái này:

        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")
    }

và nó đang gửi ảnh 12MB. Làm thế nào tôi có thể giảm điều này xuống 1mb? cảm ơn!

Câu trả lời:


191

Xcode 9 • Swift 4 trở lên

chỉnh sửa / cập nhật: Đối với iOS10 + Chúng tôi có thể sử dụng UIGraphicsImageRenderer . Đối với cú pháp Swift cũ hơn, hãy kiểm tra lịch sử chỉnh sửa.

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))
        }
    }
}

Sử dụng:

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)

2
Tuyệt vời, Leo. Cảm ơn.
MolonLabe

2
bạn nên thêm cú pháp nhanh chóng 2 bên dưới. một ai đó sao chép / dán mã của bạn và đã đạt được 9 upvotes .. không xứng đáng nếu bạn hỏi tôi ...
David Seek

7
LeoDabus, tôi nghĩ đây không phải là câu trả lời đúng nhưng là giải pháp rất hay cho các vấn đề khác. Câu hỏi đặt ra ở đây là làm thế nào chúng ta có thể giảm 12MB xuống 1MB không dựa trên tỷ lệ phần trăm cũng như kích thước hình ảnh (chiều rộng hoặc chiều cao) mà dựa trên kích thước tệp. @EBDOKUM có thể có kết quả đó do thực tế là việc giảm kích thước hình ảnh (chiều rộng và chiều cao) không đảm bảo giảm kích thước tệp. Chỉ có kích thước đang được thu nhỏ nhưng kích thước tệp có thể tăng hoặc giảm tùy thuộc vào hình ảnh được sử dụng.
nycdanie 19/12/16

3
@ChrisW. Không nói về photoshop hay công cụ web. Vui lòng đăng câu trả lời của bạn cho câu hỏi hướng dẫn cách nén PNG trong iOS (Swift).
Leo Dabus

3
Bạn nên thêm guard size.width > width else { return self }để hình ảnh nhỏ hơn không bị thay đổi kích thước thành lớn hơn.
vol

70

Đây là cách mà tôi đã làm theo để thay đổi kích thước hình ảnh.

 -(UIImage *)resizeImage:(UIImage *)image
{
   float actualHeight = image.size.height;
   float actualWidth = image.size.width;
   float maxHeight = 300.0;
   float maxWidth = 400.0;
   float imgRatio = actualWidth/actualHeight;
   float maxRatio = maxWidth/maxHeight;
   float compressionQuality = 0.5;//50 percent compression

   if (actualHeight > maxHeight || actualWidth > maxWidth)
   {
    if(imgRatio < maxRatio)
    {
        //adjust width according to maxHeight
        imgRatio = maxHeight / actualHeight;
        actualWidth = imgRatio * actualWidth;
        actualHeight = maxHeight;
    }
    else if(imgRatio > maxRatio)
    {
        //adjust height according to maxWidth
        imgRatio = maxWidth / actualWidth;
        actualHeight = imgRatio * actualHeight;
        actualWidth = maxWidth;
    }
    else
    {
        actualHeight = maxHeight;
        actualWidth = maxWidth;
    }
   }

   CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
   UIGraphicsBeginImageContext(rect.size);
   [image drawInRect:rect];
   UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
   NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality);
   UIGraphicsEndImageContext();

   return [UIImage imageWithData:imageData];

}

Sử dụng phương pháp này, hình ảnh của tôi có 6,5 MB giảm xuống còn 104 KB.

Mã Swift 4:

func resize(_ image: UIImage) -> UIImage {
    var actualHeight = Float(image.size.height)
    var actualWidth = Float(image.size.width)
    let maxHeight: Float = 300.0
    let maxWidth: Float = 400.0
    var imgRatio: Float = actualWidth / actualHeight
    let maxRatio: Float = maxWidth / maxHeight
    let compressionQuality: Float = 0.5
    //50 percent compression
    if actualHeight > maxHeight || actualWidth > maxWidth {
        if imgRatio < maxRatio {
            //adjust width according to maxHeight
            imgRatio = maxHeight / actualHeight
            actualWidth = imgRatio * actualWidth
            actualHeight = maxHeight
        }
        else if imgRatio > maxRatio {
            //adjust height according to maxWidth
            imgRatio = maxWidth / actualWidth
            actualHeight = imgRatio * actualHeight
            actualWidth = maxWidth
        }
        else {
            actualHeight = maxHeight
            actualWidth = maxWidth
        }
    }
    let rect = CGRect(x: 0.0, y: 0.0, width: CGFloat(actualWidth), height: CGFloat(actualHeight))
    UIGraphicsBeginImageContext(rect.size)
    image.draw(in: rect)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    let imageData = img?.jpegData(compressionQuality: CGFloat(compressionQuality)) 
    UIGraphicsEndImageContext()
    return UIImage(data: imageData!) ?? UIImage()
}

những gì về độ phân giải? Tôi muốn đặt chiều rộng tối đa là 1024, nhưng chiều cao sẽ phụ thuộc vào hình ảnh, vì vậy tôi có thể giữ nguyên tỷ lệ khung hình.
Jay,

Ở đây tôi cũng đang nén hình ảnh. Nếu bạn muốn có cùng độ phân giải, hãy chú thích dòng này NSData * imageData = UIImageJPEGRepresentation (img ,ressionQuality); và chúng ta phải chọn maxHeight và maxWidth theo cách sao cho tỷ lệ khung hình phải giống nhau.
user4261201

1
Cách cung cấp chiều rộng và chiều cao min. Vì vậy mà hình ảnh trong không nén dưới kích thước cụ thể
user2185354

SWIFT 4.2 thay đổi dòng này: hãy imageData = UIImageJPEGRepresentation (img !, CGFloat (compressionQuality)) Về điều này: chúng ta hãy imageData = img .jpegData (compressionQuality: CGFloat (compressionQuality))?
ttorbik

30

Trong trường hợp ai đó đang tìm cách thay đổi kích thước hình ảnh thành nhỏ hơn 1MB với Swift 3 và 4 .

Chỉ cần sao chép và dán tiện ích mở rộng này:

extension UIImage {

func resized(withPercentage percentage: CGFloat) -> UIImage? {
    let canvasSize = CGSize(width: size.width * percentage, height: size.height * percentage)
    UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
    defer { UIGraphicsEndImageContext() }
    draw(in: CGRect(origin: .zero, size: canvasSize))
    return UIGraphicsGetImageFromCurrentImageContext()
}

func resizedTo1MB() -> UIImage? {
    guard let imageData = UIImagePNGRepresentation(self) else { return nil }

    var resizingImage = self
    var imageSizeKB = Double(imageData.count) / 1000.0 // ! Or devide for 1024 if you need KB but not kB

    while imageSizeKB > 1000 { // ! Or use 1024 if you need KB but not kB
        guard let resizedImage = resizingImage.resized(withPercentage: 0.9),
            let imageData = UIImagePNGRepresentation(resizedImage)
            else { return nil }

        resizingImage = resizedImage
        imageSizeKB = Double(imageData.count) / 1000.0 // ! Or devide for 1024 if you need KB but not kB
    }

    return resizingImage
}
}

sử dụng:

let resizedImage = originalImage.resizedTo1MB()

Chỉnh sửa: Xin lưu ý rằng nó đang chặn giao diện người dùng , vì vậy hãy chuyển sang chuỗi nền nếu bạn cho rằng đó là cách phù hợp với trường hợp của mình.


Trong whilevòng lặp guard, UIImagePNGRepresentationcuộc gọi nên sử dụng resizedImage, không phải resizingImage. Nguyên nhân nó để làm một vòng lặp thêm ...
Mike M

12

giống như Leo Answer nhưng ít chỉnh sửa cho SWIFT 2.0

 extension UIImage {
    func resizeWithPercentage(percentage: CGFloat) -> UIImage? {
        let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: size.width * percentage, height: size.height * percentage)))
        imageView.contentMode = .ScaleAspectFit
        imageView.image = self
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        imageView.layer.renderInContext(context)
        guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
        UIGraphicsEndImageContext()
        return result
    }

    func resizeWithWidth(width: CGFloat) -> UIImage? {
        let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))))
        imageView.contentMode = .ScaleAspectFit
        imageView.image = self
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        imageView.layer.renderInContext(context)
        guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
        UIGraphicsEndImageContext()
        return result
    }
}

2
bình luận về những gì là sự khác biệt sẽ là tốt đẹp
David Seek

Logic giống nhau nhưng câu trả lời leo dành cho swift 3.0 và những gì tôi làm chỉ đơn giản là viết nó trong swift 2.0.
Jagdeep

5

Đây là câu trả lời của user4261201 nhưng nhanh chóng, tôi hiện đang sử dụng:

func compressImage (_ image: UIImage) -> UIImage {

    let actualHeight:CGFloat = image.size.height
    let actualWidth:CGFloat = image.size.width
    let imgRatio:CGFloat = actualWidth/actualHeight
    let maxWidth:CGFloat = 1024.0
    let resizedHeight:CGFloat = maxWidth/imgRatio
    let compressionQuality:CGFloat = 0.5

    let rect:CGRect = CGRect(x: 0, y: 0, width: maxWidth, height: resizedHeight)
    UIGraphicsBeginImageContext(rect.size)
    image.draw(in: rect)
    let img: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    let imageData:Data = UIImageJPEGRepresentation(img, compressionQuality)!
    UIGraphicsEndImageContext()

    return UIImage(data: imageData)!

}

1
Việc chuyển đổi UIImage thành dữ liệu và quay lại UIImage là vô nghĩa. Btw, bạn đang làm giảm chất lượng hình ảnh khi nén nó.
Leo Dabus

1
@LeoDabus cảm ơn bạn về cái nhìn sâu sắc đó, tôi sẽ chọn câu trả lời của bạn là câu trả lời chính xác!
Jay,


3

Tôi không hài lòng với các giải pháp ở đây, tạo ra hình ảnh dựa trên kích thước KB nhất định, vì hầu hết chúng đều được sử dụng .jpegData(compressionQuality: x). Phương pháp này sẽ không hoạt động với hình ảnh lớn, vì ngay cả với chất lượng nén được đặt thành 0,0, hình ảnh lớn sẽ vẫn lớn, ví dụ: 10 MB được tạo ra bởi chế độ dọc của iPhone mới hơn vẫn sẽ trên 1 MB với chất lượng nén được đặt thành 0,0.

Do đó, tôi đã sử dụng câu trả lời của @Leo Dabus và viết lại nó thành Cấu trúc trợ giúp chuyển đổi hình ảnh trong hàng đợi nền:

import UIKit

struct ImageResizer {
    static func resize(image: UIImage, maxByte: Int, completion: @escaping (UIImage?) -> ()) {
        DispatchQueue.global(qos: .userInitiated).async {
            guard let currentImageSize = image.jpegData(compressionQuality: 1.0)?.count else { return completion(nil) }
            
            var imageSize = currentImageSize
            var percentage: CGFloat = 1.0
            var generatedImage: UIImage? = image
            let percantageDecrease: CGFloat = imageSize < 10000000 ? 0.1 : 0.3
            
            while imageSize > maxByte && percentage > 0.01 {
                let canvas = CGSize(width: image.size.width * percentage,
                                    height: image.size.height * percentage)
                let format = image.imageRendererFormat
                format.opaque = true
                generatedImage = UIGraphicsImageRenderer(size: canvas, format: format).image {
                    _ in image.draw(in: CGRect(origin: .zero, size: canvas))
                }
                guard let generatedImageSize = generatedImage?.jpegData(compressionQuality: 1.0)?.count else { return completion(nil) }
                imageSize = generatedImageSize
                percentage -= percantageDecrease
            }
            
            completion(generatedImage)
        }
    }
}

Sử dụng:

        ImageResizer.resize(image: image, maxByte: 800000) { img in
            guard let resizedImage = img else { return }
            // Use resizedImage
        }
    }

3
Ước gì tôi có thể ủng hộ điều này 100 lần. Câu trả lời thực sự folks.
wxcoder

2

Nếu bạn đang tải lên hình ảnh ở NSDatađịnh dạng, hãy sử dụng:

NSData *imageData = UIImageJPEGRepresentation(yourImage, floatValue);

yourImagelà của bạn UIImage. floatvaluelà giá trị nén (0,0 đến 1,0)

Ở trên là để chuyển đổi hình ảnh sang JPEG.

Để PNGsử dụng:UIImagePNGRepresentation

Lưu ý: Đoạn mã trên nằm trong Objective-C. Vui lòng kiểm tra cách xác định NSData trong Swift.


nếu tôi lo lắng về độ phân giải, làm cách nào để đặt chiều rộng tối đa, nhưng để chiều cao được xác định bởi chính hình ảnh?
Jay

2
UIImagePNGRepresentation không có tùy chọn nén.
Alec.

1

Sử dụng điều này, bạn có thể kiểm soát kích thước mà bạn muốn:

func jpegImage(image: UIImage, maxSize: Int, minSize: Int, times: Int) -> Data? {
    var maxQuality: CGFloat = 1.0
    var minQuality: CGFloat = 0.0
    var bestData: Data?
    for _ in 1...times {
        let thisQuality = (maxQuality + minQuality) / 2
        guard let data = image.jpegData(compressionQuality: thisQuality) else { return nil }
        let thisSize = data.count
        if thisSize > maxSize {
            maxQuality = thisQuality
        } else {
            minQuality = thisQuality
            bestData = data
            if thisSize > minSize {
                return bestData
            }
        }
    }
    return bestData
}

Ví dụ về cuộc gọi phương thức:

jpegImage(image: image, maxSize: 500000, minSize: 400000, times: 10)  

Nó sẽ cố gắng lấy tệp giữa kích thước tối đa và tối thiểu là maxSize và minSize, nhưng chỉ thử lần. Nếu nó không thành công trong thời gian đó, nó sẽ trả về nil.


1

Tôi nghĩ rằng cách dễ nhất được cung cấp bởi chính swift để nén hình ảnh thành dữ liệu nén bên dưới là mã trong swift 4.2

let imageData = yourImageTobeCompressed.jpegData(compressionQuality: 0.5)

và bạn có thể gửi imageData này để tải lên máy chủ.


0

Đây là những gì tôi đã làm trong swift 3 để thay đổi kích thước của UIImage. Nó làm giảm kích thước hình ảnh xuống dưới 100kb. Nó hoạt động theo tỷ lệ!

extension UIImage {
    class func scaleImageWithDivisor(img: UIImage, divisor: CGFloat) -> UIImage {
        let size = CGSize(width: img.size.width/divisor, height: img.size.height/divisor)
        UIGraphicsBeginImageContext(size)
        img.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return scaledImage!
    }
}

Sử dụng:

let scaledImage = UIImage.scaleImageWithDivisor(img: capturedImage!, divisor: 3)

0

Dựa trên câu trả lời của Tung Fam. Để thay đổi kích thước thành một kích thước tệp cụ thể. Giống như 0,7 MB, bạn có thể sử dụng mã này.

extension UIImage {

func resize(withPercentage percentage: CGFloat) -> UIImage? {
    var newRect = CGRect(origin: .zero, size: CGSize(width: size.width*percentage, height: size.height*percentage))
    UIGraphicsBeginImageContextWithOptions(newRect.size, true, 1)
    self.draw(in: newRect)
    defer {UIGraphicsEndImageContext()}
    return UIGraphicsGetImageFromCurrentImageContext()
}

func resizeTo(MB: Double) -> UIImage? {
    guard let fileSize = self.pngData()?.count else {return nil}
    let fileSizeInMB = CGFloat(fileSize)/(1024.0*1024.0)//form bytes to MB
    let percentage = 1/fileSizeInMB
    return resize(withPercentage: percentage)
}
}

0

Tương tự trong Objective-C:

giao diện:

@interface UIImage (Resize)

- (UIImage *)resizedWithPercentage:(CGFloat)percentage;
- (UIImage *)resizeTo:(CGFloat)weight isPng:(BOOL)isPng jpegCompressionQuality:(CGFloat)compressionQuality;

@end

thực hiện :

#import "UIImage+Resize.h"

@implementation UIImage (Resize)

- (UIImage *)resizedWithPercentage:(CGFloat)percentage {
    CGSize canvasSize = CGSizeMake(self.size.width * percentage, self.size.height * percentage);
    UIGraphicsBeginImageContextWithOptions(canvasSize, false, self.scale);
    [self drawInRect:CGRectMake(0, 0, canvasSize.width, canvasSize.height)];
    UIImage *sizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return sizedImage;
}

- (UIImage *)resizeTo:(CGFloat)weight isPng:(BOOL)isPng jpegCompressionQuality:(CGFloat)compressionQuality {
    NSData *imageData = isPng ? UIImagePNGRepresentation(self) : UIImageJPEGRepresentation(self, compressionQuality);
    if (imageData && [imageData length] > 0) {
        UIImage *resizingImage = self;
        double imageSizeKB = [imageData length] / weight;

        while (imageSizeKB > weight) {
            UIImage *resizedImage = [resizingImage resizedWithPercentage:0.9];
            imageData = isPng ? UIImagePNGRepresentation(resizedImage) : UIImageJPEGRepresentation(resizedImage, compressionQuality);
            resizingImage = resizedImage;
            imageSizeKB = (double)(imageData.length / weight);
        }

        return resizingImage;
    }
    return nil;
}

Sử dụng :

#import "UIImage+Resize.h"

UIImage *resizedImage = [self.picture resizeTo:2048 isPng:NO jpegCompressionQuality:1.0];

0

Khi tôi cố gắng sử dụng câu trả lời được chấp nhận để thay đổi kích thước hình ảnh để sử dụng trong dự án của mình, nó xuất hiện rất nhiều pixel và mờ. Tôi đã kết thúc với đoạn mã này để thay đổi kích thước hình ảnh mà không thêm pixel hoặc mờ:

func scale(withPercentage percentage: CGFloat)-> UIImage? {
        let cgSize = CGSize(width: size.width * percentage, height: size.height * percentage)

        let hasAlpha = true
        let scale: CGFloat = 0.0 // Use scale factor of main screen

        UIGraphicsBeginImageContextWithOptions(cgSize, !hasAlpha, scale)
        self.draw(in: CGRect(origin: CGPoint.zero, size: cgSize))

        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        return scaledImage
    }

0
extension UIImage {
func resized(toValue value: CGFloat) -> UIImage {
    if size.width > size.height {
        return self.resize(toWidth: value)!
    } else {
        return self.resize(toHeight: value)!
    }
}

0

Tôi nghĩ cốt lõi của câu hỏi ở đây là làm thế nào để thu nhỏ dữ liệu của UIImage một cách đáng tin cậy đến một kích thước nhất định trước khi tải lên máy chủ, thay vì chỉ thu nhỏ chính UIImage.

Việc sử dụng func jpegData(compressionQuality: CGFloat) -> Data?hoạt động tốt nếu bạn không cần nén đến một kích thước cụ thể. Tuy nhiên, đối với một số trường hợp nhất định, tôi thấy rất hữu ích khi có thể nén xuống dưới một kích thước tệp được chỉ định nhất định. Trong trường hợp đó, jpegDatalà không đáng tin cậy và việc nén lặp đi lặp lại một hình ảnh theo cách này dẫn đến việc giảm kích thước tệp (và có thể thực sự tốn kém). Thay vào đó, tôi muốn giảm kích thước của chính UIImage như trong câu trả lời của Leo , sau đó chuyển đổi sang jpegData và kiểm tra lặp đi lặp lại để xem kích thước giảm có nằm dưới giá trị tôi đã chọn (trong một lề mà tôi đã đặt) hay không. Tôi điều chỉnh hệ số bước nén dựa trên tỷ lệ của kích thước tệp hiện tại với kích thước tệp mong muốn để tăng tốc độ lặp lại đầu tiên là đắt nhất (vì kích thước tệp là lớn nhất tại thời điểm đó).

Swift 5

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 compress(to kb: Int, allowedMargin: CGFloat = 0.2) -> Data {
        guard kb > 10 else { return Data() } // Prevents user from compressing below a limit (10kb in this case).
        let bytes = kb * 1024
        var compression: CGFloat = 1.0
        let step: CGFloat = 0.05
        var holderImage = self
        var complete = false
        while(!complete) {
            guard let data = holderImage.jpegData(compressionQuality: 1.0) else { break }
            let ratio = data.count / bytes
            if data.count < Int(CGFloat(bytes) * (1 + allowedMargin)) {
                complete = true
                return data
            } else {
                let multiplier:CGFloat = CGFloat((ratio / 5) + 1)
                compression -= (step * multiplier)
            }
            guard let newImage = holderImage.resized(withPercentage: compression) else { break }
            holderImage = newImage
        }
        
        return Data()
    }
}
 

Và cách sử dụng:

let data = image.compress(to: 1000)

Tuy nhiên, bạn đang trả về một Dữ liệu trống. Tôi cho rằng bạn có nghĩa là return data?
Bawenang Rukmoko Pardian Putra

@BawenangRukmokoPardianPutra Hàm này không được gọi, nó chỉ thỏa mãn kiểu trả về của hàm. Dữ liệu được trả về trong câu lệnh if của vòng lặp while. Tôi có lẽ nên cấu trúc lại câu trả lời để ném hoặc sử dụng tùy chọn, nhưng đã đơn giản hóa cách sử dụng. Tôi cũng nên thêm một câu lệnh bảo vệ để không cho phép nén xuống các giá trị nhỏ không thực tế.
Sắt John Bonney

Đã thêm câu lệnh bảo vệ để ngăn compress to 0trường hợp và giới hạn nén ở một giá trị hợp lý (10kb trong ví dụ này).
Iron John Bonney

À đúng rồi, tệ thật. Tôi thấy nó bây giờ.
Bawenang Rukmoko Pardian Putra

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.