我已经阅读过有关创建HttpHandler的信息,每当我想要显示缩略图时,我都会调用它来为我调整大小。 我也听说过其他一些解决方案,但我想知道哪个解决方案最适合社交网站,每个页面和所有地方都会显示缩略图。
在上传origianl文件后调整大小并将图像保存在磁盘上会不会很好?参考这些图像的最佳方法是什么?
有人对我有任何建议吗? 谢谢。
答案 0 :(得分:2)
在调整之后调整大小并将图像保存在磁盘上是否合适? origianl文件已经上传?什么是最好的参考方式 这些图片?
当然,这就是Twitter所做的,例如,大多数网站都需要显示缩略图。这很费时间。每次对每张图像执行此操作时,您不希望用户闲置。
将缩略图存储在磁盘上并保留对数据库缩略图的引用。或者将它们存储在数据库本身上。我不想进入有关磁盘与数据库的辩论,但每次都不要调整它们的大小。它应该在ONCE完成。
答案 1 :(得分:1)
如果需要,可以使用一些调整大小代码,首先设置一个最大高度和宽度,然后创建一个缩略图,其缩写与原始版本相同,现在违反最大值。
第二,如果您知道最终图像的实际大小并且不需要担心宽高比,则更简单。
public Image Thumbnail(Image FullsizeImage, int MaxHeight, int MaxWidth)
{
try
{
// This has to be here or for some reason this resize code will
// resize an internal Thumbnail and wil stretch it instead of shrinking
// the fullsized image and give horrible results
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
System.Drawing.Image NewImage;
if (!((MaxWidth < FullsizeImage.Width) || (MaxHeight < FullsizeImage.Height)))
NewImage = FullsizeImage;
else
{
float HeightRatio = 1;
float WidthRatio = 1;
HeightRatio = (float)FullsizeImage.Width / FullsizeImage.Height;
WidthRatio = (float)FullsizeImage.Height / FullsizeImage.Width;
float DrawHeight = (float)FullsizeImage.Height;
float DrawWidth = (float)FullsizeImage.Width;
if (MaxHeight < FullsizeImage.Height)
{
DrawHeight = (float)MaxHeight;
DrawWidth = MaxHeight * HeightRatio;
}
if (MaxWidth < DrawWidth)
{
DrawWidth = MaxWidth;
DrawHeight = DrawWidth * WidthRatio;
}
NewImage = FullsizeImage.GetThumbnailImage((int)(DrawWidth),
(int)(DrawHeight), null, IntPtr.Zero);
}
return NewImage;
// To return a byte array for saving in a db
//ms = new MemoryStream();
//NewImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//NewImage.Dispose();
//FullsizeImage.Dispose();
//return ms.ToArray();
}
catch
{
return null;
}
finally
{
}
}
public Image Resize(Image OrigImage, int NewHeight, int NewWidth)
{
if (OrigImage != null)
{
Bitmap bmp = new Bitmap(OrigImage, new Size(NewWidth, NewHeight));
bmp.SetResolution(this.ImageResolution, this.ImageResolution);
Graphics g = Graphics.FromImage(bmp);
return bmp;
}
else
{
return null;
}
}