如何从InputStream创建图像,调整大小并保存?

时间:2014-06-27 12:53:01

标签: java image file resize inputstream

我有这个代码,我得到一个InputStream并创建一个图像:

Part file;
// more code
try {
        InputStream is = file.getInputStream();

        File f = new File("C:\\ImagenesAlmacen\\QR\\olaKeAse.jpg");

        OutputStream os = new FileOutputStream(f);
        byte[] buf = new byte[1024];
        int len;

        while ((len = is.read(buf)) > 0) {
            os.write(buf, 0, len);
        }

        os.close();
        is.close();

    } catch (IOException e) {
        System.out.println("Error");
    }

问题是我必须在创建之前调整该图像的大小,如果是InputStream

那么如何调整我从InputStream获得的内容,然后创建调整后的图像。我想将图像的最大边设置为180px,并以该比例调整另一边的大小。

示例:

图片= 289px * 206px 已调整大小的图片= 180px * 128px

1 个答案:

答案 0 :(得分:5)

我这样做了:

try {

        InputStream is = file.getInputStream();
        Image image = ImageIO.read(is);

        BufferedImage bi = this.createResizedCopy(image, 180, 180, true);
        ImageIO.write(bi, "jpg", new File("C:\\ImagenesAlmacen\\QR\\olaKeAse.jpg"));

    } catch (IOException e) {
        System.out.println("Error");
    }

BufferedImage createResizedCopy(Image originalImage, int scaledWidth, int scaledHeight, boolean preserveAlpha) {
    int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
    BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType);
    Graphics2D g = scaledBI.createGraphics();
    if (preserveAlpha) {
        g.setComposite(AlphaComposite.Src);
    }
    g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
    g.dispose();
    return scaledBI;
}

我没有使用其他代码。

希望帮助别人!