用图片的base64字符串 合成tiff

<pre name="code" class="csharp"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">用官方给出的合成的图片到tiff的例子改成从 用图片的base64字符串 合成tiff。</span></span>

 
 
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">                  /// <summary></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="csharp">        /// 将base64转化成图片
        /// 如果有多个图片的base64 则将文件合成或单独生成一个tiff图片
        /// </summary>
        /// <param name="base64str">图片的 base64 string[] </param>
        /// <param name="fileNames">当不合成时 单独文件名的 List</param>
        /// <param name="path">要保存的目录名</param>
        /// <param name="isMultipage">是否合成为一个图片</param>
        /// <param name="error">out 一个 List<int> 其中包含出错的 index </param>
        /// <returns>生成文件所在的路径的数组</returns>
        public static string[] base64ToTiff(string[] base64str, string[] fileNames,string path, bool isMultipage,out List<int> error)
        {
            List<int> errorlist = new List<int>();
            EncoderParameters encoderParams = new EncoderParameters(1);
            ImageCodecInfo tiffCodecInfo = ImageCodecInfo.GetImageEncoders()
                .First(ie => ie.MimeType == "image/tiff");

            string[] tiffPaths = null;
            if (isMultipage)
            {
                tiffPaths = new string[1];
                Image tiffImg = null;
                try
                {
                    for (int i = 0; i < base64str.Length; i++)
                    {
                        if (i == 0)
                        {
                            tiffPaths[i] = String.Format("{0}\\{1}.tif",
                                path,fileNames[i]);

                            // Initialize the first frame of multipage tiff.

                            using (Bitmap mybmp = Base64StringToImage(base64str[i]))
                            {
                                //克隆Bitmap对象 解决GUI+ 的一般性错误
                                tiffImg = new Bitmap(mybmp);
                            }
                            encoderParams.Param[0] = new EncoderParameter(
                                System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
                            tiffImg.Save(tiffPaths[i], tiffCodecInfo, encoderParams);
                        }
                        else
                        {
                            // Add additional frames. 
                            encoderParams.Param[0] = new EncoderParameter(
                                System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
                            using (Image frame = Base64StringToImage(base64str[i]))
                            {
                                if (frame == null)
                                {
                                    errorlist.Add(i);
                                    continue;
                                }
				//不这样做会发生GUI+一般性错误
                                using (Bitmap img = new Bitmap(frame))
                                {
                                    tiffImg.SaveAdd(img, encoderParams);
                                }
                            }
                        }

                        if (i == base64str.Length - 1)
                        {
                            // When it is the last frame, flush the resources and closing. 
                            encoderParams.Param[0] = new EncoderParameter(
                                System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
                            tiffImg.SaveAdd(encoderParams);
                        }
                    }
                }
                finally
                {
                    if (tiffImg != null)
                    {
                        tiffImg.Dispose();
                        tiffImg = null;
                    }

                }
            }
            else
            {
                tiffPaths = new string[base64str.Length];
                for (int i = 0; i < base64str.Length; i++)
                {
                    tiffPaths[i] = String.Format("{0}\\{1}.tif",
                        path,fileNames[i]);

                    // Save as individual tiff files. 
                    using (Image tiffImg = Base64StringToImage(base64str[i]))
                    {
                        tiffImg.Save(tiffPaths[i], ImageFormat.Tiff);
                    }
                }
            }
            error = errorlist;
            return tiffPaths;
        }
        /// <summary>
        /// base64字符串转图片
        /// </summary>
        /// <param name="txtStr">base64格式的图片字符串</param>
        /// <returns>图片</returns>
        private static Bitmap Base64StringToImage(string txtStr)
        {
            try
            {
                byte[] arr = Convert.FromBase64String(txtStr);
                using (MemoryStream ms = new MemoryStream(arr))
                {
                    Bitmap bmp = new Bitmap(ms);
                    return bmp;
                }

            }
            catch (Exception ex)
            {
                return null;
            }
        }


 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值