[图像处理]掌握图片本地选取

112 阅读1分钟

PhotosPicker

PhotosPickerItem 类型

loadTransferable 方法

import SwiftUI

import PhotosUI

  


class PhotosPickerViewModel:ObservableObject{

    @Published var selectImage:UIImage? = nil

    @Published var imageSelection:PhotosPickerItem? = nil{

        didSet{

            setImage(from: imageSelection)

        }

    }

    func setImage(from selection:PhotosPickerItem?){

        guard let selection else {**return**}

        Task{

            if let data = try? await selection.loadTransferable(type: Data.self){

                if let uiImage = UIImage(data: data){

                    selectImage = uiImage

                    return

                }

                    

            }

        }

    }

}

  


struct PhotosPickerView: View {

    @StateObject var vm:PhotosPickerViewModel = PhotosPickerViewModel()

   var body: some View {

        VStack {

            Text("Pick Image")

           if let image = vm.selectImage{

                Image(uiImage: image)

                    .resizable()

                    .scaledToFill()

                    .frame(width: 200,height: 200)

                    .cornerRadius(10)

            }

            PhotosPicker(selection: $vm.imageSelection, matching: .images){

                Text("Open the photo library")

                    .foregroundStyle(.red)

            }

        }

        .padding()

        

    }

}

  


struct PhotosPickerView_Previews: PreviewProvider {

    static var previews: some View {

        PhotosPickerView()

    }

}