//俺写的,只能在windows下使用,在linux下执行到Toolkit tk=Toolkit.getDefaultToolkit();会出错
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;
import java.awt.*;
import java.net.*;
import java.applet.*;
import java.io.*;
import java.util.*;public class cc 
{
//----------------------------------------
//生成缩略图,目前只支持jpg格式
public boolean GetSmallImage(File orifile,File outfile,int newwidth,int newheight)
{
try
{
BufferedImage image;
Image img=null;
Toolkit tk=Toolkit.getDefaultToolkit();
Applet app=new Applet();
MediaTracker mt = new MediaTracker(app);
//获取原始图
img=tk.getImage(orifile);
mt.addImage(img, 0);
mt.waitForID(0);
//绘制缩略图
BufferedImage buffImg = new BufferedImage(newwidth,newheight,BufferedImage.TYPE_INT_RGB);
Graphics g = buffImg.createGraphics();
g.setColor(Color.white);
g.fillRect(0,0,newwidth,newheight);
g.drawImage(img,0,0,newwidth,newheight,null);
g.dispose();
//输出缩略图
java.io.OutputStream tempout=null;
java.io.File tempfile=new java.io.File(outfile);
tempout= new FileOutputStream(tempfile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);
encoder.encode(buffImg);
//
if(tempout!=null)
tempout.close();
}
catch(Exception e)
{
return false;
}

return true;

}//end of GetSmallImage


public static void main(String args[]) 
{
cc abb=new cc();
try
{
File aa=new File("c:\\bb_big.jpg");
File bb=new File("c:\\bb.jpg");
abb.GetSmallImage(aa,bb,200,150);
}
catch(Exception e)
{

} }//end of main
}//End of All

解决方案 »

  1.   

    经过本人再接再厉,终于找到在linux下也能用的办法。<%@ page import="javax.imageio.ImageIO" %>
    <%@ page import="javax.imageio.IIOException" %>
    <%@ page import="java.awt.image.BufferedImage" %>;
    <%@ page import="java.awt.Image" %>
    <%@ page import="java.io.File" %>
    <%@ page import="java.awt.image.AffineTransformOp" %>
    <%@ page import="java.awt.geom.AffineTransform" %><%
    try 
    {   //如果是windows,File fi=new File("c:\\abc\\aaa.jpg");
    File fi = new File("/home/images/aaa.jpg"); //大图文件
    File fo = new File("/home/images/aab.jpg"); //将要转换出的小图文件
    int nw = 100;//新的长度
    AffineTransform transform = new AffineTransform();
    BufferedImage bis = ImageIO.read(fi);
    //
    int w = bis.getWidth();//原来的长度
    int h = bis.getHeight();//原来的高度
    double scale = (double)w/h;
    int nh = (nw*h)/w ;//新的高度
    //
    double sx = (double)nw/w;//宽度比例
    double sy = (double)nh/h;//高度比例
    transform.setToScale(sx,sy);
    System.out.println(w + " " +h);
    //
    AffineTransformOp ato = new AffineTransformOp(transform,null);
    BufferedImage bid = new BufferedImage(nw,nh,BufferedImage.TYPE_3BYTE_BGR);
    ato.filter(bis,bid);
    ImageIO.write(bid,"jpeg",fo);

    catch(Exception e) 
    {
    out.println(e);
    }

    %>