//методы public static QueryResult<byte[]> FillSize(byte[] inputBytes, ImageTargetParameters parameters) { bool hasExceptions = false; MemoryStream outputStream = new MemoryStream(); try { MemoryStream inputStream = new MemoryStream(inputBytes); using (Image inputImage = Image.FromStream(inputStream)) { ImageNewSizes sizes = new ImageNewSizes(inputImage.Width, inputImage.Height); if (sizes.IsEmpty) { return new QueryResult<byte[]>(null, true); } PickResizeType(parameters, sizes); if (sizes.IsEmpty) { return new QueryResult<byte[]>(null, true); } SaveToStream(inputImage, outputStream, parameters, sizes); } } catch(Exception exception) { hasExceptions = true; } return new QueryResult<byte[]>(outputStream.ToArray(), hasExceptions); }
private static void SaveToStream(Image inputImage, Stream outputStream , ImageTargetParameters parameters, ImageNewSizes sizes) { using (Bitmap newImage = new Bitmap(sizes.Width, sizes.Height)) { using (Graphics g = Graphics.FromImage(newImage)) { g.SmoothingMode = SmoothingMode.HighSpeed; g.InterpolationMode = InterpolationMode.Bilinear; g.PixelOffsetMode = PixelOffsetMode.HighSpeed; g.Clear(Color.White); if (parameters.RoundCorners) { GraphicsPath roundPath = CreateRoundPath(sizes.DrawingRegion, 6); g.SetClip(roundPath); } g.DrawImage(inputImage,sizes.DrawingRegion, sizes.CropRegion, GraphicsUnit.Pixel); } newImage.Save(outputStream, parameters.TargetFormat); } }
private static void PickResizeType(ImageTargetParameters parameters, ImageNewSizes sizes) { if (parameters.ResizeType == ImageResizeType.FitRatio) { LowerAllProportionally(parameters.Width, parameters.Height, sizes); RaiseToLowestProportionally(parameters.Width, parameters.Height, sizes); } else if (parameters.ResizeType == ImageResizeType.FitAndFill) { LowerAllProportionally(parameters.Width, parameters.Height, sizes); RaiseToLowestProportionally(parameters.Width, parameters.Height, sizes); AddSpaceOnBorders(parameters.Width, parameters.Height, sizes); } else if (parameters.ResizeType == ImageResizeType.FitHeightAndCropWidth) { LowerAllProportionally(parameters.Width, parameters.Height, sizes); RaiseHeightProportionally(parameters.Height, sizes); CutAll(parameters.Width, parameters.Height, sizes); } else if (parameters.ResizeType == ImageResizeType.FitWidthAndCropHeight) { LowerAllProportionally(parameters.Width, parameters.Height, sizes); RaiseWidthProportionally(parameters.Width, sizes); CutAll(parameters.Width, parameters.Height, sizes); } else if (parameters.ResizeType == ImageResizeType.FitWidthAndSqueezeHeight) { LowerAllProportionally(parameters.Width, parameters.Height, sizes); RaiseWidthProportionally(parameters.Width, sizes); FillHeightIfBigger(parameters.Height, sizes); } }