iOS Swift 3图像左转90度
问题描述:
在我的应用程序中,我有一个功能,可以从camera
拍摄照片并将其上传到服务器。我的问题是,当我从服务器获得回应时,图像旋转到90度左侧。这里是我的尝试代码:iOS Swift 3图像左转90度
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
self.PickerFrom = self.PickerFrom2
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
{
self.AttachmentImageView.image = pickedImage
}
dismiss(animated: true, completion: nil)
uploadGalleryImage(image: self.AttachmentImageView.image!)
}
func uploadGalleryImage(image:UIImage)
{
let imageData: NSData = UIImagePNGRepresentation(image)! as NSData
let base64String = imageData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
self.AttachedDocumentURL = "data:image/png;base64,\(base64String)"
}
AttachedDocumentURL
包含base64sting捕获的图像。
答
试试这个(重置您的图像方向),您的服务器
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
self.PickerFrom = self.PickerFrom2
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
{
self.AttachmentImageView.image = pickedImage
}
dismiss(animated: true, completion: nil)
if let updatedImage = self.AttachmentImageView.image?.updateImageOrientionUpSide() {
uploadGalleryImage(image: updatedImage)
} else {
uploadGalleryImage(image: self.AttachmentImageView.image!)
}
}
func uploadGalleryImage(image:UIImage)
{
let imageData: NSData = UIImagePNGRepresentation(image)! as NSData
let base64String = imageData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
self.AttachedDocumentURL = "data:image/png;base64,\(base64String)"
}
// Image extension
extension UIImage {
func updateImageOrientionUpSide() -> UIImage? {
if self.imageOrientation == .up {
return self
}
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
if let normalizedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext() {
UIGraphicsEndImageContext()
return normalizedImage
}
UIGraphicsEndImageContext()
return nil
}
}
答
使用上传这个共同的功能从任何修复上攻形象定位之前。
extension UIImage {
func fixImageOrientation() -> UIImage? {
if (self.imageOrientation == .up) {
return self
}
var transform: CGAffineTransform = CGAffineTransform.identity
if (self.imageOrientation == .left || self.imageOrientation == .leftMirrored) {
transform = transform.translatedBy(x: self.size.width, y: 0)
transform = transform.rotated(by: CGFloat(Double.pi/2.0))
} else if (self.imageOrientation == .right || self.imageOrientation == .rightMirrored) {
transform = transform.translatedBy(x: 0, y: self.size.height);
transform = transform.rotated(by: CGFloat(-Double.pi/2.0));
} else if (self.imageOrientation == .down || self.imageOrientation == .downMirrored) {
transform = transform.translatedBy(x: self.size.width, y: self.size.height)
transform = transform.rotated(by: CGFloat(Double.pi))
} else if (self.imageOrientation == .upMirrored || self.imageOrientation == .downMirrored) {
transform = transform.translatedBy(x: self.size.width, y: 0)
transform = transform.scaledBy(x: -1, y: 1)
} else if (self.imageOrientation == .leftMirrored || self.imageOrientation == .rightMirrored) {
transform = transform.translatedBy(x: self.size.height, y: 0);
transform = transform.scaledBy(x: -1, y: 1);
}
if let context: CGContext = CGContext(data: nil, width: Int(self.size.width), height: Int(self.size.height),
bitsPerComponent: self.cgImage!.bitsPerComponent, bytesPerRow: 0,
space: self.cgImage!.colorSpace!,
bitmapInfo: self.cgImage!.bitmapInfo.rawValue) {
context.concatenate(transform)
if (self.imageOrientation == UIImageOrientation.left ||
self.imageOrientation == UIImageOrientation.leftMirrored ||
self.imageOrientation == UIImageOrientation.right ||
self.imageOrientation == UIImageOrientation.rightMirrored) {
context.draw(self.cgImage!, in: CGRect(x: 0,y: 0,width: self.size.height,height: self.size.width))
} else {
context.draw(self.cgImage!, in: CGRect(x: 0,y: 0,width: self.size.width,height: self.size.height))
}
if let contextImage = context.makeImage() {
return UIImage(cgImage: contextImage)
}
}
return nil
}
}
图像如何保存在服务器上,其存储的在90度或保存在正常 –
当u拿手机的摄像头,该图像具有方向属性本身。因此,请按照该方向检查并旋转并发送到服务器。很多可用的网络代码都可以自己编写。 – Ammaiappan
你可以在这里查看我的答案https://*.com/questions/45157225/want-fixed-orientation-but-the-uiimage-autoratate/45157920#45157920 – luckyShubhra