Ejemplo n.º 1
0
        public ActionResult Crop()
        {
            //se alterar aqui nao esqueça de mudar no metodo Crop()
            const int dimensaoMax = 200;

            int x1, x2, y1, y2 = 0;

            try
            {
                x1 = int.Parse(Request.Form["x1"]);
                x2 = int.Parse(Request.Form["x2"]);
                y1 = int.Parse(Request.Form["y1"]);
                y2 = int.Parse(Request.Form["y2"]);
            }
            catch
            {
                Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
                return(Json(new { error = "Invalid size" }));
            }

            int largura = x2 - x1;
            int altura  = y2 - y1;

            //de acordo com o estilo no css
            if (largura < dimensaoMax || altura < dimensaoMax)
            {
                Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
                return(Json(new { error = "Image should be at least 130x130" }));
            }

            if (largura != altura)
            {
                Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
                return(Json(new { error = "Image should be square" }));
            }

            //pega a imagem do azure gerando um nome previsivel
            var nomeImagemOriginal = "fullsize-" + NimbusUser.UserId;

            HMACMD5 md5 = new HMACMD5(NimbusConfig.GeneralHMACKey);

            md5.ComputeHash(Encoding.Unicode.GetBytes(nomeImagemOriginal));
            nomeImagemOriginal = Base32.ToString(md5.Hash).ToLower() + ".jpg";

            var origBlob = new AzureBlob(Const.Azure.AvatarContainer, nomeImagemOriginal);

            var streamImgOrig = origBlob.DownloadToMemoryStream();

            var img = new ImageManipulation(streamImgOrig);

            img.Crop(x1, y1, x2, y2);
            img.Resize(dimensaoMax, dimensaoMax);

            string pathFinal = UploadAvatar(img, NimbusUser.UserId.ToString());

            using (var db = DatabaseFactory.OpenDbConnection())
            {
                var user = db.Where <User>(u => u.Id == NimbusUser.UserId).FirstOrDefault();

                //apaga imagem antiga
                //if (user.AvatarUrl != null && user.AvatarUrl != "/images/av130x130/person_icon.png")
                //{
                //    try
                //    {
                //        var uriAntigo = new Uri(user.AvatarUrl).Segments;
                //        var blobAntigo = new AzureBlob(Const.Azure.AvatarContainer, uriAntigo[uriAntigo.Length - 1]);
                //        blobAntigo.Delete();
                //    }
                //    catch { }
                //}
                user.AvatarUrl = pathFinal;
                db.Save(user);

                //ATENÇÃO! Ao alterar informações presentes no NimbusUser,
                //lembre-se de atualizar no cache também!
                //Session[Const.UserSession] = DatabaseLogin.GetNimbusPrincipal(user);
            }

            //depois que salvar no azure retorna por json p mostrar na tela a imagem final
            origBlob.Delete();
            //adiciona query string para atrapalhar o cache =)
            pathFinal += "?x=" + DateTime.Now.ToFileTime().ToString();
            return(Json(new { url = pathFinal }));
        }