public string GerarFotoArquivoNome(UploadFotoModel model)
        {
            var auxNomeExt = model.file.Split('.');

            if (auxNomeExt.Length > 1)
            {
                string nomeNovo   = auxNomeExt[0];
                var    auxNomePos = auxNomeExt[0].Split(new string[] { "__" }, StringSplitOptions.None);
                if (auxNomePos.Length > 1)
                {
                    nomeNovo = auxNomePos[0];
                }
                nomeNovo += "__" + model.width + "x" + model.height + "__" + model.x + "x" + model.y + "." + auxNomeExt[1];
                if (model.file != nomeNovo)
                {
                    RenomearImagemPerfil(model.file, nomeNovo);
                    model.file = nomeNovo;
                }
            }
            return(model.file);
        }
        public RetornoModel <UploadFotoModel> Upload(HttpPostedFileBase arquivo)
        {
            string          nomeArq = null;
            UploadFotoModel retorno = null;

            try
            {
                if ((arquivo != null) && (arquivo.ContentLength > 0))
                {
                    string content = arquivo.ContentType.Split('/')[0];
                    if (content == "image")
                    {
                        if (arquivo.ContentLength > ConfiguracaoAppUtil.GetAsInt(enumConfiguracaoLib.uploadImagemMaxSize))
                        {
                            int maxKb = Convert.ToInt32(ConfiguracaoAppUtil.GetAsInt(enumConfiguracaoLib.uploadImagemMaxSize) / 1024);
                            return(new RetornoModel <UploadFotoModel> {
                                Mensagem = "O tamanho máximo para upload de imagem é de " + ((maxKb > 1024) ? Convert.ToInt32(maxKb / 1024) + "Mb" : maxKb + "Kb") + ".", Sucesso = false
                            });
                        }
                        //Salva o arquivo
                        nomeArq = Guid.NewGuid().ToString() + Path.GetExtension(arquivo.FileName);
                        string caminhoArquivo = ConfiguracaoAppUtil.GetPath(enumConfiguracaoLib.indicadoFotoDiretorio, nomeArq);
                        arquivo.SaveAs(caminhoArquivo);

                        if (!AntivirusUtil.Verificar(caminhoArquivo))
                        {
                            return(new RetornoModel <UploadFotoModel> {
                                Mensagem = "Este arquivo contém vírus, favor tentar outro arquivo.", Sucesso = false
                            });
                        }
                        Image img = Image.FromFile(caminhoArquivo);
                        retorno = new UploadFotoModel
                        {
                            file   = nomeArq,
                            width  = img.Width,
                            height = img.Height,
                            x      = Convert.ToInt32((indicadoMaxWidth - img.Width) / 2),
                            y      = Convert.ToInt32((indicadoMaxHeight - img.Height) / 2)
                        };
                    }
                    else
                    {
                        return(new RetornoModel <UploadFotoModel> {
                            Mensagem = "Tipo de arquivo inválido.", Sucesso = false
                        });
                    }
                }
                else
                {
                    return(new RetornoModel <UploadFotoModel> {
                        Mensagem = "Nenhum arquivo enviado.", Sucesso = false
                    });
                }
            }
            catch (Exception e)
            {
                LogUtil.Error(e);
                return(new RetornoModel <UploadFotoModel> {
                    Mensagem = "Falha no upload, tente novamente!", Sucesso = false
                });
            }
            return(new RetornoModel <UploadFotoModel> {
                Retorno = retorno, Mensagem = "Upload realizado com sucesso.", Sucesso = true
            });
        }
        public static UploadFotoModel CarregarFotoInfo(string arquivoNome, int widthCustom = 0, int heightCustom = 0)
        {
            if (string.IsNullOrEmpty(arquivoNome))
            {
                return(null);
            }
            UploadFotoModel model = new UploadFotoModel();

            model.file = arquivoNome;

            var auxNomeExt = arquivoNome.Split('.');

            if (auxNomeExt.Length > 1)
            {
                string nomeNovo   = auxNomeExt[0];
                var    auxNomePos = auxNomeExt[0].Split(new string[] { "__" }, StringSplitOptions.None);
                if (auxNomePos.Length > 2)
                {
                    var auxTam = auxNomePos[1].Split('x');
                    var auxPos = auxNomePos[2].Split('x');
                    model.width  = Convert.ToInt32(auxTam[0]);
                    model.height = Convert.ToInt32(auxTam[1]);
                    model.x      = Convert.ToInt32(auxPos[0]);
                    model.y      = Convert.ToInt32(auxPos[1]);

                    double percentual = 1.00;
                    if (model.height > indicadoMaxHeightImage)
                    {
                        percentual = Convert.ToDouble(indicadoMaxHeightImage) / Convert.ToDouble(model.height);

                        model.height = indicadoMaxHeightImage;
                        model.width  = Convert.ToInt32(model.width * percentual);
                    }
                    else if (model.width > indicadoMaxWidthImage)
                    {
                        percentual   = Convert.ToDouble(indicadoMaxWidthImage) / Convert.ToDouble(model.width);
                        model.width  = indicadoMaxWidthImage;
                        model.height = Convert.ToInt32(model.height * percentual);
                    }
                }
                else
                {
                    var arquivo = ConfiguracaoAppUtil.GetPath(enumConfiguracaoLib.indicadoFotoDiretorio, model.file);
                    if (File.Exists(arquivo))
                    {
                        var aux = Image.FromFile(arquivo);
                        model.width  = aux.Width;
                        model.height = aux.Height;
                        if (Convert.ToDouble(model.width) / Convert.ToDouble(model.height) < Convert.ToDouble(indicadoMaxWidth) / Convert.ToDouble(indicadoMaxHeight))
                        {
                            model.height = Convert.ToInt32(Convert.ToDouble(indicadoMaxWidth) * Convert.ToDouble(model.height) / Convert.ToDouble(model.width));
                            model.width  = indicadoMaxWidth;
                            model.x      = 0;
                            model.y      = Convert.ToInt32((indicadoMaxHeight - model.height) / 2);
                        }
                        else
                        {
                            model.width  = Convert.ToInt32(Convert.ToDouble(indicadoMaxHeight) * Convert.ToDouble(model.width) / Convert.ToDouble(model.height));
                            model.height = indicadoMaxHeight;
                            model.x      = Convert.ToInt32((indicadoMaxWidth - model.width) / 2);
                            model.y      = 0;
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }

                if ((widthCustom > 0) && (heightCustom > 0))
                {
                    double percentual = 1.00;
                    if (Convert.ToDouble(widthCustom) / Convert.ToDouble(heightCustom) < Convert.ToDouble(indicadoMaxWidth) / Convert.ToDouble(indicadoMaxHeight))
                    {
                        percentual = Convert.ToDouble(widthCustom) / Convert.ToDouble(indicadoMaxWidth);
                    }
                    else
                    {
                        percentual = Convert.ToDouble(heightCustom) / Convert.ToDouble(indicadoMaxHeight);
                    }
                    model.width  = Convert.ToInt32(model.width * percentual);
                    model.height = Convert.ToInt32(model.height * percentual);
                    model.y      = Convert.ToInt32(model.y * percentual);
                    model.x      = Convert.ToInt32(model.x * percentual);
                }
            }
            return(model);
        }