需要Coldfusion策略来加水印11 GB的jpg

时间:2013-11-04 17:47:58

标签: iis coldfusion watermark coldfusion-10 cfimage

我有一个客户想要在运行ColdFusion 10的IIS服务器上为其图像添加水印。我正在寻找任何方法来避免使用批量更新来破坏所有图像,并且必须同时管理水印版本和原始图像版本。

可以使用ColdFusion动态地为高rez图像进行水印而不会使服务器过载吗?我想如果我使用robots.txt从搜索引擎流量中排除该文件夹,那么它将不会超过访问者的流量,这可能是可能的。像这样的灵活解决方案将是理想的,允许客户端更新水印的外观而无需重新批处理。

你会怎么处理它?<​​/ p>

6 个答案:

答案 0 :(得分:2)

这实际上包含在Adobe ColdFusion文档中。

首先有Manipulating ColdFusion images - 页面底部附近是创建水印的部分(每个项目符号都会在该页面上进一步详细讨论)

  

水印是叠加在另一图像上的半透明图像。水印的一个用途是用于保护受版权保护的图像。要在ColdFusion中创建水印,可以将ImageSetDrawingTransparency函数与ImagePaste函数一起使用。您可以通过以下三种方式之一创建水印图像:

     
      
  • 从现有图像文件创建水印。例如,您可以使用公司徽标作为水印。
  •   
  • 在ColdFusion中创建文本图像并将图像应用为水印。例如,您可以创建文本字符串,例如版权或证据,并将其应用于照片库中的所有图像。
  •   
  • 在ColdFusion中创建绘图图像并将其用作水印。例如,您可以使用绘图功能创建绿色复选标记并将其应用于已批准的图像。
  •   

然后有Writing images to the browser - 讨论如何直接将图像写入浏览器而不将其写入磁盘。

  

使用cfimage标记的writeToBrowser操作直接在浏览器中显示图像,而无需将其写入文件。此技术对于测试ColdFusion图像的外观非常有用。

他们甚至在使用ColdFusion图像的应用程序示例下有Generating a gallery of watermarked images - 大约在该页面的一半处。

这些例子可以帮助你。

答案 1 :(得分:1)

Ben Nadel的博客系列涵盖了这一点: http://www.bennadel.com/blog/775-Learning-ColdFusion-8-CFImage-Part-III-Watermarks-And-Transparency.htm

这取决于图像对服务器负载的真实程度,以及服务器的多么丰富。

我所做的是通过ajax调用渲染图像(即将一个微调器放到适当的位置,直到它被加载,然后用渲染/水印图像扫出HTML)。

您还可以轻松拥有已加水印图像的缓存文件夹,然后脚本会在缓存文件夹上执行fileExists(),如果已经存在,则提供该文件。

答案 2 :(得分:1)

一个好的解决方案是为已加水印的图像创建一个新文件夹(例如/ images / watermarked /),然后添加一个Web服务器重写规则,检查文件夹中是否存在该文件,如果是在文件夹中不存在,然后重定向规则通过CF运行请求,并允许您生成水印图像并将其存储在文件夹中以供将来使用。

您可以使用IIS重写模块执行此操作,请查看此链接以获取类似的解决方案:If File exists, return file, If File does not exit, Rewrite

该解决方案的好处是可以通过Web服务器提供图像,并避免在大多数情况下涉及CF.然后,如果你有一个新的水印,你只需清空/ images / watermarked /文件夹,它会在请求进入时开始生成新的水印。

如果您有更复杂的需求,那么您可能需要查看mod_xsendfile(来自Helicon的Apache模块或IIS模块)。

答案 3 :(得分:0)

这个答案(How to add watermarks to images via command line - Hopefully using Irfanview)看起来像是业务,只是提供一个临时文件,使用该方法即时生成。 (它不使用IrfanView)。我不熟悉ColdFusion,所以这取决于你。

答案 4 :(得分:0)

与您的问题没有直接关系,但如果您的客户不希望通过网络直接访问非水印图片,我认为仅使用robots.txt从搜索引擎中排除该文件夹是不够的,因为您有效地将任何看过robots.txt的人指向该文件夹。您应该将原始图像放在不可通过Web访问的目录中。

答案 5 :(得分:0)

这是一个简单的逻辑,我用它来处理驻留在我的linux服务器驱动器上的IIS服务器中的图像。从后者我为每个图像添加水印并将它们分成由文件夹表示的每个组的组。我每天处理大约800-1000张图像,质量非常高(文件最小值为10MB)。但是,如果在CF10中使用ImgaWrite功能,我会使用质量参数缩小质量。

<cfloop array="myArrayofStructs" index="carr">
<cfif len(carr.tempPath) GT 0>              
 <cfif !directoryexists(Dirdestn&carr.tempPath&"/")>
    <cfset DirectoryCreate(Dirdestn&carr.tempPath&"/")>
 <cfelse>
    <!---Do Nothing--->
 </cfif>

<cfset destn=Dirdestn&carr.tempPath&"/"&carr.photoid&".jpg">

<cfset source=Expandpath("/imagebank/"&carr.filename)>
<cfif fileexists(Expandpath("/imagebank/"&carr.filename)) AND IsImageFile(Expandpath("/imagebank/"&carr.filename))>
    <cfif !fileexists(destn)>
     <cfimage source="#source#" name="image_1">
     <cfset imagepaste(image_1, watermark, 500, 0)>                                     <cfset imageWrite(image_1, destn,0)>
    </cfif>
</cfif>