登录

用户名:

密码:
java Basic Class Use in Coldfusion     
作者:starsky
发部日期:Tue, 01/09/2007
記得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 查爾斯實驗室]

最后更新:Tue, 01/09/2007