Как сравнить два изображения в 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>
Код, похоже, не работает. Кто-нибудь может увидеть, что я делаю не так?
Обновление 1 из комментариев
Результат, который я на самом деле получаю, состоит в том, что первые изображения одинаковы, а остальные изображения в файлах отличаются. Но это не правильно, так как большинство изображений, которые я сравниваю, совпадают.
Обновление 2 из комментариев
Он неправильно идентифицирует одни и те же изображения как разные. Что я на самом деле получаю, так это то, что первые два изображения одинаковы, а остальные разные. Что не правильно, так как большинство изображений у меня такие же.
1 ответ
Я всегда делал это с помощью BinaryEncode(), а затем сравнивал полученные строки. Вы должны быть осторожны, поскольку сжатие может сделать файлы разными, даже если они выглядят (на глаз) совершенно одинаково.