我正在为我的照片组合制作相册。但我在质疑以下内容:
我应该将缩略图版本保存在服务器上的文件系统上,还是应该在请求缩略图时动态生成缩略图?
我认为存储缩略图的优点是服务器上的处理较少,因为它生成文件一次(当文件上传时)。但缺点是如果我有一天决定缩略图的大小不对,我就有问题了。此外,我现在存储2个文件(拇指加原始文件)。
然后,缩略图是否有最佳尺寸?我想答案是 - 你想要存储缩略图的大小。我的问题是,我的thumnails被调整到最大150高或最大150宽。但是,文件的大小仍然达到了大约40k。
我正在使用它:
public void ResizeImage(string originalFile, string newFile, int newWidth, int maxHeight, bool onlyResizeIfWider)
{
System.Drawing.Image fullsizeImage = System.Drawing.Image.FromFile(MapPath(GlobalVariables.UploadPath + "/" + originalFile));
// Prevent using images internal thumbnail
fullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
fullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
if (onlyResizeIfWider)
{
if (fullsizeImage.Width <= newWidth)
{
newWidth = fullsizeImage.Width;
}
}
int newHeight = fullsizeImage.Height * newWidth / fullsizeImage.Width;
if (newHeight > maxHeight)
{
// Resize with height instead
newWidth = fullsizeImage.Width * maxHeight / fullsizeImage.Height;
newHeight = maxHeight;
}
System.Drawing.Image newImage = fullsizeImage.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
// Clear handle to original file so that we can overwrite it if necessary
fullsizeImage.Dispose();
// Save resized picture
newImage.Save(MapPath(GlobalVariables.UploadPath + "/" + newFile));
}
有没有办法减小文件大小,因为150高/ 150宽是非常小的。我想要上升到250左右,但如果我显示12个拇指......需要一段时间才能加载。
答案 0 :(得分:2)
是绝对必须保存为缩略图文件而不是一直处理。
关于图像,尝试使其绝对适合8x8或16x16数组块,因为这是jpeg用于分割和压缩它的大小。例如,因为150/8 = 18.75,所以不要150x150,使用152x152因为152/8 = 19
然后减少文件大小和改变质量的属性是
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
以下是How to: Use Interpolation Mode to Control Image Quality During Scaling
的示例