Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 如何在c#中上载图像后自动从中心裁剪图像?_Asp.net Mvc 4_C# 4.0 - Fatal编程技术网

Asp.net mvc 4 如何在c#中上载图像后自动从中心裁剪图像?

Asp.net mvc 4 如何在c#中上载图像后自动从中心裁剪图像?,asp.net-mvc-4,c#-4.0,Asp.net Mvc 4,C# 4.0,我想在c#中从中心上载时间裁剪图像。我已经尝试使用此代码,但不返回新图像 [AllowAnonymous] [HttpPost] public string Upload(string dataImage, string Pusername, double dataX = 0, double? dataY = 0, double? dataHeight = 0, double? dataWidth = 0, double? dataRotate = 0) {

我想在c#中从中心上载时间裁剪图像。我已经尝试使用此代码,但不返回新图像

 [AllowAnonymous]
    [HttpPost]
    public string Upload(string dataImage, string Pusername, double dataX = 0, double? dataY = 0, double? dataHeight = 0, double? dataWidth = 0, double? dataRotate = 0)
    {
        if (!String.IsNullOrEmpty(dataImage))
        {
            try
            {
                string lenght = dataImage.Substring(0, dataImage.LastIndexOf(","));
                string test = dataImage.Remove(0, lenght.Length + 1);
                byte[] imageBytes = Convert.FromBase64String(test);
                MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
                ms.Write(imageBytes, 0, imageBytes.Length);

                Bitmap image1 = new Bitmap(ms);
                Rectangle rect = new Rectangle(Convert.ToInt32(dataX), Convert.ToInt32(dataY), Convert.ToInt32(dataWidth), Convert.ToInt32(dataHeight));

                Bitmap cropped = null;

                if (dataX != 0 || dataY != 0 || dataHeight != 0 || dataWidth != 0)
                {
                    cropped = RotateImageByAngle(image1, rect, (float)dataRotate);
                }
                else
                {                        
                    cropped = (Bitmap)ResizeImage(image1, new Size(image1.Width, image1.Height));
                }

                string fileName = string.Empty;
                string Destintionpath = string.Empty;

                string FileExtensionType = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders().FirstOrDefault(x => x.FormatID == image1.RawFormat.Guid).FilenameExtension;

                string FinalFileExtension;

                if (FileExtensionType.ToLower().Contains("jpg") || FileExtensionType.ToLower().Contains("jpeg") || FileExtensionType.ToLower().Contains("jfif"))
                    FinalFileExtension = "jpeg";
                else if (FileExtensionType.ToLower().Contains("png"))
                    FinalFileExtension = "png";
                else if (FileExtensionType.ToLower().Contains("bmp"))
                    FinalFileExtension = "bmp";
                else
                    FinalFileExtension = "gif";

                fileName = System.IO.Path.GetFileName(Pusername+ "_" + DateTime.UtcNow.ToString("mmddyyyy-Hmmss", CultureInfo.InvariantCulture) + "." + FinalFileExtension);
                Destintionpath = System.IO.Path.Combine(Server.MapPath("~/" + ConfigurationManager.AppSettings["ImagesFolder"].ToString() + "/"), fileName);
                string databasepath = Request.Url.GetLeftPart(UriPartial.Authority) + "/" + ConfigurationManager.AppSettings["ImagesFolder"].ToString() + "/" + fileName;

                string FileExtension = fileName.Substring(fileName.LastIndexOf('.') + 1, fileName.Length - (fileName.LastIndexOf('.') + 1));


                if (FileExtension.ToLower() == "jpg" || FileExtension.ToLower() == "jpeg")
                    ImageCompressionJpeg.Compress(cropped, Destintionpath);
                else if (FileExtension.ToLower() == "png")
                    ImageCompressionJpeg.RemoveTransparency(cropped, Destintionpath);
                else
                    cropped.Save(Destintionpath);

                RegisterModel objregister = new RegisterModel();
                objregister.UserName = Profile.UserName;
                objregister.CloudImagePath = databasepath;
                string result = u.UserThumbnail(objregister).Result;

                return databasepath;
            }
            catch
            {
                return "error";
            }
        }
        else
        {
            return "error";
        }
    }
下面是我的ResizeImage方法此方法用于图像裁剪,但我不返回新的croping图像

public static Image ResizeImage(Image imgToResize, Size destinationSize)
    {
        var originalWidth = imgToResize.Width;
        var originalHeight = imgToResize.Height;

        var hRatio = (float)originalHeight / destinationSize.Height;
        var wRatio = (float)originalWidth / destinationSize.Width;

        var ratio = Math.Min(hRatio, wRatio);

        var hScale = Convert.ToInt32(destinationSize.Height * ratio);
        var wScale = Convert.ToInt32(destinationSize.Width * ratio);

        var startX = (originalWidth - wScale) / 2;
        var startY = (originalHeight - hScale) / 2;

        var sourceRectangle = new Rectangle(startX, startY, wScale, hScale);

        var bitmap = new Bitmap(destinationSize.Width, destinationSize.Height);

        var destinationRectangle = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

        using (var g = Graphics.FromImage(bitmap))
        {
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(imgToResize, destinationRectangle, sourceRectangle, GraphicsUnit.Pixel);
        }

        return bitmap;

    }
你可以用

using (var g = Graphics.FromImage(bitmap))
        {
            g.TranslateTransform((float)bitmap.Width / 2, (float)bitmap.Height / 2);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(imgToResize, destinationRectangle, sourceRectangle, GraphicsUnit.Pixel);
        }
希望这有帮助

您可以使用

using (var g = Graphics.FromImage(bitmap))
        {
            g.TranslateTransform((float)bitmap.Width / 2, (float)bitmap.Height / 2);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(imgToResize, destinationRectangle, sourceRectangle, GraphicsUnit.Pixel);
        }
希望这有帮助