コード例 #1
0
ファイル: ImageUtility.cs プロジェクト: zhuangshaoying/ZJB
        private static void WriteStringToReangle(Graphics gfx, SlantWatermark watermark, Rectangle rectangle)
        {
            string text          = GetRepeatString(gfx, watermark.Text, watermark.Spacing, watermark.Font, rectangle.Width);
            string alternateText = text.Substring(text.Length - watermark.Text.Length / 2) + watermark.Spacing + text;

            int centerY = rectangle.Height / 2 + rectangle.Y;

            gfx.DrawString(text, watermark.Font, watermark.Brush, rectangle.X, centerY);

            bool alternate = true;

            for (int pos = centerY - watermark.Indent; pos > rectangle.Y; pos -= watermark.Indent, alternate = !alternate)
            {
                gfx.DrawString(alternate ? alternateText : text, watermark.Font, watermark.Brush, rectangle.X, pos);
                gfx.DrawString(alternate ? alternateText : text, watermark.Font, watermark.Brush, rectangle.X, centerY * 2 - pos);
            }
        }
コード例 #2
0
ファイル: ImageUtility.cs プロジェクト: zhuangshaoying/ZJB
        public static Image Mark(Image originalImage, Image waterMark, SlantWatermark slantWatermark = null, TextUnderLogo textUnderLogo = null)
        {
            const int minWidthRate  = 2;
            const int minHeightRate = 3;

            if (originalImage.Width / waterMark.Width < minWidthRate || originalImage.Height / waterMark.Height < minHeightRate)
            {
                return(new Bitmap(originalImage));
            }

            Image newImage = new Bitmap(originalImage);

            using (Graphics gfx = Graphics.FromImage(newImage))
            {
                gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                gfx.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                if (slantWatermark != null)
                {
                    AddSlantWatermark(gfx, newImage.Width, newImage.Height, slantWatermark);
                }

                int marginBottom     = 20;
                int marginLeft       = 20;
                int logoMarginBottom = marginBottom;

                if (textUnderLogo != null)
                {
                    SizeF fontSize = gfx.MeasureString(textUnderLogo.Text, textUnderLogo.Font);

                    logoMarginBottom += (int)fontSize.Height;

                    gfx.DrawString(textUnderLogo.Text, textUnderLogo.Font, textUnderLogo.Brush,
                                   originalImage.Width - fontSize.Width - marginLeft, originalImage.Height - fontSize.Height - marginBottom);
                }

                gfx.DrawImage(waterMark,
                              new Rectangle(originalImage.Width - waterMark.Width - marginLeft,
                                            originalImage.Height - waterMark.Height - logoMarginBottom, waterMark.Width, waterMark.Height),
                              0, 0, waterMark.Width, waterMark.Height, GraphicsUnit.Pixel);
            }

            return(newImage);
        }
コード例 #3
0
ファイル: ImageUtility.cs プロジェクト: zhuangshaoying/ZJB
        private static void AddSlantWatermark(Graphics gfx, int width, int height, SlantWatermark watermark)
        {
            int watermarkWidth = Convert.ToInt32(height / 2.0 + Math.Sqrt(3) * width / 2);

            int watermarkHeight = Convert.ToInt32(width / 2.0 + Math.Sqrt(3) * height / 2);

            int centerX = Convert.ToInt32(width / 2);

            int centerY = Convert.ToInt32(height / 2);

            Rectangle rectangle = new Rectangle(centerX - watermarkWidth / 2, centerY - watermarkHeight / 2, watermarkWidth, watermarkHeight);

            gfx.TranslateTransform(centerX, centerY);

            gfx.RotateTransform(-30);

            gfx.TranslateTransform(-centerX, -centerY);

            WriteStringToReangle(gfx, watermark, rectangle);

            gfx.ResetTransform();
        }
コード例 #4
0
ファイル: ImageUtility.cs プロジェクト: zhuangshaoying/ZJB
        public static void Mark(string originImagePath, string watermarkImagePath, string outputFolder, SlantWatermark slantWatermark = null, TextUnderLogo textUnderLogo = null)
        {
            string fileName = Path.GetFileName(originImagePath);

            Mark(originImagePath, watermarkImagePath, outputFolder, fileName, slantWatermark, textUnderLogo);
        }
コード例 #5
0
ファイル: ImageUtility.cs プロジェクト: zhuangshaoying/ZJB
        public static void Mark(string originImagePath, string watermarkImagePath, string outputFolder, string fileName, SlantWatermark slantWatermark = null, TextUnderLogo textUnderLogo = null)
        {
            if (!Directory.Exists(outputFolder))
            {
                Directory.CreateDirectory(outputFolder);
            }

            string newImagePath = Path.Combine(outputFolder, fileName);

            Image newImage;

            using (Image originImage = Image.FromFile(originImagePath)
                   , watermarkImage = Image.FromFile(watermarkImagePath))
            {
                newImage = Mark(originImage, watermarkImage, slantWatermark, textUnderLogo);
            }

            //放在这里确保newImagePath与originImagePath相同时能正常保存
            newImage.Save(newImagePath, ImageFormat.Jpeg);
            newImage.Dispose();
        }