我有一个新的 CF18 服务器,我在读取和转换一些在我以前的 CF11 服务器上可读的旧图像时遇到了一些错误。仅供参考 GetReadableImageFormats 结果为“BMP,GIF,JPEG,JPEG 2000,JPEG2000,JPG,PNG,PNM,RAW,TIF,TIFF,WBMP”
通常我将文件作为二进制文件读取并将其放入内存中进行操作
<cffile action="readBinary" file="#file_location#" variable="binImage" />
<cfimage action="read" source="#binImage#" name="objImage" isbase64="no">
现在这会导致错误:“尝试读取图像时发生异常。流中没有 SOF 段”
使用 action="read" 读取文件并转储 left(binImage, 999) 结果:“...2015:10:07 17:46:58 Kofax standard Multi-Page TIFF Storage Filter v3.03.000,...”
然后我尝试使用以下方法将其读入java:
<cfset tifFileName="#file_location#">
<cfscript>
ss = createObject("Java","com.sun.media.jai.codec.FileSeekableStream").init(tifFileName);
//create JAI ImageDecoder
decoder = createObject("Java","com.sun.media.jai.codec.ImageCodec").createImageDecoder("tiff", ss, JavaCast("null",""));
</cfscript>
这会产生错误:“不支持旧式 JPEG-in-TIFF 数据的解码。”
我发现了这个... 不支持旧式 JPEG-in-TIFF 数据的解码
您认为使用 TwelveMonkeys ImageIO 是解决我的问题的最佳途径吗?
更新:根据存在无效标记 0xFF9E 的建议,我尝试了以下操作:
<cffile action="readBinary" file="#file_location#" variable="binImage" />
<cfset hexEncoding = binaryEncode(binImage, "hex")>
<cfset new_hexEncoding = replaceNoCase(hexEncoding, 'FF9E', 'FFE9', 'ALL')>
<cfset binImage = binaryDecode(new_hexEncoding, "hex")>
isImage(binImage) 返回“NO”并且“流中没有 SOF 段”错误仍然存在。我遍历了 hexEncoding 并找到了 FF9E 字符串 23x。我从未编辑过原始图像代码,所以我不确定我的替换是否正确。
编辑:此时我相当确定我的搜索和替换 hexEncoding、'FF9E'、'FFE9' 逻辑有缺陷。在 binaryEncoded binImage 中没有出现 0xff9e。