2016-09-19 20 views
0

写真のサイズ変更と圧縮が異常な結果になっています。写真のサイズ変更と圧縮

フォトアルバムから画像を選択すると、画像が圧縮されて細かく調整されます。しかし、私がカメラから渡された画像上でそれを行うと、画像が奇妙に小さくなります(そして、耳にすることができません)。私がテストとして行ったことは、カメラソースまたはフォトアルバムのいずれかから画像を取得するボタンの圧縮とサイズ変更の機能を割り当てることです。以下は私のコードと、コンソール出力は写真をリサイズ画像5004キロバイトサイズの前にフォトアルバム

から選ばれた

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

(3024.0、3024.0)です リサイズ画像1023キロバイトのサイズ(1080.0た後、 1080.0)中品質に

圧縮= 119キロバイト

写真をリサイズ画像4653キロバイトのサイズ(24385.536、24385.536)の前にカメラ

によって渡された

1080リサイズ画像25キロバイトのサイズ(1080.576、1080.576)

圧縮後、培地品質= 4キロバイト

答えて

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 
} 
関連する問題