/// <summary> /// 生成缩略图并打水印再保存。 /// </summary> /// <Param name="originalImageStream">Stream</Param> /// <Param name="strFileName">源图路径(物理路径)</Param> /// <Param name="thumbnailPath">缩略图路径(物理路径)</Param> /// <Param name="maxWidth">缩略图最大宽度</Param> /// <Param name="maxheight">缩略图最大高度</Param> /// <Param name="mode">生成缩略图的方式</Param> /// <Param name="waterPath">水印图路径(物理路径)</Param> /// <Param name="edge">水印图离原图边界的距离</Param> /// <Param name="position">加图片水印的位置</Param> /// <returns>是否成功</returns> public static bool MakeThumbnailWater(Stream originalImageStream, string strFileName, string thumbnailPath, int maxWidth, int maxheight, ThumbnailModeOption mode, string waterPath, int edge, WaterPositionOption position) { bool success = false; try { // 生成缩略图 MakeThumbnail(originalImageStream, strFileName, thumbnailPath, maxWidth, maxheight, mode); Stream stream = File.Open(thumbnailPath, FileMode.Open); //打水印 MakeWaterImage(stream, strFileName, thumbnailPath, waterPath, edge, position); success = true; } catch (Exception /*ex*/) { success = false; throw; } return(success); }
/// <summary> /// 加水印图片并保存。 /// </summary> /// <Param name="originalImageStream">Stream</Param> /// <Param name="strFileName">源图路径(物理路径)</Param> /// <Param name="savePath">图片保存路径(物理路径)</Param> /// <Param name="waterPath">水印图路径(物理路径)</Param> /// <Param name="edge">水印图离原图边界的距离</Param> /// <Param name="position">加图片水印的位置</Param> /// <returns>是否成功</returns> public static bool MakeWaterImage(Stream originalImageStream, string strFileName, string savePath, string waterPath, int edge, WaterPositionOption position) { bool success = false; int x = 0; int y = 0; Image waterImage = null; Image image = null; Bitmap bitmap = null; Graphics graphics = null; try { //加载原图 image = Image.FromStream(originalImageStream); //加载水印图 waterImage = Image.FromFile(waterPath); bitmap = new Bitmap(image); graphics = Graphics.FromImage(bitmap); int newEdge = edge; if (newEdge >= image.Width + waterImage.Width) { newEdge = 10; } switch (position) { case WaterPositionOption.LeftTop: x = newEdge; y = newEdge; break; case WaterPositionOption.CenterTop: x = (image.Width - waterImage.Width) / 2; y = newEdge; break; case WaterPositionOption.RightTop: x = image.Width - waterImage.Width - newEdge; y = newEdge; break; case WaterPositionOption.LeftBottom: x = newEdge; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.CenterBottom: x = (image.Width - waterImage.Width) / 2; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.RightBottom: x = image.Width - waterImage.Width - newEdge; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.Middle: x = (image.Width - waterImage.Width) / 2; y = (image.Height - waterImage.Height) / 2; break; default: goto case WaterPositionOption.RightBottom; } // 画水印图片 graphics.DrawImage(waterImage, new Rectangle(x, y, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel); // 关闭打开着的文件并保存(覆盖)新图片 originalImageStream.Close(); bitmap.Save(savePath, GetImageFormat(strFileName)); success = true; } catch (Exception /*ex*/) { success = false; throw; //throw new Exception(ex.Message.Replace("'", " ").Replace("\n", " ").Replace("\\", "/")); } finally { if (graphics != null) { graphics.Dispose(); } if (bitmap != null) { bitmap.Dispose(); } if (image != null) { image.Dispose(); } if (waterImage != null) { waterImage.Dispose(); } } return(success); }
/// <summary> /// 生成缩略图并打水印再保存。 /// </summary> /// <param name="originalImageStream">Stream</param> /// <param name="strFileName">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <param name="maxWidth">缩略图最大宽度</param> /// <param name="maxheight">缩略图最大高度</param> /// <param name="mode">生成缩略图的方式</param> /// <param name="waterPath">水印图路径(物理路径)</param> /// <param name="edge">水印图离原图边界的距离</param> /// <param name="position">加图片水印的位置</param> /// <returns>是否成功</returns> public static bool MakeThumbnailWater(Stream originalImageStream, string strFileName, string thumbnailPath, int maxWidth, int maxheight, ThumbnailModeOption mode, string waterPath, int edge, WaterPositionOption position) { bool success = false; try { // 生成缩略图 MakeThumbnail(originalImageStream, strFileName, thumbnailPath, maxWidth, maxheight, mode); Stream stream = File.Open(thumbnailPath, FileMode.Open); //打水印 MakeWaterImage(stream, strFileName, thumbnailPath, waterPath, edge, position); success = true; } catch (Exception ex) { success = false; throw; } return success; }
/// <summary> /// 加水印图片并保存。 /// </summary> /// <param name="originalImageStream">Stream</param> /// <param name="strFileName">源图路径(物理路径)</param> /// <param name="savePath">图片保存路径(物理路径)</param> /// <param name="waterPath">水印图路径(物理路径)</param> /// <param name="edge">水印图离原图边界的距离</param> /// <param name="position">加图片水印的位置</param> /// <returns>是否成功</returns> public static void MakeWaterImage(Stream originalImageStream, string strFileName, string savePath, string waterPath, int edge, WaterPositionOption position) { Image waterImage = null; Image image = null; Bitmap bitmap = null; Graphics graphics = null; try { //加载原图 image = Image.FromStream(originalImageStream); //加载水印图 waterImage = Image.FromFile(waterPath); bitmap = new Bitmap(image); graphics = Graphics.FromImage(bitmap); int newEdge = edge; if (newEdge >= image.Width + waterImage.Width) { newEdge = 10; } int x, y; switch (position) { case WaterPositionOption.LeftTop: x = newEdge; y = newEdge; break; case WaterPositionOption.CenterTop: x = (image.Width - waterImage.Width) / 2; y = newEdge; break; case WaterPositionOption.RightTop: x = image.Width - waterImage.Width - newEdge; y = newEdge; break; case WaterPositionOption.LeftBottom: x = newEdge; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.CenterBottom: x = (image.Width - waterImage.Width) / 2; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.RightBottom: x = image.Width - waterImage.Width - newEdge; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.Middle: x = (image.Width - waterImage.Width) / 2; y = (image.Height - waterImage.Height) / 2; break; default: goto case WaterPositionOption.RightBottom; } // 画水印图片 graphics.DrawImage(waterImage, new Rectangle(x, y, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel); // 关闭打开着的文件并保存(覆盖)新图片 originalImageStream.Close(); bitmap.Save(savePath, GetImageFormat(strFileName)); } catch { throw; } finally { if (graphics != null) { graphics.Dispose(); } if (bitmap != null) { bitmap.Dispose(); } if (image != null) { image.Dispose(); } if (waterImage != null) { waterImage.Dispose(); } } }
/// <summary> /// 加水印图片并保存。 /// </summary> /// <param name="originalImageStream">Stream</param> /// <param name="strFileName">源图路径(物理路径)</param> /// <param name="savePath">图片保存路径(物理路径)</param> /// <param name="waterPath">水印图路径(物理路径)</param> /// <param name="edge">水印图离原图边界的距离</param> /// <param name="position">加图片水印的位置</param> /// <returns>是否成功</returns> public static bool MakeWaterImage(Stream originalImageStream, string strFileName, string savePath, string waterPath, int edge, WaterPositionOption position) { bool success = false; int x = 0; int y = 0; Image waterImage = null; Image image = null; Bitmap bitmap = null; Graphics graphics = null; try { //加载原图 image = Image.FromStream(originalImageStream); //加载水印图 waterImage = Image.FromFile(waterPath); bitmap = new Bitmap(image); graphics = Graphics.FromImage(bitmap); int newEdge = edge; if (newEdge >= image.Width + waterImage.Width) newEdge = 10; switch (position) { case WaterPositionOption.LeftTop: x = newEdge; y = newEdge; break; case WaterPositionOption.CenterTop: x = (image.Width - waterImage.Width) / 2; y = newEdge; break; case WaterPositionOption.RightTop: x = image.Width - waterImage.Width - newEdge; y = newEdge; break; case WaterPositionOption.LeftBottom: x = newEdge; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.CenterBottom: x = (image.Width - waterImage.Width) / 2; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.RightBottom: x = image.Width - waterImage.Width - newEdge; y = image.Height - waterImage.Height - newEdge; break; case WaterPositionOption.Middle: x = (image.Width - waterImage.Width) / 2; y = (image.Height - waterImage.Height) / 2; break; default: goto case WaterPositionOption.RightBottom; } // 画水印图片 graphics.DrawImage(waterImage, new Rectangle(x, y, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel); // 关闭打开着的文件并保存(覆盖)新图片 originalImageStream.Close(); bitmap.Save(savePath, GetImageFormat(strFileName)); success = true; } catch (Exception ex) { success = false; throw; //throw new Exception(ex.Message.Replace("'", " ").Replace("\n", " ").Replace("\\", "/")); } finally { if (graphics != null) graphics.Dispose(); if (bitmap != null) bitmap.Dispose(); if (image != null) image.Dispose(); if (waterImage != null) waterImage.Dispose(); } return success; }