【问题标题】:How to compare two images in ColdFusion如何在 ColdFusion 中比较两个图像
【发布时间】:2014-01-16 15:15:01
【问题描述】:

我正在尝试比较图像并确定它们是否相同。图像可以具有相同的名称,但实际图像可能不同。我到目前为止的代码。

<cfset dirToReadFrom = #ExpandPath( '../properties-feed/unzipped/' )# />

<cfdirectory
action="list"
directory="#dirToReadFrom#"
listinfo="name"
name="qFile"
sort="asc"
filter="*.jpg"
/>

<cfset images = ArrayNew(1)>
<cfoutput query="qFile">
    <cfset ArrayAppend(images, #qFile.name#)>
</cfoutput>

<cfset dirToCreate = #ExpandPath( './assets/images/resized/original/' )# />
<cfif not DirectoryExists(dirToCreate)>
    <cfdirectory action = "create" directory = "#dirToCreate#" />
    <cfoutput><p>Your directory has been created.</p></cfoutput>
</cfif>
<cfzip
action="unzip"
file="#ExpandPath( '../properties-feed/data.zip/' )#"
destination="#ExpandPath( './assets/images/resized/original/' )#"
overwrite="true"
/>

<cfset dirToReadFromOriginal = #ExpandPath( './assets/images/resized/original/' )# />

<cfdirectory
action="list"
directory="#dirToReadFromOriginal#"
listinfo="name"
name="qFileOriginal"
sort="asc"
filter="*.jpg"
/>
<cfset imagesLatest = ArrayNew(1)>
<cfoutput query="qFileOriginal">
    <cfset ArrayAppend(imagesLatest, #qFileOriginal.name#)>
</cfoutput>

<!--- Loop over your current images --->
<cfloop query="qFileOriginal">
    <!--- Check for a matching file name --->
    <cfquery name="fileExists" dbtype="query">
        SELECT
            COUNT(*) AS num_Rec
        FROM
            qfile
        WHERE
            name = <cfqueryparam cfsqltype="cf_sql_varchar" value="#qFileOriginal.name#" />
    </cfquery>

    <!--- do we have a matching file name? --->
    <cfif val(fileExists.num_rec)>
        <cfimage action="read" name="newImage" source="#dirToReadFrom##qFile.name#"/>
        <cfimage action="read" name="originalImage" source="#dirToReadFromOriginal##qFileOriginal.name#"/>

        <cfset newImageBlob = ImageGetBlob(newImage) />
        <cfset originalImageBlob = ImageGetBlob(originalImage) />       

        <!--- Compare --->  
        <cfif toString(newImageBlob) eq toString(originalImageBlob) >
            Images are same
            <cfelse>
            DIFFERENT
        </cfif>     

    </cfif>

</cfloop>

代码似乎不起作用。谁能看到我做错了什么?

更新 1 来自 cmets

我实际得到的结果是第一个图像是相同的,而文件中的其余图像是不同的。但这是不正确的,因为我比较的大多数图像都是相同的。

更新 2 来自 cmets

它错误地将相同的图像识别为不同的图像。我实际上得到的是前两个图像是相同的,其余的是不同的。这是不对的,因为我拥有的大多数图像都是相同的。

【问题讨论】:

  • 我实际得到的结果是第一个图像是相同的,而文件中的其余图像是不同的。但这是不正确的,因为我比较的大多数图像都是相同的。
  • 定义“似乎无法正常工作”——它会出错,它错误地将不同的图像识别为相同,或者它错误地将相同的图像识别为不同?
  • 它错误地将相同的图像识别为不同的图像。我实际上得到的是前两个图像是相同的,其余的是不同的。这是不对的,因为我拥有的大多数图像都是相同的。
  • 你的&lt;cfimage action="read" name="newImage" source="#dirToReadFrom##qFile.name#"/&gt; 语句中的变量qFile.name 来自哪里?在您发布的代码中,您循环的是 qFileOriginal 查询,而不是 qFile 查询。所以你的 newImage 永远不会改变,但 originalImage 是。这是正确的逻辑吗?您可能需要分享更多信息。如果您这样做,请edit your question 添加信息,而不是在这些 cmets 中。为了调试,我会输出正在比较的文件名。

标签: coldfusion image-comparison cfzip


【解决方案1】:

我总是用 BinaryEncode() 来做这个,然后比较结果字符串。但您必须小心,因为压缩会使文件不同,即使它们看起来(在眼睛上)完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2015-05-27
    • 2011-08-29
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多