使用C#生成TIFF会在不同的计算机上生成不同的文件

 灵11135_748_744_769 发布于 2022-12-26 23:39

我正在使用以下代码来测试创建位图并将其保存为TIFF文件.代码工作正常,但在我的一台计算机上生成的TIFF产生的MD5哈希值与我运行代码的其他几台计算机不同.所有计算机上的图像都相同,但由于某种原因,文件略有不同.使用十六进制编辑器进行检查,看起来页脚中的差异仅为4个字节.我使用LinqPad执行下面的代码.结果如下:

CPU 1 (Windows 7) Hash:    7A-F7-F4-C5-1A-02-10-D5-FC-C9-40-A1-4F-18-D7-FE
Others (Windows 7/8) Hash: 0D-5D-23-58-2F-DE-D5-B3-CB-73-31-E1-37-CF-32-3C

这是测试代码:

void Main()
{
    using(var bmp = new Bitmap(100, 100))
    {
        using(var g = Graphics.FromImage(bmp))
        {
            g.FillRectangle(Brushes.Blue, 10, 10, 80, 80);
        }

        using(var ms = new MemoryStream())
        {
            SaveBitmapAsTIFFToStream(ms, bmp);

            ms.Position = 0;
            var provider = new MD5CryptoServiceProvider();
            string hash = BitConverter.ToString(provider.ComputeHash(ms));

            Console.WriteLine(hash);
        }
    }
}

public static void SaveBitmapAsTIFFToStream(Stream stream, Bitmap b)
{
    b.Save(stream, FindEncoder(ImageFormat.Tiff), null);
}

private static ImageCodecInfo FindEncoder(ImageFormat fmt)
{
    return ImageCodecInfo.GetImageEncoders()
            .FirstOrDefault(info1 => info1.FormatID.Equals(fmt.Guid));
}

关于为什么会发生这种情况的任何想法?

1 个回答
  • TIFF文件可以存储大量数据和图像信息.

    我能够在两台不同的机器上运行你的LinqPad程序,并且都返回了0D-5D哈希.然后,我可以通过更改"控制面板">"显示"中的字体大小设置,在一台计算机上重现MD5哈希值.当我的字体设置为标准尺寸时,我得到了0D-5D哈希,当我将字体设置为125%时,我得到了7A-F7哈希.我猜测"CPU 1"上的字体大小设置为125%,并且.NET必须在TIFF文件中对此信息进行编码.

    2022-12-26 23:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有