我需要缩小图像的比例,但要以一种清晰的方式.例如,在Photoshop中有图像大小缩小选项"双三次平滑"(模糊)和"双三次锐化".

这个图像缩小算法是开源的还是有文档记录的,或者SDK提供了这样做的方法吗?

推荐答案

仅仅使用imageWithCGImage是不够的.它会进行zoom ,但无论是放大还是缩小,结果都会模糊且不理想.

如果你想获得正确的别名,摆脱"锯齿",你需要这样的东西:http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/.

我的工作测试代码如下所示,这是Trevor的解决方案,只做了一个小调整就可以处理我的透明PNG:

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

Ios相关问答推荐

ITMS—91053:Flutter Project中缺少API声明

如何在iOS中以编程方式推送另一个页面?

SwiftUI-工作表不显示导航标题

在Xcode 15中为具有@Binding的视图创建SwiftUI #预览的方法

在 iOS 上启用明文本地流量在 .NET MAUI 中不起作用

如何以编程方式触发 SwiftUI DatePicker?

iOS 16 堆栈视图中按钮的奇怪动画

有没有办法访问自动生成的 Codable 一致性的编码键?

TextField 重复输入 SwiftUI

如何在 SwiftUI 的列表中使用带有 swipeActions 的 NavigationLink

如何让我的 iOS 应用程序与 api 连接?

如何在通用应用程序中同时支持 iPad 和 iPhone 视网膜图形

iOS 中是否有用于自定义振动的 API?

在 UITextView 中垂直居中文本

为所有 UIImageViews 添加圆角

为什么 Xcode 4 不创建任何产品?

Objective-C 将 NSDate 设置为当前 UTC

具有两种不同字体大小的 NSAttributedString 示例?

打开 XIB 文件后 Xcode 6.3 冻结/挂起

openURL:在 iOS 10 中已弃用