如何使用cfimage处理跳过不支持的图像?

时间:2015-06-04 10:43:19

标签: coldfusion coldfusion-10 cfml

我正在使用ColdFusion 10。 尝试读取某些图像文件时,ColdFusion不返回任何值,也不显示任何错误消息。

我尝试使用 cfimage 标记重新调整图片大小。它崩溃了。所以我尝试使用" imageinfo" 功能获取有关图像的信息。它返回空白。请帮我获取一些信息或跳过图片。任何人都可以帮助我吗?

我尝试使用

读取导致异常的文件
<cfimage action="read" source="full pathname" name="image">
<cfset image = imageRead(full pathname)>

和许多其他ColdFusion记录的函数。没有显示错误。没有获得输出。我使用了cffile,它显示了不支持的文件类型错误。

<cffile
    action = "readBinary" file = "full pathname" variable = "variable name"
>

谢谢Rino

1 个答案:

答案 0 :(得分:1)

尝试使用此功能读取图像。

<cfimage>标记或imageNew()在上传时尝试读取已损坏的图像文件或使用已更改扩展名保存的文件(背景透明.png文件保存为.jpeg)时可能会出现问题。

我认为这些文件的主要问题是当我们尝试读取上述文件时,coldfusion有可能不会抛出任何类型的错误。

<cfscript>
    public function readImage(fullpath){
        //trying java imageio
        var imageFile = createObject("java", "java.io.File").init(fullpath); 
        // read the image into a BufferedImage
        var ImageIO = createObject("java", "javax.imageio.ImageIO");
        try {
            var bi = ImageIO.read(imageFile);
            return ImageNew(bi);
        } catch(any e) {
        //try for bad formatted images
            //create java file object, passing in path to image
            var imageFile = createObject("java","java.io.File").init(fullpath);
            //create a FileSeekableStream, passing in the image file we created
            var fss = createObject("java","com.sun.media.jai.codec.FileSeekableStream").init(imageFile);
            //create ParameterBlock object and initialize it (call constructor)
            var pb = createObject("java","java.awt.image.renderable.ParameterBlock").init();
            //create JAI object that will ultimately do the magic we need
            var JAI = createObject("java","javax.media.jai.JAI");
            try {
                //pass in FileSeekableStream
                pb.add(fss);

                //use the JAI object to create a buffered jpeg image.
                var buffImage = local.JAI.create("jpeg", pb).getAsBufferedImage();

                //pass the buffered image to the ColdFusion imagenew()
                var New_Image = imagenew(buffImage);

                //make sure we close the stream
                fss.close();
                return New_Image;
            } catch (any e) {
                if (isDefined("fss")) {
                    fss.close();
                }
                rethrow;
            }
        }
    }
</cfscript>