You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在将图片保存到Core Data前调整为75×75像素?

图片存入Core Data前调整尺寸的常规流程及实现方案

常规流程

  • 获取原始图片(来自系统相册或相机)
  • 按目标尺寸(75×75)重绘图片:优先保持图片比例,通过裁剪或缩放适配目标尺寸,避免拉伸变形
  • 将重绘后的图片转换为压缩格式的二进制数据(如JPEG)
  • 将处理后的二进制数据写入Core Data的Binary Data属性

代码实现

1. 给UIImage添加尺寸调整扩展

这个扩展会保持图片比例,裁剪并缩放到目标正方形尺寸:

extension UIImage {
    func resized(to targetSize: CGSize) -> UIImage? {
        let originalSize = self.size
        
        // 计算缩放比例,取较大值保证图片覆盖目标尺寸
        let widthRatio = targetSize.width / originalSize.width
        let heightRatio = targetSize.height / originalSize.height
        let scaleRatio = max(widthRatio, heightRatio)
        
        let scaledImageSize = CGSize(width: originalSize.width * scaleRatio, height: originalSize.height * scaleRatio)
        
        // 使用图形渲染器绘制调整后的图片
        let renderer = UIGraphicsImageRenderer(size: targetSize)
        return renderer.image { context in
            // 计算偏移量,让图片居中裁剪
            let xOffset = (targetSize.width - scaledImageSize.width) / 2
            let yOffset = (targetSize.height - scaledImageSize.height) / 2
            self.draw(in: CGRect(x: xOffset, y: yOffset, width: scaledImageSize.width, height: scaledImageSize.height))
        }
    }
}

2. 修改保存Core Data的函数

在保存前调用尺寸调整方法,再转换为二进制数据:

func addItem(name: String, image: UIImage?) {
    var imageData: Data?
    if let originalImage = image {
        // 调整图片到75×75像素
        if let resizedImage = originalImage.resized(to: CGSize(width: 75, height: 75)) {
            // 转换为JPEG数据,0.7的压缩质量兼顾画质和体积
            imageData = resizedImage.jpegData(compressionQuality: 0.7)
        }
    }
    
    item.name = name
    item.image = imageData
    self.manager.save()
}

额外优化建议

  • 压缩质量调整:0.7的压缩质量比原代码的0.1画质提升明显,同时因为图片尺寸已缩小,最终文件体积会远小于原始方案
  • 线程处理:如果批量处理图片,建议将尺寸调整逻辑放到后台线程执行,避免阻塞主线程导致界面卡顿
  • Core Data属性配置:给image的Binary Data属性勾选「Allows External Storage」,当数据超过阈值(默认1MB)时,Core Data会自动将图片存到外部文件,减小数据库本身的体积

内容的提问来源于stack exchange,提问作者fs_tigre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:25:04