using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections;
using System.ComponentModel;
namespace MSCL
{
/// <summary>
/// C#图片上传,加水印,自动生成缩略图的摘要说明
/// </summary>
public class XImage
{
public Color tBackground;
public Color tBorder;
public Color tShadow;
public int tQuality;
public string markPosition;
/// <summary>
/// 图片参数预定义
/// </summary>
static Hashtable htmimes = new Hashtable();
internal readonly string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp|.gif";
public XImage()
{
tBackground = Color.Transparent;
tBorder = Color.Transparent;
tShadow = Color.Transparent;
tQuality = 100;
markPosition = "左下角";
#region 图片类型预定义
htmimes[".jpe"] = "image/jpeg";
htmimes[".jpeg"] = "image/jpeg";
htmimes[".jpg"] = "image/jpeg";
htmimes[".png"] = "image/png";
htmimes[".tif"] = "image/tiff";
htmimes[".tiff"] = "image/tiff";
htmimes[".bmp"] = "image/bmp";
htmimes[".gif"] = "image/gif";
#endregion
}
#region 下载指定URL图片并保存
/// <summary>
/// 下载指定URL的文件并保存到指定目录
/// </summary>
/// <param name="strUrl"></param>
public void DownloadImage(string strUrl, string file)
{
System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadFile(strUrl, file);
}
#endregion
#region C#自动生成缩略图
/// <summary>
/// 按给定名字确定颜色
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Color ToColor(string name)
{
if (name == "白色") return Color.White;
if (name == "红色") return Color.Red;
if (name == "蓝色") return Color.Blue;
if (name == "绿色") return Color.Green;
if (name == "黑色") return Color.Black;
if (name == "灰色") return Color.DarkGray;
if (name == "黄色") return Color.Yellow;
if (name == "紫色") return Color.Cyan;
if (name == "无色") return Color.Transparent;
return Color.Transparent;
}
/// <summary>
/// 按名字设置各种颜色,可以自行扩充:)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public int ToQuality(string name)
{
return Int32.Parse(name.Replace("%", ""));
}
/// <summary>
/// 获取图像编码解码器的所有相关信息
/// </summary>
/// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>
/// <returns>返回图像编码解码器的所有相关信息</returns>
private static ImageCodecInfo GetCodecInfo(string mimeType)
{
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType) return ici;
}
return null;
}
/// <summary>
/// 检测扩展名的有效性
/// </summary>
/// <param name="sExt">文件名扩展名</param>
/// <returns>如果扩展名有效,返回true,否则返回false.</returns>
private bool CheckValidExt(string sExt)
{
bool flag = false;
string[] aExt = AllowExt.Split('|');
foreach (string filetype in aExt)
{
if (filetype.ToLower() == sExt)
{
flag = true;
break;
}
}
return flag;
}
/// <summary>
/// 保存图片
/// </summary>
/// <param name="image">Image 对象</param>
/// <param name="savePath">保存路径</param>
/// <param name="ici">指定格式的编解码参数</param>
private void SaveImage(System.Drawing.Image image, string savePath, ImageCodecInfo ici)
{
//设置 原图片 对象的 EncoderParameters 对象
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ((long)tQuality));
image.Save(savePath, ici, parameters);
parameters.Dispose();
}
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="sourceImagePath">原图片路径(相对路径)</param>
/// <param name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>
/// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>
public void ToThumbnail(string sourceImagePath, string thumbnailImagePath, int thumbnailImageWidth, int thumbnailImageHeight)
{
// 1.先检查图片格式等信息
string ThumbnailImagePath = thumbnailImagePath;
string SourceImagePath = sourceImagePath;
string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();
if (SourceImagePath.ToString() == System.String.Empty)
{
throw new NullReferenceException("SourceImagePath is null!");
}
if (!CheckValidExt(sExt))
{
throw new ArgumentException("原图片文件格式不正确,支持的格式有[ " + AllowExt + " ]", "SourceImagePath");
}
// 从原图片创建 Image 对象
System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(SourceImagePath));
// 2.计算图片的位置、尺寸等信息
int tWidth, tHeight, tLeft, tTop;
double fScale = (double)thumbnailImageHeight / (double)thumbnailImageWidth; // 高度宽度比
if (((double)image.Width * fScale) > (double)image.Height) // 如果原图比较宽
{
tWidth = thumbnailImageWidth;
tHeight = (int)((double)image.Height * (double)tWidth / (double)image.Width);
tLeft = 0;
tTop = (thumbnailImageHeight - tHeight) / 2;
}
else
{
tHeight = thumbnailImageHeight;
tWidth = (int)((double)image.Width * (double)tHeight / (double)image.Height);
tLeft = (thumbnailImageWidth - tWidth) / 2;
tTop = 0;
}
if (tLeft < 0) tLeft = 0;
if (tTop < 0) tTop = 0;
if (tBorder != Color.Transparent)
{
tWidth -= 2;
tHeight -= 2;
tLeft++;
tTop++;
}
if (tShadow != Color.Transparent)
{
tWidth -= 1;
tHeight -= 1;
}
//用指定的大小和格式初始化 Bitmap 类的新实例
//Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);
Bitmap bitmap = new Bitmap(thumbnailImageWidth, thumbnailImageHeight, PixelFormat.Format32bppArgb);
//从指定的 Image 对象创建新 Graphics 对象
Graphics graphics = Graphics.FromImage(bitmap);
//清除整个绘图面并以透明背景色填充
if (tBackground != Color.Transparent)
{
graphics.Clear(tBackground);
}
else
{
graphics.Clear(Color.Transparent);
}
// 添加阴影
if (tShadow != Color.Transparent)
{
Pen shPen = new Pen(tShadow);
graphics.DrawLine(shPen, new Point(1, thumbnailImageHeight - 1), new Point(thumbnailImageWidth - 1, thumbnailImageHeight - 1));
graphics.DrawLine(shPen, new Point(thumbnailImageWidth - 1, 1), new Point(thumbnailImageWidth - 1, thumbnailImageHeight - 1));
}
// 添加边框
if (tBorder != Color.Transparent)
{
Pen bdPen = new Pen(tBorder);
if (tShadow != Color.Transparent)
{
graphics.DrawRectangle(bdPen, new Rectangle(0, 0, thumbnailImageWidth - 2, thumbnailImageHeight - 2));
}
else
{
graphics.DrawRectangle(bdPen, new Rectangle(0, 0, thumbnailImageWidth - 1, thumbnailImageHeight - 1));
}
}
//在指定位置并且按指定大小绘制 原图片 对象
graphics.DrawImage(image, new Rectangle(tLeft, tTop, tWidth, tHeight));
image.Dispose();
try
{
//将此 原图片 以指定格式并用指定的编解码参数保存到指定文件
string savepath = (ThumbnailImagePath == null ? SourceImagePath : ThumbnailImagePath);
SaveImage(bitmap, HttpContext.Current.Server.MapPath(savepath), GetCodecInfo((string)htmimes[sExt]));
}
catch (System.Exception e)
{
throw e;
}
finally
{
bitmap.Dispose();
graphics.Dispose();
}
}
#endregion
#region C#给图片添加水印
public void Mark(string sourceImagePath, string markString)
{
// 1.先检查图片格式等信息
string markImagePath = sourceImagePath;
string SourceImagePath = sourceImagePath;
string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();
if (SourceImagePath.ToString() == System.String.Empty)
{
throw new NullReferenceException("SourceImagePath is null!");
}
if (!CheckValidExt(sExt))
{
throw new ArgumentException("原图片文件格式不正确,支持的格式有[ " + AllowExt + " ]", "SourceImagePath");
}
// 从原图片创建 Image 对象
System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(SourceImagePath));
//用指定的大小和格式初始化 Bitmap 类的新实例
Bitmap bitmap = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb);
//从指定的 Image 对象创建新 Graphics 对象
Graphics graphics = Graphics.FromImage(bitmap);
//在指定位置并且按指定大小绘制 原图片 对象
graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height));
#region 绘制水印
// 设置水印字体
int fHeight = image.Height / 5;
if (fHeight > 16) fHeight = 16;
Font drawFont = new Font("Arial", fHeight);
// 设置水印文字位置,默认为左下角
float x = 4;
float y = image.Height - drawFont.Height - 4;
if (markPosition == "左上角")
{
y = 4;
}
if (markPosition == "右上角")
{
x = image.Width - markString.Length * fHeight / 2 - fHeight;
y = 4;
}
if (markPosition == "右下角")
{
x = image.Width - markString.Length * fHeight / 2 - fHeight;
}
if (markPosition == "图片中间")
{
x = image.Width / 2 - markString.Length * fHeight / 2;
y = image.Height / 2 - fHeight / 2;
}
StringFormat drawFormat = new StringFormat();
drawFormat.FormatFlags = StringFormatFlags.NoWrap;
// 设置水印文字颜色,先绘制一个黑色字作为阴影,再绘制白色字,这样比较显眼;
SolidBrush drawBrush = new SolidBrush(Color.Black);
graphics.DrawString(markString, drawFont, drawBrush, x, y, drawFormat);
drawBrush.Color = Color.White;
graphics.DrawString(markString, drawFont, drawBrush, x - 1, y - 1, drawFormat);
#endregion
image.Dispose();
try
{
//将此 原图片 以指定格式并用指定的编解码参数保存到指定文件
string savepath = SourceImagePath;
SaveImage(bitmap, HttpContext.Current.Server.MapPath(savepath), GetCodecInfo((string)htmimes[sExt]));
}
catch (System.Exception e)
{
throw e;
}
finally
{
bitmap.Dispose();
graphics.Dispose();
}
}
#endregion
}
分享到:
相关推荐
本主题将深入探讨“超强的图片上传,加水印,以及生成缩略图”这一技术领域,结合给出的标签“缩略图”,“图片上传”,“水印”,我们将详细讲解相关知识点。 首先,图片上传是网站或应用中让用户上传图片的功能。...
本压缩包"上传图片生成缩略图、图片水印、文字水印.rar"提供了一套完整的解决方案,适用于网站中需要处理图片的场景。以下是关于这些功能的详细解释: 1. 图片上传: 在`upfile.aspx`文件中,实现了用户上传图片的...
在ASP.NET (#C#)开发中,生成缩略图、添加文字水印和图片水印是常见的需求,尤其是在处理网站的图像展示或者保护版权时。下面将详细解释这些概念及其实现方式。 首先,生成缩略图是将一张较大的图片转换为较小尺寸...
在本文中,我们将深入探讨如何使用C#语言来实现图片上传、保存、加水印以及生成缩略图的功能。这些功能在现代Web应用和移动应用中非常常见,尤其是在处理用户生成内容时,如社交网络、电子商务平台和个人博客等。 ...
在ASP.NET环境中,生成缩略图并添加水印是一项常见的需求,主要应用于网站的图片展示、用户上传图片处理等场景。下面将详细讲解如何利用ASP.NET实现这一功能,以及涉及的相关知识点。 首先,我们需要理解ASP.NET的...
在这个主题中,我们将深入探讨如何在MVC和.NET Core环境下实现网页转PDF、PDF转图片、图片加水印、生成二维码以及创建缩略图等实用功能。 1. **网页转PDF** 在.NET Core中,可以使用第三方库如HtmlToPdfConverter...
本例将详细介绍如何使用ASP.NET和C#实现图片的缩略图生成以及添加水印的功能,确保在处理过程中图片质量不受损失。 首先,让我们关注图片缩略图的生成。在ASP.NET中,可以创建一个自定义的类来处理这个任务。这个类...
该压缩包文件“生成缩略图并加水印文字源码.rar”包含了创建缩略图并添加水印文字的功能,适用于.NET开发环境。这个源码示例可能对开发者,尤其是那些从事网站开发或者图像处理的人非常有用。让我们深入探讨一下其中...
在这个特定的场景中,我们关注的是如何使用C#在ASP.NET环境中处理图片,包括创建缩略图以及添加文字和图片水印。 首先,我们需要理解缩略图的生成过程。在ASP.NET中,可以使用System.Drawing命名空间中的类来处理...
接着,程序读取图片,添加预设的水印(如公司LOGO或日期),然后根据需要生成缩略图。生成的带水印和缩略图的图片可以存储回服务器,并返回URL给客户端展示。 5. 性能优化: 在处理大量图片时,应考虑性能优化。...
在ASP.NET中,生成缩略图和为原始图像添加水印是常见的图像处理任务,尤其在网站开发中,用于展示用户上传的图片。本示例将详细解释如何使用C#和System.Drawing命名空间来实现这一功能。 首先,我们需要导入必要的...
综合以上信息,这个组件提供了全面的图片处理功能,包括生成缩略图和添加水印,适用于.NET Web开发,通过示例代码和配置文件,开发者可以轻松地将其集成到自己的项目中,实现高效、安全的图片管理。
在.NET开发中,生成缩略图和添加水印是常见的图像处理操作,这些操作通常涉及到对图像文件的读取、处理和保存。然而,在实际应用中,可能会遇到一些错误,如“GDI+中发生一般性错误”,这通常是由于资源管理不当导致...
本文将深入探讨在C#环境中,使用Visual Studio 2015 IDE进行图像处理的实践方法,包括为图片添加水印、转换图片格式以及生成缩略图等关键操作。这些功能在日常的Web应用、桌面软件以及移动应用中都具有广泛的应用。 ...
接下来,我们创建一个名为 `ImageWaterMark` 的类,该类包含处理图片的方法,如添加水印和生成缩略图。这个类有一个默认的构造函数,但在这里没有具体实现任何逻辑,只是作为类的入口点。 在 `ImageWaterMark` 类中...
一个把图片生成缩略图的类,可以设置大小,非常好用,希望大家喜欢哦。 C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session&Cache缓存帮助类 CacheHelper C#...
ImageUpload 图片上传并进行缩略图处理 24.网络 NetHelper 25.文件操作类 DirFileHelper FileOperateHelper INIFile 26.序列化 Serialize 序列化帮助类,还有例子 SerializeHelper 序列化帮助类,Xml序列化,...
实例023 生成图片缩略图 88 实例024 不失真压缩图片 90 实例025 批量图像格式转换 93 实例026 屏幕颜色拾取器 96 实例027 为数码照片添加日期 98 实例028 批量添加图片水印 100 实例029 仿QQ截图...