【问题标题】:TIFF to JPEG Conversion Results in a larger image sizeTIFF 到 JPEG 转换导致更大的图像尺寸
【发布时间】:2010-12-15 19:18:30
【问题描述】:

我有以下函数,它从较旧的数据库中获取存储为 blobtiff 并将其转换为 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 倍或更多。我做错了什么吗?

感谢您的帮助

【问题讨论】:

  • 如果您的 TIFF 图像使用有损压缩,那么除非您想降低质量因子,否则不要使用它。
  • TIFF == 数千种不兼容的文件格式。我试了一下,祝你好运。

标签: .net c#-4.0


【解决方案1】:

您可以尝试更改 JPEG 压缩级别: http://msdn.microsoft.com/en-us/library/bb882583.aspx

不过,JPEG 并不总是比 TIFF 更好。 TIFF 是一种容器格式,可以使用各种图像压缩格式,因此您的图像已经可以使用另一种方法进行压缩。

【讨论】:

  • +1:指出TIFF 支持不止一种压缩格式。
【解决方案2】:

您需要添加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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多