UIImage按比例调整尺寸:指定宽度自动计算高度
解决UIImage指定宽度并保持宽高比的缩放问题
嘿,我看到你正在编写UIImage的扩展来实现图片缩放,刚好遇到了代码拼写错误和逻辑优化的问题,我帮你修正并调整成符合需求的版本——指定目标宽度,自动按原比例计算高度,同时保证缩放后的图片清晰度。
修正并优化后的完整代码
extension UIImage { // 通用缩放方法:传入任意CGSize,按比例适配(修正了原代码的拼写错误) func resize(to newSize: CGSize) -> UIImage? { let originalSize = self.size let widthRatio = newSize.width / originalSize.width let heightRatio = newSize.height / originalSize.height // 取较小的比例,保证图片完整显示在目标尺寸内 let scaleRatio = min(widthRatio, heightRatio) let scaledSize = CGSize(width: originalSize.width * scaleRatio, height: originalSize.height * scaleRatio) // 使用UIGraphicsImageRenderer绘制,适配Retina屏幕 let renderer = UIGraphicsImageRenderer(size: scaledSize) return renderer.image { context in self.draw(in: CGRect(origin: .zero, size: scaledSize)) } } // 便捷方法:仅指定目标宽度,自动按原比例计算高度 func resize(toTargetWidth targetWidth: CGFloat) -> UIImage? { let originalSize = self.size guard originalSize.width > 0 else { return nil } // 计算保持宽高比的目标高度 let scaleRatio = targetWidth / originalSize.width let targetHeight = originalSize.height * scaleRatio return resize(to: CGSize(width: targetWidth, height: targetHeight)) } }
关键说明
- 修正原代码问题:你原代码里的
heig是拼写错误,应该是height,我已经修正了这个问题。 - 适配Retina屏幕:使用
UIGraphicsImageRenderer替代旧的UIGraphicsBeginImageContext,它会自动处理屏幕scale,避免缩放后的图片模糊。 - 便捷方法更贴合需求:新增的
resize(toTargetWidth:)方法直接接收目标宽度,内部自动计算对应高度,完全符合你“指定宽度、保持比例”的需求。 - 安全判断:加入了
originalSize.width > 0的判断,避免除以0的崩溃。
示例用法
// 假设你有一张原始图片 let originalImage = UIImage(named: "yourImage")! // 缩放至宽度200px,高度自动计算 let resizedImage = originalImage.resize(toTargetWidth: 200)
内容的提问来源于stack exchange,提问作者user9472878
相关产品推荐
相关产品推荐

