.net TIFF到JPEG的转换会产生更大的图像大小
我有下面的函数,它从旧数据库中获取存储为.net TIFF到JPEG的转换会产生更大的图像大小,.net,c#-4.0,.net,C# 4.0,我有下面的函数,它从旧数据库中获取存储为blob的tiff,并将其转换为jpeg,然后将其存储为varbinary(max)到sql server中 public byte[] ConvertImage(byte[] imageData) { if (imageData == null) return null; using (var image = Image.FromStream(new MemoryStream(imageData))) { usin
blob
的tiff
,并将其转换为jpeg
,然后将其存储为varbinary(max)
到sql server
中
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倍或更多。我做错什么了吗
感谢您的帮助您可以尝试更改JPEG压缩级别:
不过,JPEG并不总是比TIFF好。TIFF是一种容器格式,可以使用各种图像压缩格式,因此您的图像可以使用其他方法进行压缩。您需要添加一个
编码器参数来提高质量。尝试以下方法:
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;
}
如果您的TIFF图像使用有损压缩,那么除非您想降低质量因数,否则不要使用它。TIFF==数千种不兼容的文件格式。我试了一下,祝你好运。+1:感谢你指出TIFF
支持多种压缩格式。