2016-09-19 94 views
0

我正在调整照片大小并压缩照片,结果不正常。照片大小调整和压缩

当我从相册中选择图像时,图像压缩并调整大小。但是,如果我在从相机传来的图像上进行拍摄,则图像会变得非常小(并且无法观看)。我所做的测试是在我的按钮中分配一些压缩和调整大小的功能,以从相机源或相册中获取图像。下面是我的代码和控制台输出

@IBAction func testBtnPressed(sender: AnyObject) { 
    let img = selectedImageView.image! 
    print("before resize image \(img.dataLengh_kb)kb size \(img.size)") 

    let resizedImg = img.resizeWithWidth(1080) 
    print("1080 After resize image \(resizedImg!.dataLengh_kb)kb size \(resizedImg!.size)") 

    let compressedImageData = resizedImg!.mediumQualityJPEGNSData 
    print("Compress to medium quality = \(compressedImageData.length/1024)kb") 
} 

extension UIImage { 
    var mediumQualityJPEGNSData: NSData { return UIImageJPEGRepresentation(self, 0.5)! } 

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

在之前调整图像大小5004kb大小从相册

选定的照片(3024.0,3024.0)

1080后调整大小的图像1023kb大小(1080.0, 1080.0)

压缩到中等质量= 119KB

当照片是通过相机

之前调整大小图像4653kb大小(24385.536,24385.536)传递

1080后调整大小图像25KB大小(1080.576,1080.576)

压缩到中等质量= 4KB

回答

0

我已经用下图替换了图片大小调整功能,它效果更好

func resizeImage(newHeight: CGFloat) -> UIImage { 

    let scale = newHeight/self.size.height 
    let newWidth = self.size.width * scale 
    UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight)) 
    self.drawInRect(CGRectMake(0, 0, newWidth, newHeight)) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
}