使用 Java 裁剪上传的图像

Posted

技术标签:

【中文标题】使用 Java 裁剪上传的图像【英文标题】:Cropping an uploaded image with Java 【发布时间】:2013-04-01 16:59:42 【问题描述】:

我正在从 http 请求读取 servlet 中的图像文件。我想将其裁剪为正方形并将其写入文件。我可以使用以下代码实现这一点,但我使用临时文件首先写入原始图像。我怎么能不使用临时文件来做到这一点

                    File tempFile = new File(saveFileFrameTemp);
                    fileOut = new FileOutputStream(tempFile);
                    fileOut.write(dataBytes, startPos, (endPos - startPos));
                    fileOut.flush();
                    fileOut.close();

                    BufferedImage fullFrame = ImageIO.read(tempFile);
                    int height = fullFrame.getHeight();
                    int width = fullFrame.getWidth();
                    if (height > width)
                        ImageIO.write( fullFrame.getSubimage(0, (height-width)/2, width, width), "jpg", new File(saveFileFrame));
                    else
                        ImageIO.write( fullFrame.getSubimage((width-height)/2, 0, height, height), "jpg", new File(saveFileFrame));

                    tempFile.delete();

【问题讨论】:

【参考方案1】:

如果不创建新的 BufferedImage 作为副作用,您将无法裁剪 BufferedImage

【讨论】:

没关系,我想要的只是不创建临时文件和额外的磁盘 io【参考方案2】:

我使用 ByteArray 解决了它。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(dataBytes, startPos, (endPos - startPos));

BufferedImage fullFrame = ImageIO.read(new ByteArrayInputStream(baos.toByteArray()));

我在过程中使用了这个链接http://www.mkyong.com/java/how-to-convert-byte-to-bufferedimage-in-java/

【讨论】:

以上是关于使用 Java 裁剪上传的图像的主要内容,如果未能解决你的问题,请参考以下文章

裁剪并加水印以 html 上传的图像

裁剪器在使用 dropzone js 上传之前裁剪多个图像

在 iOS/swift 中上传图像时如何删除裁剪选项

带有裁剪参数的拇指上传

使用 angularjs 中的图像视图、裁剪和上传创建用于图像上传的 md 对话框

如何选择图像的区域进行裁剪?