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

Posted

技术标签:

【中文标题】如何从 InputStream 创建图像,调整大小并保存?【英文标题】:How to create an image from an InputStream, resize it and save it? 【发布时间】:2014-08-18 14:15:01 【问题描述】:

我有这段代码,我在其中得到一个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 获得的内容,然后创建调整后的图像。我想将图像的最大一侧设置为 180 像素,并按照该比例调整另一侧的大小。

示例:

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

【问题讨论】:

你永远不会刷新OutputStream。至于你问题的另一部分,你大概可以在这里找到答案:***.com/questions/244164 @blgt 好的,请帮助我完成冲洗部分。我尝试了另一个问题所说的。现在我有一个 BufferedImage,如何在“C:\\ImagenesAlmacen\\QR\\olaKeAse.jpg”将其保存为 jpg 图像? 完全按照上面的操作,只需在os.close();之前添加os.flush(); @blgt 关闭意味着刷新。那里没问题。 @Durandal Huh。你说得对;查了一下,flush 在这种情况下实际上是一个空方法,write 自己进行本机调用 【参考方案1】:

我这样做了:

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;

而且我没有使用其他代码。

希望能帮助别人!

【讨论】:

以上是关于如何从 InputStream 创建图像,调整大小并保存?的主要内容,如果未能解决你的问题,请参考以下文章

从InputStream调整位图大小

如何在 iPhone 中以高质量调整图像大小

如何在将图像上传到 Firebase 之前调整其大小?

如何使用 GraphicsMagick 从图像中裁剪/调整背景/边框的大小

如何使用 Sharp 从 S3 调整图像大小?

如何创建可根据不同手机尺寸调整大小的响应式图像?