108 lines
4.3 KiB
C#
108 lines
4.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using HZQR.Common;
|
|
|
|
namespace SuperMap.RealEstate.Finance.Common
|
|
{
|
|
public class CommonHelper
|
|
{
|
|
/// <summary>
|
|
/// 文字水印
|
|
/// </summary>
|
|
/// <param name="imgPath">服务器图片相对路径</param>
|
|
/// <param name="filename">保存文件名</param>
|
|
/// <param name="watermarkText">水印文字</param>
|
|
/// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下</param>
|
|
/// <param name="quality">附加水印图片质量,0-100</param>
|
|
/// <param name="fontname">字体</param>
|
|
/// <param name="fontsize">字体大小</param>
|
|
public static void AddImageSignText(string imgPath, string filename, string watermarkText, int watermarkStatus,
|
|
int quality, string fontname, int fontsize)
|
|
{
|
|
byte[] _ImageBytes = File.ReadAllBytes(Utils.GetMapPath(imgPath));
|
|
Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));
|
|
filename = Utils.GetMapPath(filename);
|
|
|
|
Graphics g = Graphics.FromImage(img);
|
|
Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
|
|
SizeF crSize;
|
|
crSize = g.MeasureString(watermarkText, drawFont);
|
|
|
|
float xpos = 0;
|
|
float ypos = 0;
|
|
|
|
switch (watermarkStatus)
|
|
{
|
|
case 1:
|
|
xpos = (float)img.Width * (float).01;
|
|
ypos = (float)img.Height * (float).01;
|
|
break;
|
|
case 2:
|
|
xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
|
|
ypos = (float)img.Height * (float).01;
|
|
break;
|
|
case 3:
|
|
xpos = ((float)img.Width * (float).99) - crSize.Width;
|
|
ypos = (float)img.Height * (float).01;
|
|
break;
|
|
case 4:
|
|
xpos = (float)img.Width * (float).01;
|
|
ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
|
|
break;
|
|
case 5:
|
|
xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
|
|
ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
|
|
break;
|
|
case 6:
|
|
xpos = ((float)img.Width * (float).99) - crSize.Width;
|
|
ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
|
|
break;
|
|
case 7:
|
|
xpos = (float)img.Width * (float).01;
|
|
ypos = ((float)img.Height * (float).99) - crSize.Height;
|
|
break;
|
|
case 8:
|
|
xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
|
|
ypos = ((float)img.Height * (float).99) - crSize.Height;
|
|
break;
|
|
case 9:
|
|
xpos = ((float)img.Width * (float).99) - crSize.Width;
|
|
ypos = ((float)img.Height * (float).99) - crSize.Height;
|
|
break;
|
|
}
|
|
|
|
g.DrawString(watermarkText, drawFont, new SolidBrush(Color.White), xpos + 1, ypos + 1);
|
|
g.DrawString(watermarkText, drawFont, new SolidBrush(Color.Black), xpos, ypos);
|
|
|
|
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
|
|
ImageCodecInfo ici = null;
|
|
foreach (ImageCodecInfo codec in codecs)
|
|
{
|
|
if (codec.MimeType.IndexOf("jpeg") > -1)
|
|
ici = codec;
|
|
}
|
|
EncoderParameters encoderParams = new EncoderParameters();
|
|
long[] qualityParam = new long[1];
|
|
if (quality < 0 || quality > 100)
|
|
quality = 80;
|
|
|
|
qualityParam[0] = quality;
|
|
|
|
EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
|
|
encoderParams.Param[0] = encoderParam;
|
|
|
|
if (ici != null)
|
|
img.Save(filename, ici, encoderParams);
|
|
else
|
|
img.Save(filename);
|
|
|
|
g.Dispose();
|
|
img.Dispose();
|
|
}
|
|
}
|
|
} |