C# 需要一些lite库/代码来创建缩略图,并且最适合与ASP.NET MVC一起使用
下面是从数据库返回图像的操作方法,我需要一些lite库或自己编写代码(如果很短),以便根据我的要求调整和压缩这些图像的大小“生成缩略图”,然后再将其传递到HTTP响应 编辑:事实上,考虑到这一点,也许最好将缩略图保存在其他列中,因此,现在我需要一种方法,在将图像保存到数据库之前压缩并调整图像大小,并保存一个未触及的副本。最初通过在HttpPostedFileBase中传递图像来保存图像,现在需要一些工具在保存到数据库之前调整图像大小并进行压缩C# 需要一些lite库/代码来创建缩略图,并且最适合与ASP.NET MVC一起使用,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,下面是从数据库返回图像的操作方法,我需要一些lite库或自己编写代码(如果很短),以便根据我的要求调整和压缩这些图像的大小“生成缩略图”,然后再将其传递到HTTP响应 编辑:事实上,考虑到这一点,也许最好将缩略图保存在其他列中,因此,现在我需要一种方法,在将图像保存到数据库之前压缩并调整图像大小,并保存一个未触及的副本。最初通过在HttpPostedFileBase中传递图像来保存图像,现在需要一些工具在保存到数据库之前调整图像大小并进行压缩 public FileContentResult G
public FileContentResult GetImage(int LineID)
{
var PMedia = repository.ProductMedias.FirstOrDefault(x => x.LineID == LineID);
if (PMedia != null)
{
return File(PMedia.ImageData, PMedia.ImageMimeType, PMedia.FileName);
}
else
{
return null;
}
}
你的缩略图每次都不一样吗?否则,与每次处理缩略图相比,为缩略图设置另一列/存储区(其中包含已调整大小的照片)可能是最佳选择。
系统。绘图可以轻松创建缩略图。但是,ASP.NET不支持将其用于
但是,如果您接受Erik Philips的建议,预先生成所有缩略图,并将其与原件一起存储在数据库中,那么可以想象,您将有一个某种进程(如Windows服务),该进程将定期为需要它们的行生成缩略图。由于此过程将连续生成拇指,因此您不会像在ASP.NET应用程序中那样担心使用System.Drawing
(在ASP.NET应用程序中,您可以很容易地让多个线程吞噬System.Drawing
包装的相对稀缺的系统资源)
编辑:我刚注意到MVC标签。我不知道System.Drawing
是否可用于MVC,或者它是否已被其他东西取代。一般来说,.NET一直都有内置的有用的图形库,可以轻松地完成大多数简单的事情(我不会说它只做简单的事情,正如graphics.DrawImage(…)
方法的30个重载所证明的那样),所以我希望您仍然可以在MVC中这样做。以下是我制作缩略图的例行程序:
public void MakeThumbnail(string imagePath)
{
// Image exists?
if (string.IsNullOrEmpty(imagePath)) throw new FileNotFoundException("Image does not exist at " + imagePath);
// Default values
string Filename = imagePath.ToLower().Replace(".jpg", "_thumb.jpg");
int Width = 100; // 180;
int Height = 75; // 135;
bool lSaved = false;
// Load image
Bitmap bitmap = new Bitmap(imagePath);
// If image is smaller than just save
try
{
if (bitmap.Width <= Width && bitmap.Height <= Height)
{
bitmap.Save(Filename, ImageFormat.Jpeg);
lSaved = true;
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
bitmap.Dispose();
}
if (!lSaved)
{
Bitmap FinalBitmap = null;
// Making Thumb
try
{
bitmap = new Bitmap(imagePath);
int BitmapNewWidth;
decimal Ratio;
int BitmapNewHeight;
// Change size of image
Ratio = (decimal)Width / Height;
BitmapNewWidth = Width;
BitmapNewHeight = Height;
// Image processing
FinalBitmap = new Bitmap(BitmapNewWidth, BitmapNewHeight);
Graphics graphics = Graphics.FromImage(FinalBitmap);
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.FillRectangle(Brushes.White, 0, 0, BitmapNewWidth, BitmapNewHeight);
graphics.DrawImage(bitmap, 0, 0, BitmapNewWidth, BitmapNewHeight);
// Save modified image
FinalBitmap.Save(Filename, ImageFormat.Jpeg);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
if (FinalBitmap != null) FinalBitmap.Dispose();
}
}
}
public void make缩略图(字符串imagePath)
{
//图像存在吗?
if(string.IsNullOrEmpty(imagePath))抛出新的FileNotFoundException(“图像在“+imagePath”处不存在);
//默认值
字符串文件名=imagePath.ToLower().Replace(“.jpg”,“_thumb.jpg”);
int Width=100;//180;
int Height=75;//135;
bool lSaved=假;
//加载图像
位图位图=新位图(图像路径);
//如果图像小于仅保存
尝试
{
如果(bitmap.Width不要重新发明轮子!有一个非常好的、免费的(事实上是开源的)纯.NET库,可用于API或处理程序:
它支持非常高质量的大小调整、转换成多种格式、自动裁剪、旋转、水印
如果你认为“不,我自己能行!”,以下是20个你不应该这么做的理由:
是的,我会这样做。但我仍然需要一些能够与ASP.NET一起工作的东西来调整图像大小/将图像压缩为缩略图,然后才能将它们保存到附加列中。最终用户是否通过您的网站上载原始图像?如果是,您不会希望在用户发起的调用中使用System.Drawing生成缩略图。如果images仅通过您控制的内部进程(系统)保存到db中。绘图可能对您很有用。