| 記得Willy的有一篇Coldfusion=J2EE的文章讓我記憶猶新,也為此激動了一番,實際上java的跨平臺帶給我們的驚喜在coldfusion上的應用也是應有盡有,今天向大家介紹一個使用java的basic class來對一個圖片的大小進行重定義,這樣的引用在於,有的時候當用戶在bbs或是留言看板上有上傳圖片上來的話,可以控制顯示畫面,當然你可以用到img的標簽去控制,但這裡主要以介紹應用為主,為大家介紹這個方法。 需要聲明的是,我使用到的java的基礎class文件在coldfusion安裝后,只要你有安裝JVM的情況下就可以使用,而不需要另外對其進行class的文件拷貝和註冊,方便之極,對於img的處理在java中的使用一般是用到java.awt.image.BufferedImage,javax.imageio.ImageIO,java.io.File幾個操作圖片,當然少不了做image縮放處理的java.awt.geom.AffineTransform和用於圖形輸出的java.awt.image.AffineTransformOp。 具體的思路是這樣的:首先使用java的imageio類將圖片信息讀取出來,並獲得圖片的width和height。將其讀入到java.awt.image.bufferedimage,image的縮放處理是把圖片的width和height與縮放係數相整除,將得到的兩個比率參數讀入到image的縮放處理對象中,並用圖形輸出對象保存image的信息就ok了。這樣的方法可以做成CFC來進行傳參調用。 主要用到的方法有: myImage = CreateObject("java", "java.awt.image.BufferedImage"); resizedImage = CreateObject("java", "java.awt.image.BufferedImage"); imageIO = CreateObject("java", "javax.imageio.ImageIO"); inFile = CreateObject("java", "java.io.File"); outFile = CreateObject("java", "java.io.File"); at = CreateObject("java", "java.awt.geom.AffineTransform");//缩放处理的对象 op = CreateObject("java", "java.awt.image.AffineTransformOp");//图像输出对象 處理的流程: inFile.init(#currentDirectory#&"1.jpg"); readimage = imageIO.read(inFile); w=readimage.getwidth();//获取width h=readimage.getheight();//获取height scale = 1;//扩展度 //判断width和height的为0时的处理 if (width gt 0 and height eq 0) { scale = width / w; w = width; h = round(h*scale); } else if (height gt 0 and width eq 0) { scale = height / h; h = height; w = round(w*scale); } else if (height gt 0 and width gt 0) { w = width; h = height; } else { return; } resizedImage.init(javacast("int",w),javacast("int",h),readimage.getType()); w = w / readimage.getWidth();//缩放宽度比率 h = h / readimage.getHeight();//缩放高度比率 op.init(at.getScaleInstance(w,h), op.TYPE_NEAREST_NEIGHBOR); op.filter(readimage, resizedImage);//将修改后的图片信息过滤至readimage对象 readimage = resizedImage; extension = lcase(listLast("1.jpg","."));//获取图片类型,jpg outFile.init(#currentDirectory#&"1.jpg"); imageIO.write(readimage,extension,outFile);//imageIO输出图像信息 [转载于 Charles' Lab 查爾斯實驗室] |