如何实现网店中图片数字水印的批量处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 程序实现 (1) 思路分析 运用 HttpHandler 技术实现数字水印, 需要做如下处理。 1) 修 改 配 置 信 息 , 将 所 有 对 .jpg 内 容 的 访 问 转 到 HttpHandler 处理程序。 2) 获得访问请求, 得到用户访问的图片路径。
2009. 11 89
3) 根据请求的路径查找相对应的封面图片。
图 4 带水印的封面图片 (5) 注意事项 需要注意的是, 使用这种配置方式, 在开发服务器上运行 时没有问题。 但如 果 在 IIS 运 行 , 将 会 没 有 任 何 效 果 , 原 因 有 两 个 方 面 : ①开 发 服 务 器 仅 提 供 最 简 单 的 Web 服 务 器 功 能 , 它不对请求的内容做任何处理, 而是直接将所有的请求转交给 ASP.NET 处 理 ; ②所 以 提 交 到 IIS 的 请 求 , 会 在 IIS 上 做 分 类
watermark.Height,GraphicsUnit.Pixel) ; g.Dispose () ;//释放画布 watermark.Dispose () ;//释放水印图片 } else { //加 载 默 认 图 片 Cover =Image.FromFile ( context.Request.MapPath
4) 将数字水印图片 “粘贴” 在封面图片的右下角。
5) 修改程序输出类型, 并将组合出的新图片输出。
(2) 修改配置文件
在配置文件 web.config 中添加如下代码。
<httpHandlers> <add verb = " *" path = " Images/BookImages/*.jpg"
下, 该类添加在 App_Code 目录下。 代码如下:
… //此 处 省 略 了 默 认 命 名 空 间 //由于涉及到图片的绘制和文件的 IO 操作, 所以引用这三个 //命 名 空 间 using System.Drawing; using System.Drawing.Imaging; using System.IO; public class BookHandler:IHttpHandler {
编程疑难问题解答
strParam = strParam + Strings.Format (Text3.hWnd) strParam = strParam + " ," ' 初始化线程参数 thread.Init (strParam) ' 创建并运行线程 thread.Run
(3) 终止正在运行 thread 中线程。 thread.Abort 上述方法解决了 VB 程序不能 用 创 建 线 程 的 情 况 , 同 时 也 提供如何用 VC 创建 ATL COM 类型库的方法。
Cover.Dispose () ; context.Response.End () ; } public bool IsReusable { get {
return false; } } } (4) 运行结果 在图书详细页中, 为了简洁起见省略部分内容, 只显示和 图片相关的内容, 图片的访问效果如图 4 所示, 可以看到在封 面图片的右下角显示了数字水印的效果。
如何实现网店中图片数字水印的批量处理
随着电子技术和因特网的发展, 信息技术与商务活动 相结合, 推动了电子商务的发展, 电子商务已经成为信息产业 新的增长点。 电子商务的兴起标志着流通领域内的一场革 命— ——新 的 网 络 经 济 时 代 的 到 来 。 电 子 商 务 有 四 大 热 门 应 用 : 网上购物、 网络销售、 企业内部网络与电子数据交换。 网上书 店是一种流行的网上交易系统, 一方面可以使用户很方便地得 到产品, 提高了产品分发的效率。 另一方面信息的安全保护问 题却日益突出, 如何在数字作品中加入版权信息, 保护著作 权, 防止他人盗用受保护的资源是目前急需解决的问题, 数字 水印技术就是为满足这些多元化的需求而提出的。 本文运用 HttpHandler 技 术 成 功 地 解 决 了 网 上 书 店 中 封 面 数 字 水 印 的 批 量处理问题。
1. 方法分析 要制作网上书店的数字水印, 首先要准备一张水印图片 (如图 1 所示) 和一张默认图片 (如图 2 所示), 当图书没有封 面图片时显示。 接下来要为每一张图书封面图片添加数字水 印, 可以有如下几种方案进行水印的添加。
图 1 水印图片
图 2 默认图片
第一种方案: 直接编辑每张图片。 使用图片编辑工具, 对每一个原始图片进行编辑。 试想一 下, 每张图片都需要这样处理的话, 成千上万的图片将是一个 多么巨大的工程。 第二种方案: 编程实现批量编辑图片。 通过编程方式给图片批量添加数字水印。 这种方式解决了 上一种方案的问题, 不过它也有一个缺点, 就是原始图片被破 坏了。 第三种方案: 在显示图片时, 动态添加数字水印效果。 运 用 HttpHandler 技 术 , 不 修 改 原 始 图 片 , 只 是 在 服 务 器
HttpHandler 是 HTTP 请 求 的 真 正 处 理 中 心 。 正 是 在 这 个 HttpHandler 容 器 中 , ASP.NET 才 真 正 对 客 户 端 请 求 的 服 务 器 页面做出编译和执行, 并将处理后的信息附加在 HTTP 请 求 信 息 流 中 再 次 返 回 到 HttpModule 中 。 这 时 HttpModule 则 会 继 续 对处理完毕的 HTTP 请求信息流进行层层的转交动作, 直 到 返 回到客户端为止。
也 就 是 说 , IIS 根 本 没 有 把 请 求 提 交 给 ASP.NET, 这 样 编 写的程序自然就不能执行, 为此, 需要在 IIS 上做如下处理。
3) 在 “应用程序配置” 对话框的 “映射” 选项卡中单击 “添加” 按钮, 打开 “添加/编辑应用程序扩展映射” 对话框,
如图 5 所示。 注意要选择当前版本的 aspnet_isapi.dll。
4) 设置完成后, 需要重新启动 IIS 才能生效。 这 样 利 用 HttpHandler 技 术 , 在 不 修 改 原 始 图 片 的 基 础 上
解决了封面图片的数字水印批量处理的问题, 实现了网上书店
中版权信息的安全化。
图 5 添加扩展名映射
本 问 题 中 所 编 程 序 在 Windows XP + VS2005 + SQL Server 2005 中测试运行通过。
public void ProcessRequest (HttpContext context) {
System.Drawing.Image Cover; //判断请求的物理路径中, 是否存在文件 if (File.Exists (context.Request.PhysicalPath)) { //加载文件。 其中, PhysicalPath 用于获取与请求的 URL //相 对 应 的 物 理 文 件 系 统 路 径 Cover=Image.FromFile (context.Request.PhysicalPath) ; //加 载 水 印 图 片 Image watermark = Image.FromFile (context.Request. MapPath (WATERMARK_URL)) ; //实 例 化 画 布 Graphics g = Graphics.FromImage (Cover) ; //在 Cover 上绘制水印
图 3 ASP.NET 处理 HTTP 请求的内部过程
每个 HTTP 请求 可 以 经 过 多 个 模 块 , 即 HttpModule, 但 最 终只能被一个 HttpHandler 处理。
当 一 个 HTTP 请 求 到 达 HttpModule 时 , 整 个 ASP.NET Framework 系 统 并 没 有 对 这 个 HTTP 请 求 做 任 何 处 理 , 也 就 是 说 此 时 对 于 HTTP 请 求 来 讲 , HttpModule 是 一 个 HTTP 请 求 的 “必经之路”, 它可以在这个 HTTP 请求传递到真正的请求处 理 中心 (HttpHandler) 之前附加一些 需 要 的 信 息 在 这 个 HTTP 请 求信息之上, 或者针对截获的这个 HTTP 请求信息做一些 额 外 的工作, 或者在某些情况下干脆终止满足一些条件的 HTTP 请 求, 从而可以起到一个过滤器的作用。
(作者: 孙翠华)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
type=" BookHandler" ></add> </httpHandlers>
其 中 path 是 访 问 路 径 , 此 处 表 示 所 有 访 问 “ Images/
BookImages/*.jpg” 路 径 的 请 求 都 将 交 给 BookHandler 类 处 理 。
“Images/BookImages” 目 录 就 是 专 门 存 放 封 面 图 片 的 目 录 , 可
1) 打开 IIS 控制台管理程序, 选择对应的站点目录, 打开 它的属性对话框。
名 符 合 相 关 条 件 时 ( 如 .aspx) , 才 将 请 求 转 交 给 ASP.NET 处
2) 在该属性对话 框 的 “目 录 ” 选 项 卡 中 , 单 击 “配 置 ”
理。
按钮。 打开 “应用程序配置” 对话框。
(DEFAULTIMAGE_URL)) ; } //设 置 输 出 格 式 context.Response.ContentType=" image/jpeg" ; //将 图 片 存 入 输 出 流
Cover.Save ( context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg) ;
g.DrawImage ( watermark,new Rectangle ( Cover. Width -watermark .Width,Cover.Height -watermark.Height, watermark.Width,watermark.Height) ,0,0,watermark.Width,
90 2009. 11
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
编程疑难问题解答
处理, 所依据的原理 是 后 缀 名 。 默 认 情 况 下 , .html、 .jpg 等 静 态格式的文件 IIS 会 自 己 处 理 , 直 接 将 结 果 返 回 。 只 有 当 后 缀
(作者: 王文江 周国瑞)
发送图片到客户端前做一些处理, 动态地添加上数字水印效 果。 这种方式很好地解决了上两种方案中的问题, 正是本文所 采取的方案。
2. 技术支持 ASP.NET 在处理 HTTP 请求时有两个核心机制 HttpModule 和 HttpHຫໍສະໝຸດ Baidundler, 图 3 表 示 了 ASP.NET 处 理 HTTP 请 求 的 内 部 过程。
private const string WATERMARK_URL = " ~/Images/watermark.jpg" ;//水印图片
private const string DEFAULTIMAGE_URL = " ~/Images/ nophoto.jpg" ;//默认图片, 当图书没有封面图片时显示
以 将 所 有 访 问 该 目 录 下 的 .jpg 格 式 文 件 的 请 求 都 转 交 给
BookHandler 类处理。
使用该配置后, 不管请求的路径中有没有实际文件, 都将
执行该 BookHandler 类。
(3)创建 HttpHandler 程序
创 建 一 个 实 现 IHtttpHandler 类 BookHandler, 在 默 认 情 况
2009. 11 89
3) 根据请求的路径查找相对应的封面图片。
图 4 带水印的封面图片 (5) 注意事项 需要注意的是, 使用这种配置方式, 在开发服务器上运行 时没有问题。 但如 果 在 IIS 运 行 , 将 会 没 有 任 何 效 果 , 原 因 有 两 个 方 面 : ①开 发 服 务 器 仅 提 供 最 简 单 的 Web 服 务 器 功 能 , 它不对请求的内容做任何处理, 而是直接将所有的请求转交给 ASP.NET 处 理 ; ②所 以 提 交 到 IIS 的 请 求 , 会 在 IIS 上 做 分 类
watermark.Height,GraphicsUnit.Pixel) ; g.Dispose () ;//释放画布 watermark.Dispose () ;//释放水印图片 } else { //加 载 默 认 图 片 Cover =Image.FromFile ( context.Request.MapPath
4) 将数字水印图片 “粘贴” 在封面图片的右下角。
5) 修改程序输出类型, 并将组合出的新图片输出。
(2) 修改配置文件
在配置文件 web.config 中添加如下代码。
<httpHandlers> <add verb = " *" path = " Images/BookImages/*.jpg"
下, 该类添加在 App_Code 目录下。 代码如下:
… //此 处 省 略 了 默 认 命 名 空 间 //由于涉及到图片的绘制和文件的 IO 操作, 所以引用这三个 //命 名 空 间 using System.Drawing; using System.Drawing.Imaging; using System.IO; public class BookHandler:IHttpHandler {
编程疑难问题解答
strParam = strParam + Strings.Format (Text3.hWnd) strParam = strParam + " ," ' 初始化线程参数 thread.Init (strParam) ' 创建并运行线程 thread.Run
(3) 终止正在运行 thread 中线程。 thread.Abort 上述方法解决了 VB 程序不能 用 创 建 线 程 的 情 况 , 同 时 也 提供如何用 VC 创建 ATL COM 类型库的方法。
Cover.Dispose () ; context.Response.End () ; } public bool IsReusable { get {
return false; } } } (4) 运行结果 在图书详细页中, 为了简洁起见省略部分内容, 只显示和 图片相关的内容, 图片的访问效果如图 4 所示, 可以看到在封 面图片的右下角显示了数字水印的效果。
如何实现网店中图片数字水印的批量处理
随着电子技术和因特网的发展, 信息技术与商务活动 相结合, 推动了电子商务的发展, 电子商务已经成为信息产业 新的增长点。 电子商务的兴起标志着流通领域内的一场革 命— ——新 的 网 络 经 济 时 代 的 到 来 。 电 子 商 务 有 四 大 热 门 应 用 : 网上购物、 网络销售、 企业内部网络与电子数据交换。 网上书 店是一种流行的网上交易系统, 一方面可以使用户很方便地得 到产品, 提高了产品分发的效率。 另一方面信息的安全保护问 题却日益突出, 如何在数字作品中加入版权信息, 保护著作 权, 防止他人盗用受保护的资源是目前急需解决的问题, 数字 水印技术就是为满足这些多元化的需求而提出的。 本文运用 HttpHandler 技 术 成 功 地 解 决 了 网 上 书 店 中 封 面 数 字 水 印 的 批 量处理问题。
1. 方法分析 要制作网上书店的数字水印, 首先要准备一张水印图片 (如图 1 所示) 和一张默认图片 (如图 2 所示), 当图书没有封 面图片时显示。 接下来要为每一张图书封面图片添加数字水 印, 可以有如下几种方案进行水印的添加。
图 1 水印图片
图 2 默认图片
第一种方案: 直接编辑每张图片。 使用图片编辑工具, 对每一个原始图片进行编辑。 试想一 下, 每张图片都需要这样处理的话, 成千上万的图片将是一个 多么巨大的工程。 第二种方案: 编程实现批量编辑图片。 通过编程方式给图片批量添加数字水印。 这种方式解决了 上一种方案的问题, 不过它也有一个缺点, 就是原始图片被破 坏了。 第三种方案: 在显示图片时, 动态添加数字水印效果。 运 用 HttpHandler 技 术 , 不 修 改 原 始 图 片 , 只 是 在 服 务 器
HttpHandler 是 HTTP 请 求 的 真 正 处 理 中 心 。 正 是 在 这 个 HttpHandler 容 器 中 , ASP.NET 才 真 正 对 客 户 端 请 求 的 服 务 器 页面做出编译和执行, 并将处理后的信息附加在 HTTP 请 求 信 息 流 中 再 次 返 回 到 HttpModule 中 。 这 时 HttpModule 则 会 继 续 对处理完毕的 HTTP 请求信息流进行层层的转交动作, 直 到 返 回到客户端为止。
也 就 是 说 , IIS 根 本 没 有 把 请 求 提 交 给 ASP.NET, 这 样 编 写的程序自然就不能执行, 为此, 需要在 IIS 上做如下处理。
3) 在 “应用程序配置” 对话框的 “映射” 选项卡中单击 “添加” 按钮, 打开 “添加/编辑应用程序扩展映射” 对话框,
如图 5 所示。 注意要选择当前版本的 aspnet_isapi.dll。
4) 设置完成后, 需要重新启动 IIS 才能生效。 这 样 利 用 HttpHandler 技 术 , 在 不 修 改 原 始 图 片 的 基 础 上
解决了封面图片的数字水印批量处理的问题, 实现了网上书店
中版权信息的安全化。
图 5 添加扩展名映射
本 问 题 中 所 编 程 序 在 Windows XP + VS2005 + SQL Server 2005 中测试运行通过。
public void ProcessRequest (HttpContext context) {
System.Drawing.Image Cover; //判断请求的物理路径中, 是否存在文件 if (File.Exists (context.Request.PhysicalPath)) { //加载文件。 其中, PhysicalPath 用于获取与请求的 URL //相 对 应 的 物 理 文 件 系 统 路 径 Cover=Image.FromFile (context.Request.PhysicalPath) ; //加 载 水 印 图 片 Image watermark = Image.FromFile (context.Request. MapPath (WATERMARK_URL)) ; //实 例 化 画 布 Graphics g = Graphics.FromImage (Cover) ; //在 Cover 上绘制水印
图 3 ASP.NET 处理 HTTP 请求的内部过程
每个 HTTP 请求 可 以 经 过 多 个 模 块 , 即 HttpModule, 但 最 终只能被一个 HttpHandler 处理。
当 一 个 HTTP 请 求 到 达 HttpModule 时 , 整 个 ASP.NET Framework 系 统 并 没 有 对 这 个 HTTP 请 求 做 任 何 处 理 , 也 就 是 说 此 时 对 于 HTTP 请 求 来 讲 , HttpModule 是 一 个 HTTP 请 求 的 “必经之路”, 它可以在这个 HTTP 请求传递到真正的请求处 理 中心 (HttpHandler) 之前附加一些 需 要 的 信 息 在 这 个 HTTP 请 求信息之上, 或者针对截获的这个 HTTP 请求信息做一些 额 外 的工作, 或者在某些情况下干脆终止满足一些条件的 HTTP 请 求, 从而可以起到一个过滤器的作用。
(作者: 孙翠华)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
type=" BookHandler" ></add> </httpHandlers>
其 中 path 是 访 问 路 径 , 此 处 表 示 所 有 访 问 “ Images/
BookImages/*.jpg” 路 径 的 请 求 都 将 交 给 BookHandler 类 处 理 。
“Images/BookImages” 目 录 就 是 专 门 存 放 封 面 图 片 的 目 录 , 可
1) 打开 IIS 控制台管理程序, 选择对应的站点目录, 打开 它的属性对话框。
名 符 合 相 关 条 件 时 ( 如 .aspx) , 才 将 请 求 转 交 给 ASP.NET 处
2) 在该属性对话 框 的 “目 录 ” 选 项 卡 中 , 单 击 “配 置 ”
理。
按钮。 打开 “应用程序配置” 对话框。
(DEFAULTIMAGE_URL)) ; } //设 置 输 出 格 式 context.Response.ContentType=" image/jpeg" ; //将 图 片 存 入 输 出 流
Cover.Save ( context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg) ;
g.DrawImage ( watermark,new Rectangle ( Cover. Width -watermark .Width,Cover.Height -watermark.Height, watermark.Width,watermark.Height) ,0,0,watermark.Width,
90 2009. 11
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
编程疑难问题解答
处理, 所依据的原理 是 后 缀 名 。 默 认 情 况 下 , .html、 .jpg 等 静 态格式的文件 IIS 会 自 己 处 理 , 直 接 将 结 果 返 回 。 只 有 当 后 缀
(作者: 王文江 周国瑞)
发送图片到客户端前做一些处理, 动态地添加上数字水印效 果。 这种方式很好地解决了上两种方案中的问题, 正是本文所 采取的方案。
2. 技术支持 ASP.NET 在处理 HTTP 请求时有两个核心机制 HttpModule 和 HttpHຫໍສະໝຸດ Baidundler, 图 3 表 示 了 ASP.NET 处 理 HTTP 请 求 的 内 部 过程。
private const string WATERMARK_URL = " ~/Images/watermark.jpg" ;//水印图片
private const string DEFAULTIMAGE_URL = " ~/Images/ nophoto.jpg" ;//默认图片, 当图书没有封面图片时显示
以 将 所 有 访 问 该 目 录 下 的 .jpg 格 式 文 件 的 请 求 都 转 交 给
BookHandler 类处理。
使用该配置后, 不管请求的路径中有没有实际文件, 都将
执行该 BookHandler 类。
(3)创建 HttpHandler 程序
创 建 一 个 实 现 IHtttpHandler 类 BookHandler, 在 默 认 情 况