当前位置: 首页 > news >正文

Iori的工具箱 之 C# 实现多个图片合为一个Tiff

功能:


合并多个图片为一个TIFF文件
效果图:


第二页


第三页



功能函数实现:

     public bool SaveMultipage(Image[] bmp, string location, string type)
        {
            if (bmp != null)
            {
                try
                {
                    File.Delete(location);
                    
                    var codecInfo = getCodecForstring(type);

                    if (bmp.Length == 1)
                    {
                        var iparams = new EncoderParameters(1);
                        var iparam = Encoder.Compression;
                        var iparamPara = new EncoderParameter(iparam, (long)(EncoderValue.CompressionNone));

                        iparams.Param[0] = iparamPara;
                        bmp[0].Save(location, codecInfo, iparams);
                    }
                    else if (bmp.Length > 1)
                    {
                        // Save the first page (frame).
                        var encoderParam1 = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
                        var encoderParam2 = new EncoderParameter(Encoder.Compression,
                                                                 (long) EncoderValue.CompressionNone);

                        var encoderParams = new EncoderParameters(2);
                        encoderParams.Param[0] = encoderParam1;
                        encoderParams.Param[1] = encoderParam2;

                        bmp[0].Save(location, codecInfo, encoderParams);

                        for (int i = 1; i < bmp.Length; i++)
                        {
                            if (bmp[i] == null)
                                break;

                            encoderParams.Param[0] = encoderParam1;
                            encoderParams.Param[1] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
                            bmp[0].SaveAdd(bmp[i], encoderParams);
                        }

                        encoderParams.Param[0] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush);
                        bmp[0].SaveAdd(encoderParams);
                    }
                    return true;
                }
                catch (Exception ee)
                {
                    throw new Exception(ee.Message + "  Error in saving as multipage ");
                }
            }

            return false;
        }

        private ImageCodecInfo getCodecForstring(string type)
        {
            var info = ImageCodecInfo.GetImageEncoders();

            return (info.Select(t => new {t, enumName = type})
                        .Where(@t1 => @t1.t.FormatDescription.Equals(@t1.enumName))
                        .Select(@t1 => @t1.t))
                .FirstOrDefault();
        }


代码说明:参数:图片数组,保存文件的位置,保存类型


单元测试代码实现:

 

  [TestMethod]
        public void Multiple_Image_Into_1Tiff_With_MultiplePages()
        {
            const string multipleImgPath = "C:\\Users\\Public\\Pictures\\Sample Pictures";
            var files = new DirectoryInfo(multipleImgPath).GetFiles("*.jpg", SearchOption.TopDirectoryOnly);
            Assert.IsTrue(files.Length > 1);
            var imgs = files.Select(f => Image.FromFile(f.FullName));
            SaveMultipage(imgs.ToArray(), "C:\\multiplePageTiff.tiff", "TIFF");

            const string singleImgPath = @"C:\Users\{your_pc_name}\Pictures\SingleImg";
            files = new DirectoryInfo(singleImgPath).GetFiles("*.jpg", SearchOption.TopDirectoryOnly);
            Assert.IsTrue(files.Length == 1);

            imgs = files.Select(f => Image.FromFile(f.FullName));
            SaveMultipage(imgs.ToArray(), "C:\\multiplePageTiff_Single.tiff", "TIFF");
        }


代码说明:

1.测试多个图片的转化

2.测试单个突破的转化


相关文章:

  • Asp.Net MVC4 系列--进阶篇之View
  • Xp+Windows 7硬盘安装 体验心得
  • Javascript 实现的StopWatch
  • Asp.Net MVC4系列--进阶篇之Helper(1)
  • 玻璃效果
  • Asp.Net MVC4 系列--进阶篇之Helper(2)
  • 主流杀毒软件多已支持windows7
  • IE 异常_doPostBack is undefined
  • 推荐一款很经典的网络电话——阿里通网络电话
  • Asp.Net MVC4系列--进阶篇之AJAX
  • Asp.Net MVC4 系列--进阶篇之Model(1)
  • Windows 7安装过程全体验!(42图)
  • Asp.Net MVC4 系列--进阶篇之Model(2)
  • Windows7下系统实用小工具
  • log4net 使用与配置 每天一份log文件
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • co.js - 让异步代码同步化
  • Iterator 和 for...of 循环
  • java第三方包学习之lombok
  • Laravel Telescope:优雅的应用调试工具
  • Logstash 参考指南(目录)
  • MQ框架的比较
  • Web设计流程优化:网页效果图设计新思路
  • 简单数学运算程序(不定期更新)
  • 码农张的Bug人生 - 见面之礼
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 入门级的git使用指北
  • 深度学习在携程攻略社区的应用
  • 想写好前端,先练好内功
  • 学习使用ExpressJS 4.0中的新Router
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​人工智能书单(数学基础篇)
  • # Panda3d 碰撞检测系统介绍
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (09)Hive——CTE 公共表达式
  • (a /b)*c的值
  • (ibm)Java 语言的 XPath API
  • (poj1.3.2)1791(构造法模拟)
  • (办公)springboot配置aop处理请求.
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (过滤器)Filter和(监听器)listener
  • (转)项目管理杂谈-我所期望的新人
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET命令行(CLI)常用命令
  • .Net下的签名与混淆
  • .NET应用架构设计:原则、模式与实践 目录预览