public static BufferedImage zoomScale(BufferedImage im, int w, int h, Color bgColor) {
        if (w == -1 || h == -1) {
            return scale(im, w, h);
        }

        // 检查背景颜色
        // bgColor = null == bgColor ? Color.black : bgColor;
        // 获得尺寸
        int oW = im.getWidth();
        int oH = im.getHeight();
        float oR = (float) oW / (float) oH;
        float nR = (float) w / (float) h;

        int nW, nH, x, y;
        /*
         * 缩放
         */
        // 原图太宽，计算当原图与画布同高时，原图的等比宽度
        if (oR > nR) {
            nW = w;
            nH = (int) ((w) / oR);
            x = 0;
            y = (h - nH) / 2;
        }
        // 原图太高
        else if (oR < nR) {
            nH = h;
            nW = (int) ((h) * oR);
            x = (w - nW) / 2;
            y = 0;
        }
        // 比例相同
        else {
            nW = w;
            nH = h;
            x = 0;
            y = 0;
        }

        // 创建图像
        BufferedImage re = new BufferedImage(w, h, im.getType() == 0 ? BufferedImage.TYPE_3BYTE_BGR : im.getType());
        Graphics2D gc = re.createGraphics();
        if (null != bgColor) {
            gc.setColor(bgColor);
            gc.fillRect(0, 0, w, h);
        }

        // 绘制图像
        gc.drawImage(im, x, y, nW, nH, bgColor, null);

        // 释放
        gc.dispose();

        // 返回
        return re;
    }
public static BufferedImage zoomScale(BufferedImage im, int w, int h, Color bgColor) {
        if (w == -1 || h == -1) {
            return scale(im, w, h);
        }

        
        
        
        int oW = im.getWidth();
        int oH = im.getHeight();
        float oR = (float) oW / (float) oH;
        float nR = (float) w / (float) h;

        int nW, nH, x, y;
        
        
        if (oR > nR) {
            nW = w;
            nH = (int) ((w) / oR);
            x = 0;
            y = (h - nH) / 2;
        }
        
        else if (oR < nR) {
            nH = h;
            nW = (int) ((h) * oR);
            x = (w - nW) / 2;
            y = 0;
        }
        
        else {
            nW = w;
            nH = h;
            x = 0;
            y = 0;
        }

        
        BufferedImage re = new BufferedImage(w, h, im.getType() == 0 ? BufferedImage.TYPE_3BYTE_BGR : im.getType());
        Graphics2D gc = re.createGraphics();
        if (null != bgColor) {
            gc.setColor(bgColor);
            gc.fillRect(0, 0, w, h);
        }

        
        gc.drawImage(im, x, y, nW, nH, bgColor, null);

        
        gc.dispose();

        
        return re;
    }
public static BufferedImage zoomScale ( BufferedImage im , int w , int h , Color bgColor ) { if ( w == - 1 || h == - 1 ) { return scale ( im , w , h ) ; } // 检查背景颜色 // bgColor = null == bgColor ? Color.black : bgColor; // 获得尺寸 int oW = im . getWidth ( ) ; int oH = im . getHeight ( ) ; float oR = ( float ) oW / ( float ) oH ; float nR = ( float ) w / ( float ) h ; int nW , nH , x , y ; /*
         * 缩放
         */ // 原图太宽，计算当原图与画布同高时，原图的等比宽度 if ( oR > nR ) { nW = w ; nH = ( int ) ( ( w ) / oR ) ; x = 0 ; y = ( h - nH ) / 2 ; } // 原图太高 else if ( oR < nR ) { nH = h ; nW = ( int ) ( ( h ) * oR ) ; x = ( w - nW ) / 2 ; y = 0 ; } // 比例相同 else { nW = w ; nH = h ; x = 0 ; y = 0 ; } // 创建图像 BufferedImage re = new BufferedImage ( w , h , im . getType ( ) == 0 ? BufferedImage . TYPE_3BYTE_BGR : im . getType ( ) ) ; Graphics2D gc = re . createGraphics ( ) ; if ( null != bgColor ) { gc . setColor ( bgColor ) ; gc . fillRect ( 0 , 0 , w , h ) ; } // 绘制图像 gc . drawImage ( im , x , y , nW , nH , bgColor , null ) ; // 释放 gc . dispose ( ) ; // 返回 return re ; }
自动等比缩放一个图片，多余的部分，用给定背景颜色补上<br />
如果参数中的宽度或高度为<b>-1</b>的话，着按照指定的高度或宽度对原图等比例缩放图片，不添加背景颜色

@param im
图像对象
@param w
宽度
@param h
高度
@param bgColor
背景颜色

@return 被转换后的图像
自动等比缩放一个图片，多余的部分，用给定背景颜色补上<br / > 如果参数中的宽度或高度为<b > - 1< / b > 的话，着按照指定的高度或宽度对原图等比例缩放图片，不添加背景颜色