iOS开发图片旋转压缩教程

1. 整体流程

下面是实现iOS开发中图片旋转压缩的整体流程,以便你可以清晰地了解每个步骤的作用。流程图如下所示:

flowchart TD
    A[开始] --> B[选择图片]
    B[选择图片] --> C[旋转图片]
    C[旋转图片] --> D[压缩图片]
    D[压缩图片] --> E[保存图片]
    E[保存图片] --> F[结束]

2. 具体步骤和代码实现

步骤1:选择图片

首先,你需要创建一个用于选择图片的界面。可以使用UIImagePickerController来实现,并设置其代理为当前视图控制器。下面是代码示例:

// 创建UIImagePickerController实例
let imagePicker = UIImagePickerController()
// 设置代理为当前视图控制器
imagePicker.delegate = self
// 弹出图片选择器
present(imagePicker, animated: true, completion: nil)

步骤2:旋转图片

在选择图片后,你可以根据需求对图片进行旋转。可以使用UIImageimageRotated(byDegrees:)方法来实现,其中参数byDegrees表示旋转的角度。下面是代码示例:

// 获取选择的图片
let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
// 定义旋转角度
let degrees: CGFloat = 90.0
// 调用imageRotated方法旋转图片
let rotatedImage = selectedImage?.imageRotated(byDegrees: degrees)

步骤3:压缩图片

旋转图片后,你可能还需要对图片进行压缩,以减小其文件大小。可以使用UIImagejpegData(compressionQuality:)方法来实现,其中参数compressionQuality表示压缩质量,取值范围为0.0到1.0。下面是代码示例:

// 定义压缩质量
let compressionQuality: CGFloat = 0.5
// 调用jpegData方法压缩图片
if let compressedImageData = rotatedImage?.jpegData(compressionQuality: compressionQuality) {
    // 压缩成功,继续下一步操作
} else {
    // 压缩失败,处理错误情况
}

步骤4:保存图片

完成图片旋转和压缩后,你可以选择将处理后的图片保存到指定位置。可以使用FileManagercreateFile(atPath:contents:attributes:)方法来实现。下面是代码示例:

// 定义保存路径
let imagePath = "Documents/image.jpg"
// 将压缩后的图片数据写入文件
do {
    try compressedImageData.write(toFile: imagePath, options: .atomic)
} catch {
    // 保存失败,处理错误情况
}

3. 完整代码示例

下面是整个流程的完整代码示例,包括上述步骤的实现和相关注释:

import UIKit

class ImageProcessingViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    // 创建UIImagePickerController实例
    let imagePicker = UIImagePickerController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置代理为当前视图控制器
        imagePicker.delegate = self
    }
    
    // 选择图片按钮点击事件
    @IBAction func chooseImageButtonTapped(_ sender: UIButton) {
        // 弹出图片选择器
        present(imagePicker, animated: true, completion: nil)
    }
    
    // 图片选择器代理方法
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        // 获取选择的图片
        let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        // 定义旋转角度
        let degrees: CGFloat = 90.0
        // 调用imageRotated方法旋转图片
        let rotatedImage = selectedImage?.imageRotated(byDegrees: degrees)
        
        // 定义压缩质量
        let compressionQuality: CGFloat = 0.5
        // 调用jpegData方法压缩图片
        if let compressedImageData = rotatedImage?.jpegData(compressionQuality: compressionQuality) {
            // 定义保存路径
            let