我想從文件位置的gridview中顯示縮略圖圖像。如何生成.jpeg
文件? 我使用C#
語言,asp.net
。創建縮略圖
創建縮略圖
回答
你必須使用GetThumbnailImage
方法在Image
類:
https://msdn.microsoft.com/en-us/library/8t23aykb%28v=vs.110%29.aspx
這裏有一個粗略的例子,它接受一個圖像文件,然後從它使一個縮略圖,然後將其保存回磁盤。
Image image = Image.FromFile(fileName);
Image thumb = image.GetThumbnailImage(120, 120,()=>false, IntPtr.Zero);
thumb.Save(Path.ChangeExtension(fileName, "thumb"));
@ktsixit - 它在System.Drawing命名空間(在System.Drawing.dll中) – 2011-01-13 09:33:28
你是認真的嗎?已經嵌入縮略圖的圖像GetThumbnailImage會產生可怕的結果。 [不要'犯這些錯誤],(請http://nathanaeljones.com/163/20-image-resizing-pitfalls/)。 http://imageresizing.net是開源的,免費,快速,並會給你高質量的結果。 – 2012-01-09 21:05:46
它一般只能用於JPG圖片。如果您嘗試像這樣調整PNG圖像的大小,則會出現此錯誤。 – HBlackorby 2015-06-04 21:45:27
下面的代碼將在比例寫的圖像響應,您可以修改代碼以實現你的目的:
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();
}
我給了我的本地文件路徑在字符串路徑。它返回「不支持給定的路徑格式」。 – 2018-03-01 05:09:31
我給了這樣的... var path = @「C:\ Users \ Gopal \ Desktop \ files.jpeg」; 位圖srcBmp =新的位圖(路徑); – 2018-03-01 05:10:51
下面是如何創建一個更小的圖像的完整的例子(縮略圖)。這段代碼調整圖像的大小,在需要時將其旋轉(如果手機垂直放置),如果要創建方形拇指則填充圖像。這段代碼創建了一個JPEG,但可以輕鬆修改其他文件類型。即使圖像小於允許的最大尺寸,圖像仍會被壓縮,並會更改分辨率以創建相同dpi和壓縮級別的圖像。
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
//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用戶如何上傳文件,調整其大小和在頁面上顯示的結果一個小例子。
//== 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;
}
}
}
- 1. 創建縮略圖
- 2. 的WordPress:創建縮略圖
- 3. Codeigniter - 創建縮略圖Woes
- 4. Heroku PlayFramework - 創建縮略圖
- 5. 即時創建縮略圖
- 6. codeigniter縮略圖創建
- 7. 從UserControl創建縮略圖
- 8. 如何在我的模板中創建縮略圖縮略圖
- 9. 使用PHP創建縮略圖或手動添加縮略圖?
- 10. 爲圖像網格創建縮略圖
- 11. 未創建WordPress圖片縮略圖
- 12. AvalancheImagineBundle無法創建縮略圖圖像?
- 13. 爲燈箱圖像創建縮略圖
- 14. Libgdx創建圖像縮略圖
- 15. 通過ffmpeg.exe創建縮略圖圖像
- 16. 在php中創建縮略圖
- 17. 創建縮略圖和調整問題
- 18. WCF服務創建視頻縮略圖
- 19. iPhone:創建視頻縮略圖
- 20. 在Android中創建PDF的縮略圖
- 21. ffmpeg-php創建視頻縮略圖
- 22. ASP.Net:上傳視頻,創建縮略圖
- 23. 如何創建網站的縮略圖?
- 24. Android創建縮略圖佈局
- 25. 使用ffmpeg創建mp4的縮略圖
- 26. Shopify博客文章創建縮略圖
- 27. Django- Imagekit不創建縮略圖
- 28. 在Java中創建縮略圖
- 29. 從coldfusion創建縮略圖cfscript
- 30. 創建完美的縮略圖
[ImageResizer](http://imageresizing.net)是一個服務器安全庫,旨在完全滿足您的需求。與GetThumbnailImage不同,它可以產生高質量的結果,與代碼示例不同,它不會像篩子那樣泄漏內存。你現在可能並不在意,但是在覈心轉儲時你將會在幾個月時間內屈膝。 – 2013-02-12 14:27:32
http://www.codeproject.com/Articles/20971/Thumbnail-Images-in-GridView-using-C – Freelancer 2013-05-24 10:21:50