C#加水印操作(各种集锦)

1.给图片加水印

public byte[] GetWatermarkPic(byte[] bytes, string txt)
{
MemoryStream ms = new MemoryStream(bytes);
Image pic = System.Drawing.Image.FromStream(ms);
//创建一把刷子
//防止索引像素格式引发异常的像素格式
Bitmap bmp = new Bitmap(pic.Width, pic.Height, PixelFormat.Format32bppArgb);
Graphics grap = Graphics.FromImage(bmp);
grap.DrawImage(pic, 0, 0, pic.Width, pic.Height);
//计算字体大小
int fontSize =22;
if (pic.Width <= txt.Length * fontSize)
{
while (pic.Width <= (txt.Length * fontSize + 10))
{
fontSize = fontSize - 2;
}
}
//水印宽度
int txtWidth = txt.Length * fontSize * 2;
//字体
var font = new Font(“黑体”, fontSize);
Brush brush = new SolidBrush(Color.FromArgb(120, 193, 143, 8));
grap.RotateTransform(30);
grap.DrawString(txt, font, brush, float.Parse((pic.Width / 2 - txtWidth * 0.3).ToString()), 0);
grap.Dispose();
//返回有水印的图片流
MemoryStream stream = new MemoryStream();
bmp.Save(stream, ImageFormat.Png);
return stream.GetBuffer();
}

2.给pdf添加水印

public byte[] GetWatermarkPdf(byte[] pdfBytes,string waterMarkText)
{
MemoryStream newms = new MemoryStream(pdfBytes);
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(newms);
Aspose.Pdf.TextStamp textStamp1 = new Aspose.Pdf.TextStamp(waterMarkText);
textStamp1.Background = false;
textStamp1.VerticalAlignment = Aspose.Pdf.VerticalAlignment.Center;
textStamp1.HorizontalAlignment = Aspose.Pdf.HorizontalAlignment.Center;
textStamp1.TextAlignment = Aspose.Pdf.HorizontalAlignment.Center;
textStamp1.RotateAngle = -45;//设置旋转角度
textStamp1.TextState.Font = Aspose.Pdf.Text.FontRepository.FindFont(“Microsoft JhengHei”);
textStamp1.TextState.FontSize = 25.0F;//设置字体大小
textStamp1.TextState.FontStyle = Aspose.Pdf.Text.FontStyles.Italic;
textStamp1.TextState.ForegroundColor = Aspose.Pdf.Color.LightGray;//设置字体颜色
Aspose.Pdf.PageCollection pages = pdfDocument.Pages;
int size = pages.Count;
for (int k = 1; k <= size; k++)
{
pages[k].AddStamp(textStamp1);
}
MemoryStream outStream = new MemoryStream();
pdfDocument.Save(outStream, Aspose.Pdf.SaveFormat.Pdf);
byte[] docBytes = outStream.ToArray();
}

3.给word添加水印

public byte[] GetWatermarkWord(byte[] wordBytes,string waterMarkText)
{
MemoryStream mss = new MemoryStream(wordBytes);
Aspose.Words.Document wordDoc = new Aspose.Words.Document(mss);
Shape watermark = new Shape(wordDoc, ShapeType.TextPlainText);
//水印内容
watermark.TextPath.Text = waterMarkText;
//水印字体
watermark.TextPath.FontFamily = “宋体”;
//水印宽度
watermark.Width = 100;
//水印高度
watermark.Height = 20;
//旋转水印
watermark.Rotation = -40;
//水印颜色 浅灰色
watermark.Fill.Color = Color.LightGray;
watermark.StrokeColor = Color.LightGray;
//设置相对水平位置
watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page;
//设置相对垂直位置
watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page;
//设置包装类型
watermark.WrapType = WrapType.None;
//设置垂直对齐
watermark.VerticalAlignment = VerticalAlignment.Center;
//设置文本水平对齐方式
watermark.HorizontalAlignment = HorizontalAlignment.Center;
Paragraph watermarkPara = new Paragraph(wordDoc);
watermarkPara.AppendChild(watermark);
MemoryStream outStream = new MemoryStream();
wordDoc.Save(outStream, SaveFormat.Docx);
byte[] docBytes = outStream.ToArray();
}

4.给excel添加水印

public byte[] GetWatermarkExcel(byte[] wordBytes,string waterMarkText)
{
MemoryStream mss = new MemoryStream(excelBytes);
Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(mss);
Aspose.Cells.WorksheetCollection colls = wb.Worksheets;
foreach (Aspose.Cells.Worksheet sheet in colls)
{
Aspose.Cells.Drawing.Shape wordart = sheet.Shapes.AddTextEffect(Aspose.Cells.Drawing.MsoPresetTextEffect.TextEffect1,
waterMarkText, “Arial Black”, 50, false, true
, 18, 8, 1, 1, 130, 800);
//Get the fill format of the word art
Aspose.Cells.Drawing.MsoFillFormat wordArtFormat = wordart.FillFormat;
//Set the color
wordArtFormat.ForeColor = System.Drawing.Color.Red;
//Set the transparency
wordArtFormat.Transparency = 0.9;
//Make the line invisible
Aspose.Cells.Drawing.MsoLineFormat lineFormat = wordart.LineFormat;
lineFormat.IsVisible = false;
}
MemoryStream outStream = new MemoryStream();
wb.Save(outStream, Aspose.Cells.SaveFormat.Excel97To2003);
byte[] xlsBytes = outStream.ToArray();
}

5.给word里面的图片添加水印

public byte[] GetWatermarkWordPic(byte[] wordBytes,string waterMarkText)
{
MemoryStream mss = new MemoryStream(wordBytes);
Aspose.Words.Document wordDoc = new Aspose.Words.Document(mss);
if (file.ExtName.ToLower() == “docx”)
{
NodeCollection dmlShapes = wordDoc.GetChildNodes(NodeType.DrawingML, true);
foreach (DrawingML dml in dmlShapes)
{
if (dml.HasImage)
{
dml.ImageData.ImageBytes = GetWatermarkPic(dml.ImageData.ImageBytes, waterMarkText);
}
}
}
else
{
//word图片添加水印
NodeCollection shapes = wordDoc.GetChildNodes(NodeType.Shape, true);
foreach (Shape shape in shapes)
{
if (shape.HasImage)
{
shape.ImageData.ImageBytes = GetWatermarkPic(shape.ImageData.ImageBytes, waterMarkText);
}
}
}
MemoryStream outStream = new MemoryStream();
if (file.ExtName.ToLower() == “docx”)
wordDoc.Save(outStream, SaveFormat.Docx);
else
wordDoc.Save(outStream, SaveFormat.Doc);
byte[] docBytes = outStream.ToArray();
}

6.给excel里面的图片添加水印

public byte[] GetWatermarkExcelPic(byte[] excelBytes, string waterMarkText)
{
MemoryStream mss = new MemoryStream(excelBytes);
Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(mss);
Aspose.Cells.WorksheetCollection colls = wb.Worksheets;
foreach (Aspose.Cells.Worksheet sheet in colls)
{
var pics = sheet.Pictures;
foreach (Aspose.Cells.Drawing.Picture pic in pics)
{
pic.Data = GetWatermarkPic(pic.Data, waterMarkText);
}
}
MemoryStream outStream = new MemoryStream();
if (file.ExtName.ToLower() == “xlsx”)
wb.Save(outStream, Aspose.Cells.SaveFormat.Xlsx);
else
wb.Save(outStream, Aspose.Cells.SaveFormat.Excel97To2003);
byte[] xlsBytes = outStream.ToArray();
}

7.JS给html添加水印

//页面添加水印
function watermark(settings) {
//判断是否已经生成水印
var flagDiv = $(".mask_div");
if (flagDiv != null && flagDiv != undefined && flagDiv.length > 0) {
return;
}
//默认设置
let defaultSettings = {
watermark_txt: “”,
watermark_x: 20,//水印起始位置x轴坐标
watermark_y: 20,//水印起始位置Y轴坐标
watermark_rows: 30,//水印行数
watermark_cols: 30,//水印列数
watermark_x_space: 30,//水印x轴间隔
watermark_y_space: 30,//水印y轴间隔
watermark_color: ‘#aaa’,//水印字体颜色
watermark_alpha: 0.2,//水印透明度
watermark_fontsize: ‘15px’,//水印字体大小
watermark_font: ‘微软雅黑’,//水印字体
watermark_width: 210,//水印宽度
watermark_height: 80,//水印长度
watermark_angle: 15//水印倾斜度数
};
defaultSettings = jQuery.extend(true, {}, defaultSettings, settings);
let oTemp = document.createDocumentFragment();
//获取页面最大宽度
let p_width = Math.max(document.body.scrollWidth, document.body.clientWidth);
let cutWidth = p_width * 0.0150;
let page_width = p_width - cutWidth;
//获取页面最大高度
let page_height = Math.max(document.body.scrollHeight, document.body.clientHeight) - 33;
//如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
if (defaultSettings.watermark_cols === 0 || (parseInt(defaultSettings.watermark_x + defaultSettings.watermark_width * defaultSettings.watermark_cols + defaultSettings.watermark_x_space * (defaultSettings.watermark_cols - 1)) > page_width)) {
defaultSettings.watermark_cols = parseInt((page_width - defaultSettings.watermark_x + defaultSettings.watermark_x_space) / (defaultSettings.watermark_width + defaultSettings.watermark_x_space));
defaultSettings.watermark_x_space = parseInt((page_width - defaultSettings.watermark_x - defaultSettings.watermark_width * defaultSettings.watermark_cols) / (defaultSettings.watermark_cols - 1));
}
//如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
if (defaultSettings.watermark_rows === 0 || (parseInt(defaultSettings.watermark_y + defaultSettings.watermark_height * defaultSettings.watermark_rows + defaultSettings.watermark_y_space * (defaultSettings.watermark_rows - 1)) > page_height)) {
defaultSettings.watermark_rows = parseInt((defaultSettings.watermark_y_space + page_height - defaultSettings.watermark_y) / (defaultSettings.watermark_height + defaultSettings.watermark_y_space));
defaultSettings.watermark_y_space = parseInt(((page_height - defaultSettings.watermark_y) - defaultSettings.watermark_height * defaultSettings.watermark_rows) / (defaultSettings.watermark_rows - 1));
}
let x;
let y;
for (let i = 0; i < defaultSettings.watermark_rows; i++) {
y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
for (let j = 0; j < defaultSettings.watermark_cols; j++) {
x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;
let mask_div = document.createElement(‘div’);
mask_div.id = ‘mask_div’ + i + j;
mask_div.className = ‘mask_div’;
mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
//设置水印div倾斜显示
mask_div.style.webkitTransform = “rotate(-” + defaultSettings.watermark_angle + “deg)”;
mask_div.style.MozTransform = “rotate(-” + defaultSettings.watermark_angle + “deg)”;
mask_div.style.msTransform = “rotate(-” + defaultSettings.watermark_angle + “deg)”;
mask_div.style.OTransform = “rotate(-” + defaultSettings.watermark_angle + “deg)”;
mask_div.style.transform = “rotate(-” + defaultSettings.watermark_angle + “deg)”;
mask_div.style.visibility = “”;
mask_div.style.position = “absolute”;
mask_div.style.left = x + ‘px’;
mask_div.style.top = y + ‘px’;
mask_div.style.overflow = “hidden”;
mask_div.style.zIndex = “9999”;
mask_div.style.pointerEvents = ‘none’;//pointer-events:none 让水印不遮挡页面的点击事件
mask_div.style.opacity = defaultSettings.watermark_alpha;
mask_div.style.fontSize = defaultSettings.watermark_fontsize;
mask_div.style.fontFamily = defaultSettings.watermark_font;
mask_div.style.color = defaultSettings.watermark_color;
mask_div.style.textAlign = “center”;
mask_div.style.width = defaultSettings.watermark_width + ‘px’;
mask_div.style.height = defaultSettings.watermark_height + ‘px’;
mask_div.style.display = “block”;
oTemp.appendChild(mask_div);
};
};
document.body.appendChild(oTemp);
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值