⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image.cfc

📁 开源的HTML文本编辑器
💻 CFC
📖 第 1 页 / 共 4 页
字号:
			<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 + -