创build缩略图图像

我想从文件位置的gridview中显示缩略图图像。 如何生成.jpeg文件的? 我正在使用C#语言与asp.net

您必须在Image类中使用GetThumbnailImage方法:

https://msdn.microsoft.com/en-us/library/8t23aykb%28v=vs.110%29.aspx

下面是一个粗略的例子,它需要一个图像文件,并从中创build一个缩略图,然后将其保存回磁盘。

 Image image = Image.FromFile(fileName); Image thumb = image.GetThumbnailImage(120, 120, ()=>false, IntPtr.Zero); thumb.Save(Path.ChangeExtension(fileName, "thumb")); 

以下代码将按照与响应成比例写入图像,您可以根据自己的目的修改代码:

 public void WriteImage(string path, int width, int height) { Bitmap srcBmp = new Bitmap(path); float ratio = srcBmp.Width / srcBmp.Height; SizeF newSize = new SizeF(width, height * ratio); Bitmap target = new Bitmap((int) newSize.Width,(int) newSize.Height); HttpContext.Response.Clear(); HttpContext.Response.ContentType = "image/jpeg"; using (Graphics graphics = Graphics.FromImage(target)) { graphics.CompositingQuality = CompositingQuality.HighSpeed; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.CompositingMode = CompositingMode.SourceCopy; graphics.DrawImage(srcBmp, 0, 0, newSize.Width, newSize.Height); using (MemoryStream memoryStream = new MemoryStream()) { target.Save(memoryStream, ImageFormat.Jpeg); memoryStream.WriteTo(HttpContext.Response.OutputStream); } } Response.End(); } 

以下是如何创build较小图像(缩略图)的完整示例。 这段代码调整了图像的大小,在需要的时候旋转它(如果手机垂直放置),如果想要创build方形的大拇指则填充图像。 这段代码创build了一个JPEG,但是可以很容易地修改其他文件types。 即使图像小于允许的最大尺寸,图像仍将被压缩,并且会更改分辨率以创build相同dpi和压缩级别的图像。

 //set the resolution, 72 is usually good enough for displaying images on monitors float imageResolution = 72; //set the compression level. higher compression = better quality = bigger images long compressionLevel = 80L; public Image resizeImage(Image image, int maxWidth, int maxHeight, bool padImage) { int newWidth; int newHeight; //first we check if the image needs rotating (eg phone held vertical when taking a picture for example) foreach (var prop in image.PropertyItems) { if (prop.Id == 0x0112) { int orientationValue = image.GetPropertyItem(prop.Id).Value[0]; RotateFlipType rotateFlipType = getRotateFlipType(orientationValue); image.RotateFlip(rotateFlipType); break; } } //apply the padding to make a square image if (padImage == true) { image = applyPaddingToImage(image, Color.Red); } //check if the with or height of the image exceeds the maximum specified, if so calculate the new dimensions if (image.Width > maxWidth || image.Height > maxHeight) { double ratioX = (double)maxWidth / image.Width; double ratioY = (double)maxHeight / image.Height; double ratio = Math.Min(ratioX, ratioY); newWidth = (int)(image.Width * ratio); newHeight = (int)(image.Height * ratio); } else { newWidth = image.Width; newHeight = image.Height; } //start the resize with a new image Bitmap newImage = new Bitmap(newWidth, newHeight); //set the new resolution newImage.SetResolution(imageResolution, imageResolution); //start the resizing using (var graphics = Graphics.FromImage(newImage)) { //set some encoding specs graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.DrawImage(image, 0, 0, newWidth, newHeight); } //save the image to a memorystream to apply the compression level using (MemoryStream ms = new MemoryStream()) { EncoderParameters encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, compressionLevel); newImage.Save(ms, getEncoderInfo("image/jpeg"), encoderParameters); //save the image as byte array here if you want the return type to be a Byte Array instead of Image //byte[] imageAsByteArray = ms.ToArray(); } //return the image return newImage; } //=== image padding public Image applyPaddingToImage(Image image, Color backColor) { //get the maximum size of the image dimensions int maxSize = Math.Max(image.Height, image.Width); Size squareSize = new Size(maxSize, maxSize); //create a new square image Bitmap squareImage = new Bitmap(squareSize.Width, squareSize.Height); using (Graphics graphics = Graphics.FromImage(squareImage)) { //fill the new square with a color graphics.FillRectangle(new SolidBrush(backColor), 0, 0, squareSize.Width, squareSize.Height); //put the original image on top of the new square graphics.DrawImage(image, (squareSize.Width / 2) - (image.Width / 2), (squareSize.Height / 2) - (image.Height / 2), image.Width, image.Height); } //return the image return squareImage; } //=== get encoder info private ImageCodecInfo getEncoderInfo(string mimeType) { ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders(); for (int j = 0; j < encoders.Length; ++j) { if (encoders[j].MimeType.ToLower() == mimeType.ToLower()) { return encoders[j]; } } return null; } //=== determine image rotation private RotateFlipType getRotateFlipType(int rotateValue) { RotateFlipType flipType = RotateFlipType.RotateNoneFlipNone; switch (rotateValue) { case 1: flipType = RotateFlipType.RotateNoneFlipNone; break; case 2: flipType = RotateFlipType.RotateNoneFlipX; break; case 3: flipType = RotateFlipType.Rotate180FlipNone; break; case 4: flipType = RotateFlipType.Rotate180FlipX; break; case 5: flipType = RotateFlipType.Rotate90FlipX; break; case 6: flipType = RotateFlipType.Rotate90FlipNone; break; case 7: flipType = RotateFlipType.Rotate270FlipX; break; case 8: flipType = RotateFlipType.Rotate270FlipNone; break; default: flipType = RotateFlipType.RotateNoneFlipNone; break; } return flipType; } //== convert image to base64 public string convertImageToBase64(Image image) { using (MemoryStream ms = new MemoryStream()) { //convert the image to byte array image.Save(ms, ImageFormat.Jpeg); byte[] bin = ms.ToArray(); //convert byte array to base64 string return Convert.ToBase64String(bin); } } 

对于asp.net用户来说,如何上传文件的一个小例子,resize并在页面上显示结果。

 //== the button click method protected void Button1_Click(object sender, EventArgs e) { //check if there is an actual file being uploaded if (FileUpload1.HasFile == false) { return; } using (Bitmap bitmap = new Bitmap(FileUpload1.PostedFile.InputStream)) { try { //start the resize Image image = resizeImage(bitmap, 256, 256, true); //to visualize the result, display as base64 image Label1.Text = "<img src=\"data:image/jpg;base64," + convertImageToBase64(image) + "\">"; //save your image to file sytem, database etc here } catch (Exception ex) { Label1.Text = "Oops! There was an error when resizing the Image.<br>Error: " + ex.Message; } } }