2016-08-20 5 views
0

UIImagesでサイズ変更、トリミングなどを扱う画像マネージャクラスを構築しています。私はCGContextを使用しています。その理由は、ここに見られるベンチマークのJPEGを使ったUIGraphicsContextに匹敵するスピードです。http://nshipster.com/image-resizing/です。UIImageをCGContextでリサイズすると、画像がソフトになりすぎて、画像がソフトになります。

これは私のマネージャークラスではありません。本当にあまりにもクレイジー

func resizeImage(exportedWidth width: Int, exportedHeight height: Int, originalImage image: UIImage) -> UIImage? { 
    let cgImage = image.CGImage 

    let width = width 
    let height = height 
    let bitsPerComponent = CGImageGetBitsPerComponent(cgImage) 
    let bytesPerRow = CGImageGetBytesPerRow(cgImage) 
    let colorSpace = CGImageGetColorSpace(cgImage) 
    let bitmapInfo = CGImageGetBitmapInfo(cgImage) 

    let context = CGBitmapContextCreate(nil, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue) 

    CGContextSetInterpolationQuality(context, .High) 

    CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(width), height: CGFloat(height))), cgImage) 

    let scaledImage = CGBitmapContextCreateImage(context).flatMap { UIImage(CGImage: $0) } 

    return scaledImage 
} 

何も、私はサブクラス化UITextViewに追加するとき、私は問題を抱えています。私は、画像サイズを倍増させてから、UIImageViewで圧縮して無駄にしてみました。このコードは適切なサイズで正しく表示されていますが、私のiPhone SEの網膜スクリーンの理想的な2:1ではなく、画像のピクセルと画面のピクセルの比率が1:1のように見えます。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     let textViewWidth: CGFloat = self.view.frame.size.width - 130 
     let percentResize = textViewWidth/pickedImage.size.width 
     let toBeExportedHeight = pickedImage.size.height * percentResize 
     let resizedImage = ImageManipulationManager.sharedInstance.resizeImage(exportedWidth: Int(textViewWidth),exportedHeight: Int(toBeExportedHeight), originalImage: pickedImage) 

     let attachment = NSTextAttachment() 
     attachment.image = resizedImage 
     let attString = NSAttributedString(attachment: attachment) 
     textView.textStorage.insertAttributedString(attString, atIndex: textView.selectedRange.location) 
     textInputbar.layoutIfNeeded() 
     textView.becomeFirstResponder() 
     print(textView.text.characters.count) 
    } 
    dismissViewControllerAnimated(true, completion: nil) 
} 

答えて

0

倍解像度の画像の画像は、倍解像度である必要があります。これは、実際のサイズの2倍と2倍の大きさでなければならないことを意味します。scaleは2をCGImageから派生させたときにUIImageに添付されます。

+0

正確には、倍率を2倍に設定します。 bitmapcontextのサイズを実際のイメージの境界の半分の2倍の大きさにしようとしました。しかし、起こったのは、レンダリングが同じサイズで余分なスペースが黒であることでした。 – ggworean

+0

私が答えて言ったように、あなたはCGImageからUIImageを派生させるときにそれを行います。 – matt

+0

コードについてはどうですか?私は何が変わっていく必要があるのか​​分かりません。私はそれが規模だと分かっていますが、私はそれが私を助けてくれることを望みます – ggworean

関連する問題