我正在从数据库加载图像,并希望根据某些输入动态调整它们的大小。
代码是这样的:
public ActionResult GetImage(string imageID, int? width, int? height, bool constrain)
{
ValidateImageInput(width, height, constrain);
ImageWithMimeType info = LoadFromDatabase(imageID);
if(info == null)
throw new HttpException(404, "Image with that name or id was not found.");
Resize(info.Bytedata, width, height, constrain, info.MimeType);
return File(info.Data, info.MimeType);
}
如何以保留编码类型等的方式实现Resize?我看过Image resizing efficiency in C# and .NET 3.5但是看不出它会如何保留编码 - 因为创建一个新的Bitmap肯定没有编码?
答案 0 :(得分:3)
private ImageFormat GetEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return new ImageFormat(codecs[i].FormatID);
return null;
}
这是我对http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing
上的代码略有不同的版本使用ImageFormat我可以简单地做
image.Save(dest, GetEncoderInfo(mimetype));
答案 1 :(得分:1)
要保留文件类型,您必须查看原始文件所具有的文件类型,并在保存文件时指定文件格式。
Bitmap b = new Bitmap("foo.jpg");
b.Save("bar.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
在您的情况下,您可能会保存到MemoryStream,稍后您将转换为字节数组(猜测您的info.Data
类型为byte[]
)。