TIFF到JPEG转换导致图像尺寸变大

时间:2010-12-15 19:18:30

标签: .net c#-4.0

我有以下函数,它将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倍或更多。我做错了吗?

感谢您的帮助

2 个答案:

答案 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;
}