【发布时间】:2019-05-25 17:47:35
【问题描述】:
在我的应用程序中,我从用户的照片库中导入选定的照片,并将它们用作缩略图/在UIImageViews 中显示它们。它们被导入并保存到用户的文档文件夹中。
使用的代码如下,但是图像在保存之前会自动旋转,我不知道为什么。
例如,这张图片旋转了 180°:https://imgur.com/a/r2xm0if,其他一些比它们高的更宽的图像也是如此。我不确定为什么,但并非所有图像都像这样旋转。有些旋转了 90°,有些则完全没有。
它们在磁盘上旋转 - 不仅仅是在 UIImageView 中,所以我知道这不是设置问题。
importPicture() 在用户点击“+”按钮时被调用。
@objc func importPicture() {
let picker = UIImagePickerController()
picker.mediaTypes = [kUTTypeMovie as String, kUTTypeImage as String]
picker.allowsEditing = true
picker.delegate = self
present(picker, animated: true)
}
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
// create a name for your image
let addedURL = UUID().uuidString
let fileURL = documentsDirectoryURL.appendingPathComponent("\(addedURL).png")
let videoURL2 = documentsDirectoryURL.appendingPathComponent("\(addedURL).mov")
let mediaType = info[UIImagePickerController.InfoKey.mediaType] as AnyObject
// Movie
if mediaType as! String == kUTTypeMovie as String {
let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as? URL
print("VIDEO URL: \(videoURL!)")
let myVideoVarData = try! Data(contentsOf: videoURL! as URL)
if !FileManager.default.fileExists(atPath: videoURL2.path) {
do {
try myVideoVarData.write(to: videoURL2)
print("Video Added Successfully")
print(videoURL2)
} catch {
print(error)
}
} else {
print("Video not added")
}
photosNew.append("\(addedURL).mov")
collectionView.reloadData()
}
// Image
if mediaType as! String == kUTTypeImage as String {
guard let image = info[.originalImage] as? UIImage else {
return
}
if let imageData = image.pngData() {
if !FileManager.default.fileExists(atPath: fileURL.path) {
do {
try imageData.write(to: fileURL)
print("Image Added Successfully")
print(fileURL)
} catch {
print(error)
}
} else {
print("Image Not Added")
}
}
photosNew.append("\(addedURL).png")
collectionView.reloadData()
}
【问题讨论】:
-
问题是当您将图像保存为 png 时,它会丢弃图像方向。只需保存为 jpeg 而不是 png
-
好的,谢谢。由于压缩/质量问题,我避免使用 jpeg,但可能会在未来的开发中考虑这一点。
-
只使用质量1.0不会有明显的损失
-
@LeoDabus 会试试的,谢谢!
-
欢迎您如果您需要使用 png,您只需要创建一个新的图像上下文,如重复链接中所示stackoverflow.com/questions/42098390/…
标签: ios swift xcode uiimagepickercontroller