目前我正在做的是这个......
从 ImagePicker 获取图像并将其转换为 Base64 字符串并将其分配给变量以供以后使用...
注意:我正在压缩我的图像以使其更小并将该代码也放入
var userProfileImage : String = ""
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let capturedImage : UIImage
if let _image = info["UIImagePickerControllerEditedImage"] as? UIImage
{
capturedImage = _image
self.profilePicture.image = _image
let _image_compressed = compressImage(_image)
let imagetosave = UIImageJPEGRepresentation(_image_compressed , 1.0)
let base64encodedImage = imagetosave!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
userProfileImage = base64encodedImage
}
else if let _image = info["UIImagePickerControllerOriginalImage"] as? UIImage
{
capturedImage = _image
let _imageCompressed = compressImage(_image)
let __image = UIImageJPEGRepresentation(_imageCompressed , 1.0)
let base64encodedImage = __image!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue : 0))
userProfileImage = base64encodedImage
self.profilePicture.image = _image
}
else
{
return
}
dismissViewControllerAnimated(true, completion: nil)
}
// 压缩图片
func compressImage(image : UIImage) -> UIImage
{
var _actualImageHeight : CGFloat = image.size.height
var _actualImageWidth : CGFloat = image.size.width
let _maxHeight : CGFloat = 300.0
let _maxWidth : CGFloat = 400.0
var _imageRatio : CGFloat = _actualImageWidth / _actualImageHeight
let _maxRatio: CGFloat = _maxWidth / _maxHeight
let _imageCompressionQuality : CGFloat = 0.5 // makes the image get compressed to 50% of its actual size
if _actualImageHeight > _maxHeight || _actualImageWidth > _maxWidth
{
if _imageRatio < _maxRatio
{
// Adjust thw width according to the _maxHeight
_imageRatio = _maxHeight / _actualImageHeight
_actualImageWidth = _imageRatio * _actualImageWidth
_actualImageHeight = _maxHeight
}
else
{
if _imageRatio > _maxRatio
{
// Adjust height according to _maxWidth
_imageRatio = _maxWidth / _actualImageWidth
_actualImageHeight = _imageRatio * _actualImageHeight
_actualImageWidth = _maxWidth
}
else
{
_actualImageHeight = _maxHeight
_actualImageWidth = _maxWidth
}
}
}
let _compressedImage : CGRect = CGRectMake(0.0 , 0.0 , _actualImageWidth , _actualImageHeight)
UIGraphicsBeginImageContext(_compressedImage.size)
image.drawInRect(_compressedImage)
let img: UIImage = UIGraphicsGetImageFromCurrentImageContext()
let imageData: NSData = UIImageJPEGRepresentation(img, _imageCompressionQuality)!
UIGraphicsEndImageContext()
return UIImage(data: imageData)!
}
这是我的方法(IBAction),我将用户配置文件详细信息发送到服务器,其中包含 Base64 图像作为字符串
@IBAction func saveUserDetails(sender: AnyObject) {
let _oldpass = userOldPassword.text!
let _newPass = userNewPassword.text!
let _newPassCoonfirm = userRetypedPassword.text!
let _email : String = userEmail.text!
var _firstName : String = ""
let _middlename : String = userMiddleName.text!
let _lastname : String = userLastName.text!
let _pass : String = userNewPassword.text!
var _profileImage : String = ""
if let profileImage = self.userProfileImage as? String
{
_profileImage = profileImage
}
else
{
_profileImage = ""
}
if let _first = userFirstName.text! as? String
{
_firstName = _first
}
else
{
_firstName = ""
}
let params = ["firstname":"\(String(_firstName))"
,"middlename":"\(String(_middlename))"
,"lastname":"\(String(_lastname))"
,"password":"\(String(_pass))"
,"email":"\(String(_email))"
,"oldpassword":"\(_oldpass)"
,"base64String":"\(_profileImage)"]
Alamofire.request(.POST, App.AppHomeURL() + "Update_Profile", parameters : params , encoding : .JSON).responseJSON{
response in
switch response.result {
case .Success(let data) :
let json = JSON(data)
let ProfileEdit = json["Data"]
if (ProfileEdit)
{
print("true")
}
case .Failure(let _error):
print("false")
}
}
}
这是我的 Asp.Net MVC 控制器操作
[route.System.Web.Http.HttpPost]
[HttpRoute("api/Home/Update_Profile")]
public JsonResult Update_Profile([FromBody]UpdateProfileViewModel updateprofileviewmodel)
{
UserModel usermodelforemail = Helper.FindUserByEmail(updateprofileviewmodel.email);
System.Web.Mvc.JsonResult usertoreturn = new System.Web.Mvc.JsonResult();
UserModel usermodel = new UserModel();
usermodel = FridgeHelper.FindUserByObjectId(updateprofileviewmodel.userid);
usermodel.FirstName = updateprofileviewmodel.firstname;
usermodel.MiddleName = updateprofileviewmodel.middlename;
usermodel.LastName = updateprofileviewmodel.lastname;
usermodel.Email = updateprofileviewmodel.email;
//save photo
if (updateprofileviewmodel.base64String != null)
{
byte[] imageBytes = Convert.FromBase64String(updateprofileviewmodel.base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
string filenametosave = usermodel._id + "." + System.Drawing.Imaging.ImageFormat.Jpeg;
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Content/UserProfilePictures/" + filenametosave);
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
image.Save(path);
usermodel.Photo = filenametosave;
}
bool resultvalue = false;
resultvalue = Helper.UpdateUser(usermodel);
if (resultvalue)
{
usertoreturn.Data = "true";
}
else
{
usertoreturn.Data = "false";
}
return usertoreturn;
}
现在一切都按我需要的方式工作...... :)