2014-01-16 5 views
3

Я пытаюсь сравнить изображения и найти, одинаковы они или нет. Изображения могут иметь одно и то же имя, но фактическое изображение может отличаться. Код, который у меня есть.Как сравнить два изображения в ColdFusion

<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> 

Код не работает. Может ли кто-нибудь увидеть, что я делаю неправильно?

Update 1 от комментариев

В результате, что я на самом деле получить, что первые изображения одинаковы, а остальные изображения в файлах различны. Но это неверно, так как большинство изображений, которые я сравниваю, одинаковы.

Обновление 2 от комментариев

Это неправильно идентифицирует те же изображения, как отличаться от других. Фактически я получаю то, что первые два изображения одинаковы, а остальные разные. Что не так, поскольку большинство изображений у меня одинаковые.

+0

В результате я получаю то, что первые изображения одинаковы, а остальные изображения в файлах разные. Но это неверно, так как большинство изображений, которые я сравниваю, одинаковы. – Roman

+0

Определить, что «похоже, не работает» - это ошибки, он неправильно идентифицирует разные изображения как идентичные или неправильно идентифицирует одинаковые изображения как разные? – duncan

+0

Неправильно идентифицирует одинаковые изображения как разные. Фактически я получаю то, что первые два изображения одинаковы, а остальные разные. Что не так, поскольку большинство изображений у меня одинаковые. – Roman

ответ

1

Я всегда делал это с помощью BinaryEncode(), а затем сравнивал полученные строки. Вы должны быть осторожны, поскольку сжатие может сделать файлы разными, даже если они выглядят (на глаз) точно так же.

Смежные вопросы