0

http リクエストからサーブレットで画像ファイルを読み込んでいます。正方形としてトリミングしてファイルに書き込みたい。次のコードでそれを実現できますが、最初に一時ファイルを使用して元のイメージを書き込んでいます。一時ファイルを使用せずにそれを行うにはどうすればよいですか

                    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();
4

2 に答える 2

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/

于 2013-04-01T18:29:13.380 に答える
0

副作用として新しい BufferedImage を作成せずに BufferedImage をトリミングすることはできません

于 2013-04-01T17:22:54.940 に答える