如何调整不同分辨率的图像大小

我必须在照片库@ width = 200 height = 180中显示图像,但在上传图像时我必须调整它的大小,但问题是每个图像都有不同的分辨率。 如何以不同的分辨率调整图像大小以使图像保持完整。 这是我的代码:

private void ResizeImage() { System.Drawing.Image ImageToUpload = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream); byte[] image = null; int h = ImageToUpload.Height; int w = ImageToUpload.Width; int r = int.Parse(ImageToUpload.VerticalResolution.ToString()); int NewWidth = 200;//constant int NewHeight = 180;//constant byte[] imagesize = FileUpload1.FileBytes; System.Drawing.Bitmap BitMapImage = new System.Drawing.Bitmap(ImageToUpload, NewWidth, NewHeight);//this line gives horrible output MemoryStream Memory = new MemoryStream(); BitMapImage.Save(Memory, System.Drawing.Imaging.ImageFormat.Jpeg); Memory.Position = 0; image = new byte[Memory.Length + 1]; Memory.Read(image, 0, image.Length); } 

如果分辨率是96并且如果我设置maxwidth = 200那么它的高度将是150,那么只有图像看起来小而准确。 我们不能以期望的方式调整图像大小以使其看起来准确吗?

试试这个,该function将调整图像维护宽高比。

用它就好

 Image BitMapImage = Resize(ImageToUpload, NewWidth, NewHeight); 

重新调整图像的function

 public static Image Resize(Image originalImage, int w, int h) { //Original Image attributes int originalWidth = originalImage.Width; int originalHeight = originalImage.Height; // Figure out the ratio double ratioX = (double)w / (double)originalWidth; double ratioY = (double)h / (double)originalHeight; // use whichever multiplier is smaller double ratio = ratioX < ratioY ? ratioX : ratioY; // now we can get the new height and width int newHeight = Convert.ToInt32(originalHeight * ratio); int newWidth = Convert.ToInt32(originalWidth * ratio); Image thumbnail = new Bitmap(newWidth, newHeight); Graphics graphic = Graphics.FromImage(thumbnail); graphic.InterpolationMode = InterpolationMode.HighQualityBicubic; graphic.SmoothingMode = SmoothingMode.HighQuality; graphic.PixelOffsetMode = PixelOffsetMode.HighQuality; graphic.CompositingQuality = CompositingQuality.HighQuality; graphic.Clear(Color.Transparent); graphic.DrawImage(originalImage, 0, 0, newWidth, newHeight); return thumbnail; } 

在这里,我保持高度固定为180,以保持纵横比。 它将调整图像大小并保存到磁盘。 返回值是我在’background-size’css中使用的百分比值。

 public float ResizePhoto(string filepath, string filename) { var path = Path.Combine(filepath, filename); var newPath = Path.Combine(filepath, "sml_" + filename); Image orgImage = Image.FromFile(path); float fixedHt = 180f; int destHeight, destWidth; float reqScale; if(orgImage.Height > fixedHt) { destHeight = (int)fixedHt; destWidth = (int)(fixedHt / orgImage.Height * orgImage.Width); reqScale = destWidth / destHeight * 100; } else { destHeight = orgImage.Height; destWidth = orgImage.Width; reqScale = fixedHt / destHeight * 100; } Bitmap bmp = new Bitmap(destWidth, destHeight); bmp.SetResolution(orgImage.HorizontalResolution,orgImage.VerticalResolution); Graphics grPhoto = Graphics.FromImage(bmp); grPhoto.DrawImage(orgImage, new Rectangle(0, 0, destWidth, destHeight), new Rectangle(0, 0, orgImage.Width, orgImage.Height), GraphicsUnit.Pixel); bmp.Save(newPath); return reqScale; }