📄 image.cfc
字号:
<cfreturn retVal>
<cfelse>
<cftry>
<cfset img = imageIO.read(inFile)>
<cfcatch type="any">
<cfset retval = throw("An error occurred attempting to read the specified image. #cfcatch.message# - #cfcatch.detail#")>
<cfreturn retVal>
</cfcatch>
</cftry>
<cfset retVal.img = img>
<cfset retVal.inFile = inFile>
<cfreturn retVal>
</cfif>
</cfif>
</cffunction>
<cffunction name="readImageFromURL" access="private" output="true" returntype="struct" hint="Read an image from a URL. Requires an absolute URL.">
<cfargument name="inputURL" required="yes" type="string">
<cfargument name="forModification" required="no" type="boolean" default="yes">
<cfset var retVal = StructNew()>
<cfset var img = CreateObject("java", "java.awt.image.BufferedImage")>
<cfset var inURL = CreateObject("java", "java.net.URL")>
<cfset var imageIO = CreateObject("java", "javax.imageio.ImageIO")>
<cfset retVal.errorCode = 0>
<cfset retVal.errorMessage = "">
<cfset inURL.init(arguments.inputURL)>
<cftry>
<cfset img = imageIO.read(inURL)>
<cfcatch type="any">
<cfset retval = throw("An error occurred attempting to read the specified image. #cfcatch.message# - #cfcatch.detail#")>
<cfreturn retVal>
</cfcatch>
</cftry>
<cfset retVal.img = img>
<cfreturn retVal>
</cffunction>
<cffunction name="writeImage" access="public" output="true" returntype="struct" hint="Write an image to disk.">
<cfargument name="outputFile" required="yes" type="string">
<cfargument name="img" required="yes" type="any">
<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
<cfset var retVal = StructNew()>
<cfset var outFile = "">
<cfset var filename = getFileFromPath(outputFile)>
<cfset var extension = lcase(listLast(filename,"."))>
<cfset var imageIO = CreateObject("java", "javax.imageio.ImageIO")>
<cfset var validExtensionsToWrite = ArrayToList(imageIO.getWriterFormatNames())>
<!--- used for jpeg output method --->
<cfset var out = "">
<cfset var fos = "">
<cfset var JPEGCodec = "">
<cfset var encoder = "">
<cfset var param = "">
<cfset var quality = javacast("float", jpegCompression/100)>
<cfset var tempOutputFile = "#variables.tempDirectory#\#createUUID()#.#extension#">
<cfset retVal.errorCode = 0>
<cfset retVal.errorMessage = "">
<cfif listFindNoCase(validExtensionsToWrite, extension) eq 0>
<cfset throw("Java is unable to write #extension# files. Valid formats include: #validExtensionsToWrite#")>
</cfif>
<cfif extension neq "jpg" and extension neq "jpeg">
<!---
Simple output method for non jpeg images
--->
<cfset outFile = CreateObject("java", "java.io.File")>
<cfset outFile.init(tempOutputFile)>
<cfset imageIO.write(img, extension, outFile)>
<cfelse>
<cfscript>
/*
JPEG output method handles compression
*/
out = createObject("java", "java.io.BufferedOutputStream");
fos = createObject("java", "java.io.FileOutputStream");
fos.init(tempOutputFile);
out.init(fos);
JPEGCodec = createObject("java", "com.sun.image.codec.jpeg.JPEGCodec");
encoder = JPEGCodec.createJPEGEncoder(out);
param = encoder.getDefaultJPEGEncodeParam(img);
param.setQuality(quality, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(img);
out.close();
</cfscript>
</cfif>
<!--- move file to its final destination --->
<cffile action="MOVE" source="#tempOutputFile#" destination="#arguments.outputFile#">
<cfreturn retVal>
</cffunction>
<cffunction name="flipflop" access="private" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
<cfargument name="objImage" required="yes" type="Any">
<cfargument name="inputFile" required="yes" type="string">
<cfargument name="outputFile" required="yes" type="string">
<cfargument name="direction" required="yes" type="string"><!--- horizontal or vertical --->
<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
<cfset var retVal = StructNew()>
<cfset var loadImage = StructNew()>
<cfset var saveImage = StructNew()>
<cfset var flippedImage = "">
<cfset var rh = getRenderingHints()>
<cfset var img = "">
<cfset retVal.errorCode = 0>
<cfset retVal.errorMessage = "">
<cfif inputFile neq "">
<cfset loadImage = readImage(inputFile, "NO")>
<cfif loadImage.errorCode is 0>
<cfset img = loadImage.img>
<cfelse>
<cfset retVal = throw(loadImage.errorMessage)>
<cfreturn retVal>
</cfif>
<cfelse>
<cfset img = objImage>
</cfif>
<cfif img.getType() eq 0>
<cfset img = convertImageObject(img,img.TYPE_3BYTE_BGR)>
</cfif>
<cfscript>
flippedImage = CreateObject("java", "java.awt.image.BufferedImage");
at = CreateObject("java", "java.awt.geom.AffineTransform");
op = CreateObject("java", "java.awt.image.AffineTransformOp");
flippedImage.init(img.getWidth(), img.getHeight(), img.getType());
if (direction eq "horizontal") {
at = at.getScaleInstance(-1, 1);
at.translate(-img.getWidth(), 0);
} else {
at = at.getScaleInstance(1,-1);
at.translate(0, -img.getHeight());
}
op.init(at, rh);
op.filter(img, flippedImage);
if (outputFile eq "")
{
retVal.img = flippedImage;
return retVal;
} else {
saveImage = writeImage(outputFile, flippedImage, jpegCompression);
if (saveImage.errorCode gt 0)
{
return saveImage;
} else {
return retVal;
}
}
</cfscript>
</cffunction>
<cffunction name="filterFastBlur" access="public" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
<cfargument name="objImage" required="yes" type="Any">
<cfargument name="inputFile" required="yes" type="string">
<cfargument name="outputFile" required="yes" type="string">
<cfargument name="blurAmount" required="yes" type="numeric">
<cfargument name="iterations" required="yes" type="numeric">
<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
<cfset var retVal = StructNew()>
<cfset var loadImage = StructNew()>
<cfset var saveImage = StructNew()>
<cfset var srcImage = "">
<cfset var destImage = "">
<cfset var rh = getRenderingHints()>
<cfset retVal.errorCode = 0>
<cfset retVal.errorMessage = "">
<cfif NOT variables.javanulls>
<cfset throw("Sorry, but the blur filter is not supported on this platform.")>
</cfif>
<cfif inputFile neq "">
<cfset loadImage = readImage(inputFile, "NO")>
<cfif loadImage.errorCode is 0>
<cfset srcImage = loadImage.img>
<cfelse>
<cfset retVal = throw(loadImage.errorMessage)>
<cfreturn retVal>
</cfif>
<cfelse>
<cfset srcImage = objImage>
</cfif>
<cfif srcImage.getType() eq 0>
<cfset srcImage = convertImageObject(srcImage,srcImage.TYPE_3BYTE_BGR)>
</cfif>
<cfscript>
// initialize the blur filter
variables.blurFilter.init(arguments.blurAmount);
// move the source image into the destination image
// so we can repeatedly blur it.
destImage = srcImage;
for (i=1; i lte iterations; i=i+1)
{
// do the blur i times
destImage = variables.blurFilter.filter(destImage);
}
if (outputFile eq "")
{
// return the image object
retVal.img = destImage;
return retVal;
} else {
// write the image object to the specified file.
saveImage = writeImage(outputFile, destImage, jpegCompression);
if (saveImage.errorCode gt 0)
{
return saveImage;
} else {
return retVal;
}
}
</cfscript>
</cffunction>
<cffunction name="filterSharpen" access="public" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
<cfargument name="objImage" required="yes" type="Any">
<cfargument name="inputFile" required="yes" type="string">
<cfargument name="outputFile" required="yes" type="string">
<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
<cfset var retVal = StructNew()>
<cfset var loadImage = StructNew()>
<cfset var saveImage = StructNew()>
<cfset var srcImage = "">
<cfset var destImage = "">
<cfset var rh = getRenderingHints()>
<cfset retVal.errorCode = 0>
<cfset retVal.errorMessage = "">
<cfif NOT variables.javanulls>
<cfset throw("Sorry, but the blur filter is not supported on this platform.")>
</cfif>
<cfif inputFile neq "">
<cfset loadImage = readImage(inputFile, "NO")>
<cfif loadImage.errorCode is 0>
<cfset srcImage = loadImage.img>
<cfelse>
<cfset retVal = throw(loadImage.errorMessage)>
<cfreturn retVal>
</cfif>
<cfelse>
<cfset srcImage = objImage>
</cfif>
<cfif srcImage.getType() eq 0>
<cfset srcImage = convertImageObject(srcImage,srcImage.TYPE_3BYTE_BGR)>
</cfif>
<cfscript>
// initialize the sharpen filter
variables.sharpenFilter.init();
destImage = variables.sharpenFilter.filter(srcImage);
if (outputFile eq "")
{
// return the image object
retVal.img = destImage;
return retVal;
} else {
// write the image object to the specified file.
saveImage = writeImage(outputFile, destImage, jpegCompression);
if (saveImage.errorCode gt 0)
{
return saveImage;
} else {
return retVal;
}
}
</cfscript>
</cffunction>
<cffunction name="filterPosterize" access="public" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
<cfargument name="objImage" required="yes" type="Any">
<cfargument name="inputFile" required="yes" type="string">
<cfargument name="outputFile" required="yes" type="string">
<cfargument name="amount" required="yes" type="string">
<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
<cfset var retVal = StructNew()>
<cfset var loadImage = StructNew()>
<cfset var saveImage = StructNew()>
<cfset var srcImage = "">
<cfset var destImage = "">
<cfset var rh = getRenderingHints()>
<cfset retVal.errorCode = 0>
<cfset retVal.errorMessage = "">
<cfif NOT variables.javanulls>
<cfset throw("Sorry, but the blur filter is not supported on this platform.")>
</cfif>
<cfif inputFile neq "">
<cfset loadImage = readImage(inputFile, "NO")>
<cfif loadImage.errorCode is 0>
<cfset srcImage = loadImage.img>
<cfelse>
<cfset retVal = throw(loadImage.errorMessage)>
<cfreturn retVal>
</cfif>
<cfelse>
<cfset srcImage = objImage>
</cfif>
<cfif srcImage.getType() eq 0>
<cfset srcImage = convertImageObject(srcImage,srcImage.TYPE_3BYTE_BGR)>
</cfif>
<cfif srcImage.getType() neq 5>
<cfset throw("ImageCFC cannot posterize this image type (#srcImage.getType()#)")>
</cfif>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -