WaterPrint_Function.asp
上传用户:jisenq
上传日期:2014-06-29
资源大小:7216k
文件大小:17k
源码类别:

数据库编程

开发平台:

ASP/ASPX

  1. <%
  2. '为文件添加水印
  3. Function AddWaterMark(FileName)
  4. Dim strMarkSettingSql,MarkSettingRs,objFileSystem,strFileExtName,objImage
  5. If InStr(FileName,":") = 0 Then '把文件名转换为实际路径
  6. FileName = Server.Mappath(FileName)
  7. End if
  8. If FileName <> "" and not IsNull(FileName) Then '文件名是否不为空,否则退出
  9. strFileExtName = ""
  10. If InStr(FileName,".") <> 0 Then
  11. strFileExtName = Lcase(Trim(Mid(FileName,InStrRev(FileName,".")+1)))
  12. End if
  13. If strFileExtName <> "jpg" and strFileExtName <> "gif" and strFileExtName <> "bmp" and strFileExtName <> "png" Then'文件不是可用图片则退出
  14. Exit Function
  15. End if
  16. Set objFileSystem = Server.CreateObject("Scripting.FileSystemObject")
  17. If objFileSystem.FileExists(FileName) Then '文件存在,否则退出
  18. strMarkSettingSql = "select top 1 * from FS_MF_config"
  19. Set MarkSettingRs = conn.Execute(strMarkSettingSql)
  20. If MarkSettingRs("PicClassid") <> "9" Then '选择了某个水印组件,否则退出
  21. Select Case MarkSettingRs("PicClassid")
  22. Case "0" '使用AspJpeg组件
  23. If IsObjInstalled("Persits.Jpeg") Then 'AspJpeg组件已安装,否则退出
  24. If IsExpired("Persits.Jpeg") Then
  25. Response.Write("Persits.Jpeg组件已过期,请选择其他组件或关闭水印功能。")
  26. Response.End
  27. End if
  28. If MarkSettingRs("MarkType") = "1" Then '添加文字水印
  29. AddTextMark 1,MarkSettingRs("MarkText"),MarkSettingRs("MarkFontColor"),MarkSettingRs("MarkFontName"),MarkSettingRs("MarkFontBond"),MarkSettingRs("MarkFontSize"),MarkSettingRs("MarkPosition"),FileName
  30. Else '添加图片水印
  31. AddPictureMark 1,MarkSettingRs("MarkWidth"),MarkSettingRs("MarkHeight"),MarkSettingRs("MarkPicture"),MarkSettingRs("MarkOpacity"),MarkSettingRs("MarkTranspColor"),MarkSettingRs("MarkPosition"),FileName
  32. End if
  33. End if
  34. Case "1" '使用wsImage组件
  35. If strFileExtName = "png" Then 'wsImage组件不支持PNG文件,是则退出
  36. Exit Function
  37. End if
  38. If IsObjInstalled("wsImage.Resize") Then 'wsImage组件已安装,否则退出
  39. If IsExpired("wsImage.Resize") Then
  40. Response.Write("wsImage.Resize组件已过期,请选择其他组件或关闭水印功能。")
  41. Response.End
  42. End if
  43. If MarkSettingRs("MarkType") = "1" Then '添加文字水印
  44. AddTextMark 2,MarkSettingRs("MarkText"),MarkSettingRs("MarkFontColor"),MarkSettingRs("MarkFontName"),MarkSettingRs("MarkFontBond"),MarkSettingRs("MarkFontSize"),MarkSettingRs("MarkPosition"),FileName
  45. Else '添加图片水印
  46. AddPictureMark 2,MarkSettingRs("MarkWidth"),MarkSettingRs("MarkHeight"),MarkSettingRs("MarkPicture"),MarkSettingRs("MarkOpacity"),MarkSettingRs("MarkTranspColor"),MarkSettingRs("MarkPosition"),FileName
  47. End if
  48. End if
  49. Case "2" '使用SA-ImgWriter组件
  50. If IsObjInstalled("SoftArtisans.ImageGen") Then 'SA-ImgWriter组件已安装,否则退出
  51. If IsExpired("SoftArtisans.ImageGen") Then
  52. Response.Write("SoftArtisans.ImageGen组件已过期,请选择其他组件或关闭水印功能。")
  53. Response.End
  54. End if
  55. If MarkSettingRs("MarkType") = "1" Then '添加文字水印
  56. AddTextMark 3,MarkSettingRs("MarkText"),MarkSettingRs("MarkFontColor"),MarkSettingRs("MarkFontName"),MarkSettingRs("MarkFontBond"),MarkSettingRs("MarkFontSize"),MarkSettingRs("MarkPosition"),FileName
  57. Else '添加图片水印
  58. AddPictureMark 3,MarkSettingRs("MarkWidth"),MarkSettingRs("MarkHeight"),MarkSettingRs("MarkPicture"),MarkSettingRs("MarkOpacity"),MarkSettingRs("MarkTranspColor"),MarkSettingRs("MarkPosition"),FileName
  59. End if
  60. End if
  61. End Select
  62. End if
  63. Set MarkSettingRs = nothing
  64. End if
  65. Set objFileSystem = nothing
  66. End if
  67. End Function
  68. '为图片添加文字水印
  69. Function AddTextMark(MarkComponentID,MarkText,MarkFontColor,MarkFontName,MarkFontBond,MarkFontSize,MarkPosition,FileName)
  70. Dim objImage,X,Y,Text,TextWidth,FontColor,FontName,FondBond,FontSize,OriginalWidth,OriginalHeight
  71. If InStr(FileName,":") = 0 Then '把文件名转换为实际路径
  72. FileName = Server.Mappath(FileName)
  73. End if
  74. Text = Trim(MarkText)
  75. If Text = "" Then
  76. Exit Function
  77. End if
  78. 'FontColor = Replace(MarkFontColor,"#","&H")
  79. FontColor="&H"&MarkFontColor
  80. FontName = MarkFontName
  81. If MarkFontBond = "1" Then
  82. FondBond = True
  83. Else
  84. FondBond = False
  85. End if
  86. FontSize = Cint(MarkFontSize)
  87. Select Case MarkComponentID
  88. Case "1"
  89. If Not IsObjInstalled("Persits.Jpeg") Then
  90. Exit Function
  91. End if
  92. Set objImage = Server.CreateObject("Persits.Jpeg")
  93. objImage.Open FileName
  94. objImage.Canvas.Font.Color =FontColor
  95. objImage.Canvas.Font.Family = FontName
  96. objImage.Canvas.Font.Bold = FondBond
  97. objImage.Canvas.Font.Size = FontSize
  98. TextWidth = objImage.Canvas.GetTextExtent(Text) '计算GB2313编码的字符串所占宽度
  99. If objImage.OriginalWidth < TextWidth Or objImage.OriginalHeight < FontSize Then '如果图片高度小于字体大小或宽度小于字符串宽度则退出
  100. Exit Function
  101. End if
  102. GetPostion Cint(MarkPosition),X,Y,objImage.OriginalWidth,objImage.OriginalHeight,TextWidth,FontSize '计算坐标
  103. objImage.Canvas.Print X, Y, Text,134
  104. objImage.Save FileName
  105. Case "2"
  106. If Not IsObjInstalled("wsImage.Resize") Then
  107. Exit Function
  108. End if
  109. Set objImage = Server.CreateObject("wsImage.Resize")
  110. objImage.LoadSoucePic Cstr(FileName)
  111. objImage.TxtMarkFont = CStr(FontName)
  112. objImage.TxtMarkBond = FondBond
  113. objImage.TxtMarkHeight = FontSize
  114. 'objImage.GetSourceInfo OriginalWidth,OriginalHeight
  115. 'GetPostion Cint(MarkPosition),X,Y,OriginalWidth,OriginalHeight,Len(Text)*FontSize*3/4,FontSize '计算坐标
  116. FontColor = "&H"&Mid(FontColor,7)&Mid(FontColor,5,2)&Mid(FontColor,3,2) '颜色代码转换&HBBGGRR
  117. objImage.AddTxtMark Cstr(FileName),CStr(Text),Clng(FontColor),1,1
  118. Case "3"
  119. If Not IsObjInstalled("SoftArtisans.ImageGen") Then
  120. Exit Function
  121. End if
  122. Set objImage = Server.CreateObject("SoftArtisans.ImageGen")
  123. objImage.LoadImage FileName
  124. objImage.Font.height = FontSize
  125. objImage.Font.name = FontName
  126. FontColor = "&H"&Mid(FontColor,7)&Mid(FontColor,5,2)&Mid(FontColor,3,2) '颜色代码转换&HBBGGRR
  127. objImage.Font.Color = Clng(FontColor)
  128. objImage.Text = Text
  129. GetPostion Cint(MarkSettingRs("MarkPosition")),X,Y,objImage.Width,objImage.Height,objImage.TextWidth,objImage.TextHeight '计算坐标
  130. objImage.DrawTextOnImage X, Y,objImage.TextWidth,objImage.TextHeight
  131. objImage.SaveImage 0, objImage.ImageFormat, FileName 
  132. End Select
  133. Set objImage = nothing
  134. End Function
  135. '为图片添加图片水印
  136. Function AddPictureMark(MarkComponentID,MarkWidth,MarkHeight,MarkPicture,MarkOpacity,MarkTranspColor,MarkPosition,FileName)
  137. Dim objImage,objMark,X,Y,OriginalWidth,OriginalHeight,Position
  138. If InStr(FileName,":") = 0 Then '把文件名转换为实际路径
  139. FileName = Server.Mappath(FileName)
  140. End if
  141. If IsNull(MarkWidth) Or MarkWidth = "" Then
  142. MarkWidth = 40
  143. Else
  144. MarkWidth = Cint(MarkWidth)
  145. End if
  146. If IsNull(MarkHeight) Or MarkHeight = "" Then
  147. MarkHeight = 20
  148. Else
  149. MarkHeight = Cint(MarkHeight)
  150. End if
  151. If MarkPicture = "" Then
  152. Exit Function
  153. End if
  154. If IsNull(MarkOpacity) Or MarkOpacity = "" Then
  155. MarkOpacity = 1
  156. Else
  157. MarkOpacity = Csng(MarkOpacity)
  158. End if
  159. If MarkTranspColor <> "" Then '转换颜色代码
  160. MarkTranspColor = "&H"&MarkTranspColor
  161. End if
  162. Select Case MarkComponentID
  163. Case 1
  164. If Not IsObjInstalled("Persits.Jpeg") Then
  165. Exit Function
  166. End if
  167. Set objImage = Server.CreateObject("Persits.Jpeg")
  168. Set objMark = Server.CreateObject("Persits.Jpeg")
  169. objImage.Open FileName
  170. If objImage.OriginalWidth < MarkWidth Or objImage.OriginalHeight < MarkHeight Then '如果图片高度小于水印高度或宽度小于字水印宽度则退出
  171. Exit Function
  172. End if
  173. objMark.Open Server.Mappath(MarkPicture)
  174. GetPostion Cint(MarkPosition),X,Y,objImage.OriginalWidth,objImage.OriginalHeight,MarkWidth,MarkHeight '计算坐标
  175. If MarkTranspColor <> "" Then
  176. objImage.DrawImage X,Y,objMark,MarkOpacity,MarkTranspColor
  177. else
  178. objImage.DrawImage X,Y,objMark,MarkOpacity
  179. End if
  180. objImage.Save FileName
  181. Case 2
  182. If Not IsObjInstalled("wsImage.Resize") Then
  183. Exit Function
  184. End if
  185. Set objImage = Server.CreateObject("wsImage.Resize")
  186. objImage.LoadSoucePic Cstr(FileName)
  187. objImage.LoadImgMarkPic Server.Mappath(MarkPicture)
  188. objImage.GetSourceInfo OriginalWidth,OriginalHeight
  189. GetPostion Cint(MarkPosition),X,Y,OriginalWidth,OriginalHeight,MarkWidth,MarkHeight '计算坐标
  190. If MarkTranspColor = "" Then
  191. MarkTranspColor = 0
  192. Else
  193. MarkTranspColor = "&H"&Mid(MarkTranspColor,7)&Mid(MarkTranspColor,5,2)&Mid(MarkTranspColor,3,2) '颜色代码转换&HBBGGRR
  194. End if
  195. objImage.AddImgMark Cstr(FileName),int(X),int(Y),Clng(MarkTranspColor),Int(CSng(MarkOpacity)*100)
  196. Case 3
  197. If Not IsObjInstalled("SoftArtisans.ImageGen") Then
  198. Exit Function
  199. End if
  200. Set objImage = Server.CreateObject("SoftArtisans.ImageGen")
  201. objImage.LoadImage FileName
  202. Select Case Cint(MarkSettingRs("MarkPosition"))
  203. Case 1
  204. Position = 3
  205. Case 2
  206. Position = 5
  207. Case 3
  208. Position = 1
  209. Case 4
  210. Position = 6
  211. Case 5
  212. Position = 8
  213. End Select
  214. If MarkTranspColor <> "" Then
  215. MarkTranspColor = "&H"&Mid(MarkTranspColor,7)&Mid(MarkTranspColor,5,2)&Mid(MarkTranspColor,3,2) '颜色代码转换&HBBGGRR
  216. objImage.AddWatermark Server.MapPath(MarkPicture), Position,CSng(MarkOpacity),Clng(MarkTranspColor)
  217. else
  218. objImage.AddWatermark Server.MapPath(MarkPicture), Position,CSng(MarkOpacity)
  219. End if
  220. 'Position:saiTopMiddle 0 saiCenterMiddle 1 saiBottomMiddle 2 saiTopLeft 3 saiCenterLeft 4 saiBottomLeft 5 saiTopRight 6 saiCenterRight 7 saiBottomRight 8 
  221. objImage.SaveImage 0, objImage.ImageFormat,FileName 
  222. End Select
  223. Set objImage = nothing
  224. Set objMark = nothing
  225. End Function
  226. '计算水印相对图片的坐标
  227. Function GetPostion(MarkPosition,X,Y,ImageWidth,ImageHeight,MarkWidth,MarkHeight)
  228. Select Case Cint(MarkPosition)
  229. Case 1
  230. X = 1
  231. Y = 1
  232. Case 2
  233. X = 1
  234. Y = Int(ImageHeight - MarkHeight - 1)
  235. Case 3
  236. X = Int((ImageWidth - MarkWidth)/2)
  237. Y = Int((ImageHeight - MarkHeight)/2)
  238. Case 4
  239. X = Int(ImageWidth - MarkWidth - 1)
  240. Y = 1
  241. Case 5
  242. X = Int(ImageWidth - MarkWidth - 1)
  243. Y = Int(ImageHeight - MarkHeight - 1)
  244. End Select
  245. End Function
  246. '由原图片根据数据里保存的设置生成缩略图
  247. Function CreateThumbnailEx(FileName,ThumbnailFileName)
  248. Dim strSql,RsThumbnailSetting
  249. strSql = "Select ThumbnailComponent,RateTF,ThumbnailWidth,ThumbnailHeight,ThumbnailRate From FS_Config"
  250. Set RsThumbnailSetting = Conn.Execute(strSql)
  251. CreateThumbnailEx = False
  252. If RsThumbnailSetting("ThumbnailComponent") <> "0" and (not IsNull(RsThumbnailSetting("ThumbnailComponent")))Then
  253. If RsThumbnailSetting("RateTF") = "0" Then
  254. CreateThumbnailEx = CreateThumbnail(FileName,Cint(RsThumbnailSetting("ThumbnailWidth")),Cint(RsThumbnailSetting("ThumbnailHeight")),0,ThumbnailFileName)
  255. Else
  256. CreateThumbnailEx = CreateThumbnail(FileName,0,0,Csng(RsThumbnailSetting("ThumbnailRate")),ThumbnailFileName)
  257. End if
  258. End if
  259. Set RsThumbnailSetting = nothing
  260. End Function
  261. '由原图片生成指定宽度和高度的缩略图
  262. Function CreateThumbnail(FileName,Width,Height,Rate,ThumbnailFileName)
  263. Dim strSql,RsSetting,objImage,iWidth,iHeight,strFileExtName
  264. CreateThumbnail = False
  265. If IsNull(FileName) Then '如果原图片未指定直接退出
  266. Exit Function
  267. Elseif FileName="" Then
  268. Exit Function
  269. End if
  270. If InStr(FileName,".") <> 0 Then
  271. strFileExtName = Lcase(Trim(Mid(FileName,InStrRev(FileName,".")+1)))
  272. End if
  273. If strFileExtName <> "jpg" and strFileExtName <> "gif" and strFileExtName <> "bmp" and strFileExtName <> "png" Then'文件不是可用图片则退出
  274. Exit Function
  275. End if
  276. If IsNull(ThumbnailFileName) Then '如果缩略图未指定保存路径直接退出
  277. Exit Function
  278. Elseif ThumbnailFileName="" Then
  279. Exit Function
  280. End if
  281. If IsNull(Width) Then '如果缩略图宽度未指定则将其指定为0
  282. Width = 120
  283. Elseif Width="" Then
  284. Width = 120
  285. End if
  286. If IsNull(Rate) Then '如果缩略图缩放比例未指定则将其指定为0
  287. Rate = 0
  288. Elseif Rate="" Then
  289. Rate = 0
  290. End if
  291. If IsNull(Height) Then '如果缩略图高度未指定则将其指定为0
  292. Height = 200
  293. Elseif Height="" Then
  294. Height = 200
  295. End if
  296. If InStr(FileName,":") = 0 Then '原图片路径转换化物理路径
  297. FileName = Server.Mappath(FileName)
  298. End if
  299. If InStr(ThumbnailFileName,":") = 0 Then '缩略图路径转换化物理路径
  300. ThumbnailFileName = Server.Mappath(ThumbnailFileName)
  301. End if
  302. Width = Cint(Width)
  303. Height = Cint(Height)
  304. Rate = CSng(Rate)
  305. strSql = "Select ThumbnailComponent From FS_Config"
  306. Set RsSetting = Conn.Execute(strSql)
  307. Select Case Cint(RsSetting("ThumbnailComponent"))
  308. Case 0 '缩略图功能关闭,退出
  309. Exit Function
  310. Case 1
  311. If Not IsObjInstalled("Persits.Jpeg") Then 'Persits.Jpeg未安装,退出
  312. Exit Function
  313. End if
  314. If IsExpired("Persits.Jpeg") Then
  315. Response.Write("Persits.Jpeg组件已过期,请选择其他组件或关闭缩略图功能。")
  316. Response.End
  317. End if
  318. Set objImage = Server.CreateObject("Persits.Jpeg")
  319. objImage.Open FileName
  320. If Rate = 0 and (Width <> 0 Or Height<> 0) Then
  321. If Width < objImage.OriginalWidth And Height < objImage.OriginalHeight Then
  322. If Width = 0 and Height <> 0 Then
  323. objImage.Width = objImage.OriginalWidth/objImage.OriginalHeight*Height
  324. objImage.Height = Height
  325. Elseif Width <> 0 and Height = 0 Then
  326. objImage.Width = Width
  327. objImage.Height = objImage.OriginalHeight/objImage.OriginalWidth*Width
  328. ElseIf Width <> 0 and Height <> 0 Then
  329. objImage.Width = Width
  330. objImage.Height = Height
  331. End if
  332. End if
  333. Elseif  Rate <> 0 Then
  334. objImage.Width = objImage.OriginalWidth*Rate
  335. objImage.Height = objImage.OriginalHeight*Rate
  336. End if
  337. objImage.Save ThumbnailFileName
  338. Case 2
  339. If Not IsObjInstalled("wsImage.Resize") Then 'wsImage.Resize未安装,退出
  340. Exit Function
  341. End if
  342. If IsExpired("wsImage.Resize") Then
  343. Response.Write("wsImage.Resize组件已过期,请选择其他组件或关闭缩略图功能。")
  344. Response.End
  345. End if
  346. If strFileExtName = "png" Then 'wsImage.Resize不支持PNG图片,是则退出
  347. Exit Function
  348. End if
  349. Set objImage = Server.CreateObject("wsImage.Resize")
  350. objImage.LoadSoucePic CStr(FileName)
  351. If Rate = 0 and (Width <> 0 Or Height<> 0) Then
  352. objImage.GetSourceInfo iWidth,iHeight
  353. If Width < iWidth And Height < iHeight Then
  354. If Width = 0 and Height <> 0 Then
  355. objImage.OutputSpic CStr(ThumbnailFileName),0,Height,2
  356. Elseif Width <> 0 and Height = 0 Then
  357. objImage.OutputSpic CStr(ThumbnailFileName),Width,0,1
  358. ElseIf Width <> 0 and Height <> 0 Then
  359. objImage.OutputSpic CStr(ThumbnailFileName),Width,Height,0
  360. Else
  361. objImage.OutputSpic CStr(ThumbnailFileName),1,1,3
  362. End if
  363. Else
  364. objImage.OutputSpic CStr(ThumbnailFileName),1,1,3
  365. End if
  366. Elseif  Rate <> 0 Then
  367. objImage.OutputSpic CStr(ThumbnailFileName),Rate,Rate,3
  368. Else
  369. objImage.OutputSpic CStr(ThumbnailFileName),1,1,3
  370. End if
  371. Case 3
  372. If Not IsObjInstalled("SoftArtisans.ImageGen") Then 'SoftArtisans.ImageGen未安装,退出
  373. Exit Function
  374. End if
  375. If IsExpired("SoftArtisans.ImageGen") Then
  376. Response.Write("SoftArtisans.ImageGen组件已过期,请选择其他组件或关闭缩略图功能。")
  377. Response.End
  378. End if
  379. Set objImage = Server.CreateObject("SoftArtisans.ImageGen")
  380. objImage.LoadImage FileName
  381. If Rate = 0 and (Width <> 0 Or Height<> 0) Then
  382. If Width < objImage.Width And Height < objImage.Height Then
  383. If Width = 0 and Height <> 0 Then
  384. objImage.CreateThumbnail  ,Clng(Height),0,true
  385. Elseif Width <> 0 and Height = 0 Then
  386. objImage.CreateThumbnail  Clng(Width),objImage.Height/objImage.Width*Width,0,false
  387. ElseIf Width <> 0 and Height <> 0 Then
  388. objImage.CreateThumbnail  Clng(Width),Clng(Height),0,false
  389. End if
  390. End if
  391. Elseif  Rate <> 0 Then
  392. objImage.CreateThumbnail Clng(objImage.Width*Rate),Clng(objImage.Height*Rate),0,false
  393. End if
  394. objImage.SaveImage 0,objImage.ImageFormat,ThumbnailFileName
  395. Case 4
  396. If Not IsObjInstalled("CreatePreviewImage.cGvbox") Then 'CreatePreviewImage.cGvbox未安装,退出
  397. Exit Function
  398. End if
  399. set objImage = Server.CreateObject("CreatePreviewImage.cGvbox")
  400. objImage.SetImageFile = FileName 'imagename原始文件的物理路径
  401. If Rate = 0 and (Width <> 0 Or Height<> 0) Then
  402. objImage.SetPreviewImageSize = Width '预览图宽度
  403. Elseif  Rate <> 0 Then
  404. objImage.SetPreviewImageSize = objImage.SetPreviewImageSize*Rate '预览图宽度
  405. End if
  406. objImage.SetSavePreviewImagePath = ThumbnailFileName '预览图存放路径
  407. If objImage.DoImageProcess = False Then '创建预览图的文件
  408. Exit Function
  409. End if
  410. End Select
  411. CreateThumbnail = True
  412. End Function
  413. %>