1. ホーム
  2. ios

UIImageを縮小して、ぼやけずに、同時に鮮明にする方法は?

2023-09-03 02:32:24

質問

私は画像を縮小する必要がありますが、シャープな方法で縮小する必要があります。たとえば Photoshop では、画像サイズ縮小オプションとして "Bicubic Smoother" (ぼやけた) と "Bicubic Sharper" がありますが、これはどのようなものですか?

この画像ダウンスケール アルゴリズムは、オープンソースまたはどこかに文書化されていますか、あるいは SDK はこれを行う方法を提供していますか?

どのように解決するのですか?

単に imageWithCGImage を使うだけでは十分ではありません。拡大縮小はできますが、拡大縮小にかかわらず、結果はぼやけて最適とは言えません。

エイリアシングを正しく行い、"jaggies" を取り除きたい場合、次のようなものが必要です。 http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/ .

これは、Trevor の解決策に、私の透明な PNG で動作するように 1 つだけ小さな調整を加えたものです。

- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
    CGImageRef imageRef = image.CGImage;

    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Set the quality level to use when rescaling
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height);

    CGContextConcatCTM(context, flipVertical);  
    // Draw into the context; this scales the image
    CGContextDrawImage(context, newRect, imageRef);

    // Get the resized image from the context and a UIImage
    CGImageRef newImageRef = CGBitmapContextCreateImage(context);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    CGImageRelease(newImageRef);
    UIGraphicsEndImageContext();    

    return newImage;
}