我有以下函数,它将tiff
存储为blob
来自较旧的数据库并将其转换为jpeg
,然后将其存储为varbinary(max)
sql server
1}}。
public byte[] ConvertImage(byte[] imageData)
{
if (imageData == null) return null;
using (var image = Image.FromStream(new MemoryStream(imageData)))
{
using (Bitmap bmp = new Bitmap(image))
{
using (MemoryStream outStream = new MemoryStream())
{
bmp.Save(outStream, ImageFormat.Jpeg);
return outStream.ToArray();
}
}
}
}
由于某种原因,转换导致图像的大小增加10倍或更多。我做错了吗?
感谢您的帮助
答案 0 :(得分:2)
您可以尝试更改JPEG压缩级别: http://msdn.microsoft.com/en-us/library/bb882583.aspx
然而,JPEG并不总是比TIFF好。 TIFF是一种容器格式,可以使用各种图像压缩格式,因此您的图像可以使用其他方法进行压缩。
答案 1 :(得分:1)
您需要为质量添加EncoderParameter
。尝试类似:
public byte[] ConvertImage(byte[] imageData)
{
if (imageData == null) return null;
using (var image = Image.FromStream(new MemoryStream(imageData)))
{
using (Bitmap bmp = new Bitmap(image))
{
using (MemoryStream outStream = new MemoryStream())
{
var ratio = new EncoderParameter(Encoder.Quality, 50L); //adjust this value for desired compression
var codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
bmp.Save(outStream, GetEncoder(ImageFormat.Jpeg), codecParams);
return outStream.ToArray();
}
}
}
}
ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
if (codec.FormatID == format.Guid)
return codec;
return null;
}