mic*_*ica 5 image uiimage swiftui
我使用 AsyncImage() 获取要在视图中显示的图像。
struct Pic: View {
var body: some View {
let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("IMG_5328.jpeg")
AsyncImage(url: url) { image in
image
.resizable()
// if(image.orientation == .right) {
// .rotationEffect(.degrees(90))
// }
.scaledToFit()
} placeholder: {
Color.red
}
}
}
Run Code Online (Sandbox Code Playgroud)
图像文件 (IMG_5328.jpeg) 的方向为 6(逆时针 90 度),但图像未通过自动旋转进行渲染。
我怎样才能获得手动旋转它的方向。
使用 UIImage 会自动完成此操作。
let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("IMG_5328.jpeg")
let imageData = try! Data(contentsOf: url!)
let uiImage = UIImage(data: imageData)!
Run Code Online (Sandbox Code Playgroud)
Eri*_*ila -1
我遇到了同样的问题,但有一些差异,但我认为你可以使用这个解决方案。
\n首先,添加一个扩展来检测图像方向。这不是强制性的,您可以使用局部函数或三元运算符直接进入旋转效果的视图修饰符。
\nimport SwiftUI\n\nextension UIImage {\n\n func getRotationAngle() -> Angle {\n switch imageOrientation {\n case .left:\n return Angle(degrees: 270)\n case .leftMirrored:\n return Angle(degrees: 270)\n case .right:\n return Angle(degrees: 90)\n case .rightMirrored:\n return Angle(degrees: 90)\n case .down:\n return Angle(degrees: 180)\n case .downMirrored:\n return Angle(degrees: 180)\n default:\n return Angle(degrees: 0)\n }\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n然后你需要获取 UIImage。为此,您可以使用此图像选择器,或者您的替代方案也很完美。
\nimport SwiftUI\n\nstruct ImagePicker: UIViewControllerRepresentable {\n\n @Binding var image: UIImage?\n @Binding var imageURL: URL?\n @Environment(\\.presentationMode) var presentationMode\n\n class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {\n let parent: ImagePicker\n\n init(_ parent: ImagePicker) {\n self.parent = parent\n }\n \n func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {\n if let uiImage = info[.originalImage] as? UIImage {\n parent.image = uiImage\n }\n if let imageURL = info[.imageURL] as? URL {\n parent.imageURL = imageURL\n // Alternative\n //let imageData = try! Data(contentsOf: url!)\n //parent.image = UIImage(data: imageData)!\n }\n parent.presentationMode.wrappedValue.dismiss()\n }\n }\n\n func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {\n let picker = UIImagePickerController()\n picker.delegate = context.coordinator\n return picker\n }\n\n func makeCoordinator() -> Coordinator {\n Coordinator(self)\n }\n\n func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {\n\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n这里是实施。
\nimport SwiftUI\n\nstruct ProfileView: View {\n \n @State private var showingImagePicker = Bool()\n @State private var inputImage = UIImage(systemName: "person.crop.circle")\n @State var imageURL: URL? = nil\n \n var body: some View {\n VStack(spacing: 0) {\n Text("Your profile")\n .foregroundColor(.white)\n .font(.custom("VisbyCF-Heavy", size: 24))\n .frame(maxWidth: .infinity, alignment: .leading)\n .padding(.top, 37)\n .padding(.bottom, 33)\n VStack(spacing: 0) { // Picture\n ZStack {\n if #available(iOS 15.0, *) {\n AsyncImage(\n url: imageURL,\n content: { image in\n image\n .resizable()\n .aspectRatio(contentMode: .fill)\n .frame(maxWidth: 105, maxHeight: 105)\n .cornerRadius(53)\n .rotationEffect(inputImage?.getRotationAngle() ?? Angle(degrees: 0))\n }, placeholder: {\n Image(systemName: "person.crop.circle")\n .resizable()\n .aspectRatio(contentMode: .fill)\n .frame(maxWidth: 105, maxHeight: 105)\n .cornerRadius(53)\n }\n )\n }\n ZStack {\n HStack{\n Image(systemName: "pencil.circle")\n .resizable()\n .frame(width: 12, height: 12)\n .padding(5)\n }\n .frame(width: 24, height: 24)\n .background(Color.blue)\n .clipShape(Circle())\n .shadow(radius: 10)\n .onTapGesture {\n self.showingImagePicker = true\n }\n }\n .frame(maxWidth: 105,maxHeight: .infinity, alignment: .bottom)\n .offset(x: 35)\n }\n .frame(width: 105, height: 105)\n .padding(.bottom, 7)\n Text("Change picture")\n .foregroundColor(Color.white)\n .font(.custom("VisbyCF-Heavy", size: 14))\n .padding(.bottom, 32)\n }\n Spacer()\n }\n .padding([.leading, .trailing], 35)\n .navigationBarColor(.clear)\n .navigationBarTitle(Text("Your profile"), displayMode: .inline)\n .sheet(isPresented: $showingImagePicker) {\n ImagePicker(image: $inputImage, imageURL: $imageURL)\n }\n }\n \n}\xc3\x8f\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |