public static Image addWaterMark(Image orig, Image watermark, Uniqueizer.eWatermarkPosition position) { // 0 w/3 w*2/3 double resolution = Globals.settings.GetWatermarkResolution(); Point location = new Point(); Rectangle waterMark = new Rectangle(); waterMark.Width = (int)Math.Round(orig.Width / resolution); waterMark.Height = (int)Math.Round(((orig.Width / resolution) * watermark.Height) / watermark.Width); //[orig.Width / 3] / x : watermark.Width / watermark.Height //x = ((orig.Width / 3) * watermark.Height) / waterMark.Width using (Graphics g = Graphics.FromImage(orig)) { switch (position) { case Uniqueizer.eWatermarkPosition.UP_LEFT: case Uniqueizer.eWatermarkPosition.UP_MIDDLE: case Uniqueizer.eWatermarkPosition.UP_RIGHT: location.Y = 0; break; case Uniqueizer.eWatermarkPosition.CENTER_LEFT: case Uniqueizer.eWatermarkPosition.CENTER_MIDDLE: case Uniqueizer.eWatermarkPosition.CENTER_RIGHT: location.Y = orig.Height / 2 - (waterMark.Height / 2); break; case Uniqueizer.eWatermarkPosition.DOWN_LEFT: case Uniqueizer.eWatermarkPosition.DOWN_MIDDLE: case Uniqueizer.eWatermarkPosition.DOWN_RIGHT: location.Y = orig.Height - waterMark.Height; break; } switch (position) { case Uniqueizer.eWatermarkPosition.CENTER_LEFT: case Uniqueizer.eWatermarkPosition.DOWN_LEFT: case Uniqueizer.eWatermarkPosition.UP_LEFT: location.X = 0; break; case Uniqueizer.eWatermarkPosition.CENTER_MIDDLE: case Uniqueizer.eWatermarkPosition.DOWN_MIDDLE: case Uniqueizer.eWatermarkPosition.UP_MIDDLE: location.X = orig.Width / 2 - waterMark.Width / 2; break; case Uniqueizer.eWatermarkPosition.CENTER_RIGHT: case Uniqueizer.eWatermarkPosition.DOWN_RIGHT: case Uniqueizer.eWatermarkPosition.UP_RIGHT: location.X = orig.Width - waterMark.Width; break; } g.DrawImage(watermark, location.X, location.Y, waterMark.Width, waterMark.Height); g.Dispose(); } return(orig); }
public static void ProcessPicture(string dir, string path, int pixel_count, Image watermark, Uniqueizer.eWatermarkPosition position) { try { Log.AddMessage("dir: " + dir + " path: " + path + " pixel_count: " + pixel_count.ToString() + " image: " + (watermark == null ? "null" : "normal " + watermark.RawFormat.ToString())); FileInfo fInfo = new FileInfo(path); DirectoryInfo dParentSave = fInfo.Directory; string save_dir = dir + "_lightning" + ((dParentSave != fInfo.Directory) ? "\\" + fInfo.Directory.Name : ""); string save_file = save_dir + "\\0" + fInfo.Name; Random rand = new Random((int)DateTime.Now.Ticks + DateTime.Now.Millisecond + DateTime.Now.Second + DateTime.Now.Minute); if (!Directory.Exists(save_dir)) { Directory.CreateDirectory(save_dir); } Image image = getImage(path); if (Globals.settings.Instance.bUseWatermark) { if (position == Uniqueizer.eWatermarkPosition.RANDOM) { image = addWaterMark(image, watermark, rand, Globals.settings.Instance.iWatermarksCount); } else { image = addWaterMark(image, watermark, position); } } if (Globals.settings.Instance.bRandomRotate) { image = rotateImage(image, rand.NextDouble() + rand.Next(-1, 1)); } if (Globals.settings.Instance.bRandomCrop) { Point crop_right = new Point(rand.Next(3, 10), rand.Next(3, 10)); image = cropImage(image, new Rectangle(crop_right.X, crop_right.Y, image.Width - crop_right.X, image.Height - crop_right.Y)); } image.Save(save_file); image.Dispose(); GC.Collect(); } catch (Exception e) { Log.AddMessage(e.Message + e.StackTrace); } }