天天看點

使用Java等比例縮放圖像本文為原創,如需轉載,請注明作者和出處,謝謝!

    縮放圖像的基本原理是建立一個目标大小的畫布,然後讀取源圖像,并将該圖像繪制這個畫布上。為了使程式通用,源圖像和縮放後的目标圖像應用分别使用InputStream和OutputStream來表示,代碼如下:

    public static void scaleImage(InputStream imgInputStream,

            OutputStream imgOutputStream, int scale)

    {

        try

        {

            Image src = javax.imageio.ImageIO.read(imgInputStream);

            int width = (int) (src.getWidth(null) * scale / 100.0);

            int height = (int) (src.getHeight(null) * scale / 100.0);

            BufferedImage bufferedImage = new BufferedImage(width, height,

                    BufferedImage.TYPE_INT_RGB);

             bufferedImage.getGraphics().drawImage(

                    src.getScaledInstance(width, height, Image.SCALE_SMOOTH),

                    0, 0, null);

            JPEGImageEncoder encoder = JPEGCodec

                    .createJPEGEncoder(imgOutputStream);

            encoder.encode( bufferedImage);

        }

        catch (IOException e)

            e.printStackTrace();

    }

    其中scale參數表示縮放比例,1至100,當然,也可以大于100,那就是放大圖像了。但要注意,放得太大會失真的。

    當然,也可以重構scaleImage方法,使其可以接收圖像檔案名,代碼如下:

    public static void scaleImage(String imgSrc, String imgDist, int scale)

            File file = new File(imgSrc);

            if (!file.exists())

            {

                return;

            }

            InputStream is = new FileInputStream(file);

            OutputStream os = new FileOutputStream(imgDist);

            scaleImage(is, os, scale);

            is.close();

            os.close();

        catch (Exception e)

    下面的代碼按15%縮放

scaleImage("E://pictures//test.jpg", "e://test1.jpg", 15);

繼續閱讀