使用Java裁剪上传的图像

时间:2013-04-01 16:59:43

标签: java crop bufferedimage javax.imageio fileoutputstream

我正在从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();

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我使用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/

进程中使用了这个链接