我正在coldfusion8/mysql 5.0.88
中使用Jquery Mobile的前端做一个网站。我还使用了photoswipe.js插件,它允许在单独的视图层中缩放和浏览图像。
要设置可拍照的图像,我需要输出
<cfoutput>
<a class="swipeMe" rel="external" href="#variables.imageSrc#">
<img src="#variables.imageSrc#" class="adaptImg ui-li-thumb" />
</a>
</cfoutput>
问题是imageSrc
由用户提供,因此我必须在显示图像之前抓取/验证/调整图像大小并且我需要图片的路径以进行photoswipe-link。
我已经摆弄了一段时间,并提出了以下解决方案:
// read img from user specs
<cfimage name="myImage" source="#bildpfad##bilddateiname#" action="read" />
<cfif IsImage(myImage) is true>
// resize
<cfscript>
ImageSetAntialiasing(myImage,"on");
variables.breite = 400;
ImageScaleToFit(myImage, variables.breite,"", "highestPerformance");
</cfscript>
// write to xml, so I can get the path
<cfxml variable="imageXml">
<cfimage quality=".5" action="writetobrowser" source="#myImage#" class="adaptImg ui-li-thumb"/
</cfxml>
<cfset variables.imageSrc = imageXml.xmlRoot.xmlAttributes.src>
// output
<cfoutput>
<a class="swipeMe" rel="external" href="#variables.imageSrc#">#imageXml#</a>
</cfoutput>
</cfif>
虽然这有效但它几乎会使应用程序失速并且内存似乎也会泄漏,因为我正在运行这个内存时会丢失越来越多的内存。
问题:
上面的代码是否有任何明显的问题导致内存泄漏?我想这些图像被写入某种临时目录(CFFileservelet?)并在那里停留一段时间阻止我的记忆。如果是这样,在图像搜索中处理此问题的替代方法是什么?
谢谢!
答案 0 :(得分:2)
为什么不在服务器上创建一个/ tmp文件夹,并在那里编写被操作的图像,如:
<cfset newImageName=CreateUUID()&".jpg">
<cfimage action="write" destination="/tmp/#newImageName#" source="#myImage#">
然后你可以使用它:
<cfoutput>
<a class="swipeMe" rel="external" href="/tmp/#newImageName#"><img src="/tmp/#newImageName#" class="..."></a>
</cfoutput>
删除临时文件的示例计划任务:
<cfdirectory action="LIST" directory="#expandpath('tmp/')#" name="tempfiles" filter="*.jpg">
<cfloop query="tempfiles">
<cfif dateadd('h',24,dateLastModified) lt now()>
<cffile action="DELETE" file="#expandpath('tmp/')##name#">
</cfif>
</cfloop>