加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# .net 高清压缩图片 合并图片方法

发布时间:2020-12-15 22:39:06 所属栏目:百科 来源:网络整理
导读:/// summary /// 合并宽度一样的图片 /// /summary /// param name="imgUrls"多张图片,按顺序合并/param /// param name="mergeImgPath"合成图片的具体地址/param /// returns/returns public bool MergeImg(Liststring imgUrls,string mergeImgPath) { img
 /// <summary>
        /// 合并宽度一样的图片
        /// </summary>
        /// <param name="imgUrls">多张图片,按顺序合并</param>
        /// <param name="mergeImgPath">合成图片的具体地址</param>
        /// <returns></returns>
        public bool MergeImg(List<string> imgUrls,string mergeImgPath)
        {
            imgUrls = imgUrls.OrderBy(c => c,new SemiNumericComparer()).ToList();
            using (var file = File.OpenWrite(mergeImgPath))
            {
                try
                {
                    Image image1 = System.Drawing.Image.FromFile(imgUrls[0]);
                    var width = image1.Width;
                    var height = image1.Height;

                    //计算整体
                    for (int i = 1; i < imgUrls.Count(); i++)
                    {
                        using (Image tempImg = System.Drawing.Image.FromFile(imgUrls[i]))
                        {
                            height += tempImg.Height;
                        }
                    }

                    using (Bitmap b = new Bitmap(width,height))
                    using (Graphics g = Graphics.FromImage(b))
                    {
                        g.CompositingMode = CompositingMode.SourceCopy;

                        //先画第一个图片
                        g.DrawImageUnscaled(image1,0);

                        //目前的高度
                        var currentHeight = image1.Height;

                        //画多张图片
                        for (int j = 1; j < imgUrls.Count(); j++)
                        {
                            using (Image currentImg = System.Drawing.Image.FromFile(imgUrls[j]))
                            {
                                g.DrawImageUnscaled(currentImg,currentHeight);
                                currentHeight += currentImg.Height;
                            }
                        }
                        b.Save(file,ImageFormat.Jpeg);

                    }
                    return true; ;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }



        /// <summary>
        /// Resize the image to the specified width and height.
        /// </summary>
        /// <param name="imagePath">The image to resize.</param>
        /// <param name="width">The width to resize to.</param>
        /// <param name="height">The height to resize to.</param>
        /// <returns>The resized image.</returns>
        public string ResizeImage(string imagePath,int width,int height)
        {
            if (imagePath.ToLower().Contains(".mp4"))
            {
                return "";
            }
            System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath);
            var destRect = new Rectangle(0,width,height);
            var destImage = new Bitmap(width,height);

            destImage.SetResolution(image.HorizontalResolution,image.VerticalResolution);

            using (var graphics = Graphics.FromImage(destImage))
            {
                graphics.CompositingMode = CompositingMode.SourceCopy;
                graphics.CompositingQuality = CompositingQuality.HighQuality;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

                using (var wrapMode = new ImageAttributes())
                {
                    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                    graphics.DrawImage(image,destRect,image.Width,image.Height,GraphicsUnit.Pixel,wrapMode);
                }
            }
            #region  提高压缩质量
            EncoderParameters ep = new EncoderParameters();
            long[] qy = new long[1];
            qy[0] = 1;//设置压缩的比例1-100,压缩比例越小越好
            EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,qy);
            ep.Param[0] = eParam;
            #endregion

            #region 设置imgcodeinfo为JPEG
            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo jpegICIinfo = null;
            for (int x = 0; x < arrayICI.Length; x++)
            {
                if (arrayICI[x].FormatDescription.Equals("JPEG"))
                {
                    jpegICIinfo = arrayICI[x];
                    break;
                }
            }
            #endregion
           
            var resizeImagePath = string.Empty;
            if (jpegICIinfo != null)
            {
                resizeImagePath = imagePath.Replace("jpg",width + "x" + height + ".jpg");
                destImage.Save(resizeImagePath,jpegICIinfo,ep);

            }
            return resizeImagePath;
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读