我正在尝试将图片保存为缩略图。我怎么能这样做?
这是我的行动控制:
[HttpPost]
[ValidateInput(false)]
public ActionResult banner_create(banner banner, HttpPostedFileBase file)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/banner_image/"), fileName);
var extension = Path.GetExtension(path);
file.SaveAs(path);
banner.banner_image_description = extension;
banner.banner_image_name = fileName;
if (ModelState.IsValid)
{
db.banner.AddObject(banner);
db.SaveChanges();
return RedirectToAction("index");
}
return View(banner);
}
答案 0 :(得分:2)
以下代码应该可以正常工作。 我添加了一些评论,所以你可以看到发生了什么。
// First, we convert an HttpPostedFileBase to an Image
// (Please note that you need to reference System.Drawing.dll)
using (var image = Image.FromStream(httpPostedFileBase.InputStream, true, true))
{
// Then we create a thumbnail.
// The simplest way is using Image.GetThumbnailImage:
using (var thumb = image.GetThumbnailImage(
thumbWidth,
thumbHeight,
() => false,
IntPtr.Zero))
{
// Finally, we encode and save the thumbnail.
var jpgInfo = ImageCodecInfo.GetImageEncoders()
.Where(codecInfo => codecInfo.MimeType == "image/jpeg").First();
using (var encParams = new EncoderParameters(1))
{
// Your output path
string outputPath = "...";
// Image quality (should be in the range [0..100])
long quality = 90;
encParams.Param[0] = new EncoderParameter(Encoder.Quality, quality);
thumb.Save(outputPath, jpgInfo, encParams);
}
}
}
答案 1 :(得分:0)
这是C#函数,您可以使用它以任何方式调整图像大小。在您的特定情况下,使其成为特定大小的缩略图。
需要System.Drawing.Image
和int size
才能获得其宽度并返回System.Drawing.Image
。
现在,这个可以肯定,我在我当前的项目中使用它并且它很好地完成了工作。
public System.Drawing.Image ScaleBySize(System.Drawing.Image imgPhoto, int size)
{
var logoSize = size;
float sourceWidth = imgPhoto.Width;
float sourceHeight = imgPhoto.Height;
float destHeight;
float destWidth;
const int sourceX = 0;
const int sourceY = 0;
const int destX = 0;
const int destY = 0;
// Resize Image to have the height = logoSize/2 or width = logoSize.
// Height is greater than width, set Height = logoSize and resize width accordingly
if (sourceWidth > (2 * sourceHeight))
{
destWidth = logoSize;
destHeight = sourceHeight * logoSize / sourceWidth;
}
else
{
int h = logoSize / 2;
destHeight = h;
destWidth = sourceWidth * h / sourceHeight;
}
// Width is greater than height, set Width = logoSize and resize height accordingly
var bmPhoto = new Bitmap((int)destWidth, (int)destHeight, PixelFormat.Format32bppPArgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
using (Graphics grPhoto = Graphics.FromImage(bmPhoto))
{
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
grPhoto.DrawImage(imgPhoto,
new Rectangle(destX, destY, (int)destWidth, (int)destHeight),
new Rectangle(sourceX, sourceY, (int)sourceWidth, (int)sourceHeight),
GraphicsUnit.Pixel);
grPhoto.Dispose();
}
return bmPhoto;
}
希望这会对你有所帮助。