使用 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 裁剪上传的图像的主要内容,如果未能解决你的问题,请参考以下文章