public void ResizeWaterMark(HttpPostedFileBase originalImage, int maxWidth, int maxHeight, string path)
        {
            var originalBmp = new Bitmap(originalImage.InputStream);

            //Check EXIF
            if (originalBmp.PropertyIdList.Contains(0x0112))
            {
                int rotationValue = originalBmp.GetPropertyItem(0x0112).Value[0];
                switch (rotationValue)
                {
                case 1:     // landscape, do nothing
                    break;

                case 8:     // rotated 90 right
                    // de-rotate:
                    originalBmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    break;

                case 3:     // bottoms up
                    originalBmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    break;

                case 6:     // rotated 90 left
                    originalBmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    break;
                }
            }

            float origWidth  = originalBmp.Width;
            float origHeight = originalBmp.Height;
            float sngRatio;

            if (origWidth > maxWidth)
            {
                sngRatio   = maxWidth / origWidth;
                origWidth  = maxWidth;
                origHeight = origHeight * sngRatio;
            }

            if (origHeight > maxHeight)
            {
                sngRatio   = maxHeight / origHeight;
                origHeight = maxHeight;
                origWidth  = origWidth * sngRatio;
            }

            var bmPhoto = new Bitmap((int)origWidth, (int)origHeight, PixelFormat.Format24bppRgb);

            bmPhoto.SetResolution(72, 72);

            var grPhoto = Graphics.FromImage(bmPhoto);

            grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
            //grPhoto.DrawImage(originalBmp, new Rectangle(0, 0, (int)origWidth, (int)origHeight), 0, 0, origWidth, origHeight, GraphicsUnit.Pixel);

            grPhoto.DrawImage(originalBmp, 0, 0, origWidth, origHeight);

            if (origHeight >= 400 && origWidth >= 400)
            {
                var bmWatermark = new Bitmap(bmPhoto);
                bmWatermark.SetResolution(originalBmp.HorizontalResolution, originalBmp.VerticalResolution);

                var grWatermark = Graphics.FromImage(bmWatermark);

                //var imageAttributes = new ImageAttributes();
                //var colorMap = new ColorMap { OldColor = Color.FromArgb(255, 0, 255, 0), NewColor = Color.FromArgb(0, 0, 0, 0) };

                //ColorMap[] remapTable = { colorMap };

                //imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

                //float[][] colorMatrixElements = { new[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, new[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, new[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, new[] { 0.0f, 0.0f, 0.0f, 0.3f, 0.0f }, new[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } };

                //var wmColorMatrix = new ColorMatrix(colorMatrixElements);

                //imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                var imgWatermark = new Bitmap(Server.MapPath("/content/images/logo-watermark.png"));
                var wmWidth      = imgWatermark.Width;
                var wmHeight     = imgWatermark.Height;

                var xPosOfWm = 50; //(int)((origWidth - wmWidth) - 10);
                var yPosOfWm = 50; //(int)((origHeight - wmHeight) - 10);
                                   //const int yPosOfWm = 10;

                //grWatermark.DrawImage(imgWatermark, new Rectangle(xPosOfWm, yPosOfWm, wmWidth, wmHeight), 0, 0, wmWidth, wmHeight, GraphicsUnit.Pixel, imageAttributes);

                grWatermark.DrawImage(imgWatermark, new Rectangle(xPosOfWm, yPosOfWm, wmWidth, wmHeight), 0, 0, wmWidth, wmHeight, GraphicsUnit.Pixel);
                originalBmp = bmWatermark;
                grPhoto.Dispose();
                grWatermark.Dispose();
                imgWatermark.Dispose();
            }

            //var jgpEncoder = GetEncoder(ImageFormat.Jpeg);
            var mimeType   = HtmlHelpers.GetMimeType(originalImage.FileName);
            var jgpEncoder = HtmlHelpers.GetEncoderInfo(mimeType);

            var myEncoder           = Encoder.Quality;
            var myEncoderParameters = new EncoderParameters(1);

            var myEncoderParameter = new EncoderParameter(myEncoder, 90L);

            myEncoderParameters.Param[0] = myEncoderParameter;

            originalBmp.Save(path, jgpEncoder, myEncoderParameters);
            //originalBmp.Save(path, ImageFormat.Jpeg);

            originalBmp.Dispose();
        }
        public static void Resize(HttpPostedFileBase originalImage, int maxWidth, int maxHeight, string path, string font = null, int fontsize = 0)
        {
            var originalBmp = new Bitmap(originalImage.InputStream);

            //Check EXIF
            if (originalBmp.PropertyIdList.Contains(0x0112))
            {
                int rotationValue = originalBmp.GetPropertyItem(0x0112).Value[0];
                switch (rotationValue)
                {
                case 1:     // landscape, do nothing
                    break;

                case 8:     // rotated 90 right
                    // de-rotate:
                    originalBmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    break;

                case 3:     // bottoms up
                    originalBmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    break;

                case 6:     // rotated 90 left
                    originalBmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    break;
                }
            }

            float origWidth  = originalBmp.Width;
            float origHeight = originalBmp.Height;
            float sngRatio;

            if (origWidth > maxWidth)
            {
                sngRatio   = maxWidth / origWidth;
                origWidth  = maxWidth;
                origHeight = origHeight * sngRatio;
            }

            if (origHeight > maxHeight)
            {
                sngRatio   = maxHeight / origHeight;
                origHeight = maxHeight;
                origWidth  = origWidth * sngRatio;
            }

            var newBmp    = new Bitmap(originalBmp, (int)origWidth, (int)origHeight);
            var oGraphics = Graphics.FromImage(newBmp);

            oGraphics.SmoothingMode      = SmoothingMode.HighQuality;
            oGraphics.InterpolationMode  = InterpolationMode.HighQualityBicubic;
            oGraphics.TextRenderingHint  = TextRenderingHint.AntiAliasGridFit;
            oGraphics.CompositingQuality = CompositingQuality.HighQuality;

            if (font != null)
            {
                using (var font1 = new Font(font, fontsize, FontStyle.Bold, GraphicsUnit.Pixel))
                {
                    var rect1 = new Rectangle(0, 0, (int)origWidth - 1, (int)origHeight - 1);
                    var rect2 = new Rectangle(0, 0, (int)origWidth, (int)origHeight);

                    var stringFormat = new StringFormat {
                        Alignment = StringAlignment.Far, LineAlignment = StringAlignment.Far
                    };

                    oGraphics.DrawString("www.vico.vn", font1, new SolidBrush(Color.FromArgb(255, Color.Black)), rect1, stringFormat);
                    oGraphics.DrawString("www.vico.vn", font1, new SolidBrush(Color.FromArgb(255, Color.White)), rect2, stringFormat);
                    //oGraphics.DrawRectangle(Pens.DarkRed, rect1);
                }
            }

            oGraphics.DrawImage(newBmp, 0, 0, origWidth, origHeight);

            //var jgpEncoder = GetEncoder(ImageFormat.Jpeg);
            var mimeType   = HtmlHelpers.GetMimeType(originalImage.FileName);
            var jgpEncoder = HtmlHelpers.GetEncoderInfo(mimeType);

            var myEncoder           = Encoder.Quality;
            var myEncoderParameters = new EncoderParameters(1);

            var myEncoderParameter = new EncoderParameter(myEncoder, 90L);

            myEncoderParameters.Param[0] = myEncoderParameter;

            newBmp.Save(path, jgpEncoder, myEncoderParameters);

            originalBmp.Dispose();
            newBmp.Dispose();
            oGraphics.Dispose();
        }