不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

C#图片处理-写文字、水印、压缩

/// <summary>
        /// 写文字
        /// </summary>
        /// <param name="imgPhoto">源图</param>
        /// <param name="txt">文字</param>
        /// <param name="font">字体</param>
        /// <param name="color">颜色</param>
        /// <param name="point">文字左上角</param>
        /// <returns></returns>
        public static Image DrawString(Image imgPhoto, string txt, Font font, Color color, PointF point)
        {
            //与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率
            Bitmap bmWatermark = new Bitmap(imgPhoto);
            bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

            //继续,将水印图片装载到一个绘图画面grWatermark
            Graphics grWatermark = Graphics.FromImage(bmWatermark);
            SolidBrush semiTransBrush2 = new SolidBrush(color);

            //封装文本布局信息(如对齐、文字方向和 Tab 停靠位),显示操作(如省略号插入和国家标准 (National) 数字替换)和 OpenType 功能。
            StringFormat StrFormat = new StringFormat();

            //定义需要印的文字居中对齐
            StrFormat.Alignment = StringAlignment.Near;


            grWatermark.DrawString(txt,                                    //string of text
                                font,                                         //font
                                semiTransBrush2,                            //Brush
                                point,  //Position
                                StrFormat);

            grWatermark.Dispose();
            imgPhoto.Dispose();

            return bmWatermark;
        }

        /// <summary>
        /// 写图片
        /// </summary>
        /// <param name="imgPhoto">源图</param>
        /// <param name="watermark">水印图</param>
        /// <param name="point">图片左上角</param>
        /// <returns></returns>
        public static Image DrawImage(Image imgPhoto, Image watermark, Point point)
        {
            //与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率
            Bitmap bmWatermark = new Bitmap(imgPhoto);
            bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

            // 获取水印图片的高度和宽度
            int wmWidth = watermark.Width;
            int wmHeight = watermark.Height;

            //继续,将水印图片装载到一个绘图画面grWatermark
            Graphics grWatermark = Graphics.FromImage(bmWatermark);



            // 第二次绘图,把水印印上去
            grWatermark.DrawImage(watermark,
                                new Rectangle(point.X,
                                     point.Y,
                                     wmWidth,
                                     wmHeight),
                                 0,
                                 0,
                                 wmWidth,
                                 wmHeight,
                                 GraphicsUnit.Pixel);

            grWatermark.Dispose();
            imgPhoto.Dispose();

            return bmWatermark;
        }

        /// <summary>
        /// GDI压缩图片
        /// </summary>
        /// <param name="bmp">传入参数Bitmap</param>
        /// <returns></returns>
        public static byte[] ImageGdi(Bitmap bmp)
        {
            Bitmap xbmp = new Bitmap(bmp);
            MemoryStream ms = new MemoryStream();
            xbmp.Save(ms, ImageFormat.Jpeg);
            byte[] buffer;
            ms.Flush();
            if (ms.Length > 95000)
            {
                //buffer = ms.GetBuffer();
                double new_width = 0;
                double new_height = 0;

                Image m_src_image = Image.FromStream(ms);
                if (m_src_image.Width >= m_src_image.Height)
                {
                    new_width = 1024;
                    new_height = new_width * m_src_image.Height / (double)m_src_image.Width;
                }
                else if (m_src_image.Height >= m_src_image.Width)
                {
                    new_height = 768;
                    new_width = new_height * m_src_image.Width / (double)m_src_image.Height;
                }

                Bitmap bbmp = new Bitmap((int)new_width, (int)new_height, m_src_image.PixelFormat);
                Graphics m_graphics = Graphics.FromImage(bbmp);
                m_graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                m_graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                m_graphics.DrawImage(m_src_image, 0, 0, bbmp.Width, bbmp.Height);

                ms = new MemoryStream();

                bbmp.Save(ms, ImageFormat.Jpeg);
                buffer = ms.GetBuffer();
                ms.Close();

                return buffer;
            }
            else
            {
                buffer = ms.GetBuffer();
                ms.Close();
                return buffer;
            }
        }

 

不允许评论
粤ICP备17049187号-1