9

strutsフォームでファイルをアップロードします。画像をバイト[]として持っており、スケーリングしたいと思います。

FormFile file = (FormFile) dynaform.get("file");
byte[] fileData = file.getFileData(); 
fileData = scale(fileData,200,200);

public byte[] scale(byte[] fileData, int width, int height) {
// TODO 
}

これを行う簡単な関数を知っている人はいますか?

public byte[] scale(byte[] fileData, int width, int height) {
        ByteArrayInputStream in = new ByteArrayInputStream(fileData);
        try {
            BufferedImage img = ImageIO.read(in);
            if(height == 0) {
                height = (width * img.getHeight())/ img.getWidth(); 
            }
            if(width == 0) {
                width = (height * img.getWidth())/ img.getHeight();
            }
            Image scaledImage = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage imageBuff = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            imageBuff.getGraphics().drawImage(scaledImage, 0, 0, new Color(0,0,0), null);

            ByteArrayOutputStream buffer = new ByteArrayOutputStream();

            ImageIO.write(imageBuff, "jpg", buffer);

            return buffer.toByteArray();
        } catch (IOException e) {
            throw new ApplicationException("IOException in scale");
        }
    }

私のように tomcat で Java ヒープ領域が不足した場合は、Tomcat が使用するヒープ領域を増やしてください。Eclipse 用の tomcat プラグインを使用する場合は、次が適用されます。

Eclipse で、[ウィンドウ] > [設定] > [Tomcat] > [JVM 設定] を選択します。

JVM パラメータ セクションに以下を追加します。

-Xms256m -Xmx512m

4

2 に答える 2

25

データ形式に依存します。

ただし、JPEG、GIF、PNG、または BMP などを使用している場合は、ImageIOクラスを使用できます。

何かのようなもの:

public byte[] scale(byte[] fileData, int width, int height) {
    ByteArrayInputStream in = new ByteArrayInputStream(fileData);
    try {
        BufferedImage img = ImageIO.read(in);
        if(height == 0) {
            height = (width * img.getHeight())/ img.getWidth(); 
        }
        if(width == 0) {
            width = (height * img.getWidth())/ img.getHeight();
        }
        Image scaledImage = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        BufferedImage imageBuff = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        imageBuff.getGraphics().drawImage(scaledImage, 0, 0, new Color(0,0,0), null);

        ByteArrayOutputStream buffer = new ByteArrayOutputStream();

        ImageIO.write(imageBuff, "jpg", buffer);

        return buffer.toByteArray();
    } catch (IOException e) {
        throw new ApplicationException("IOException in scale");
    }
}
于 2009-08-04T16:10:36.333 に答える
2

これを参照してください:

Java 2D - byte[] を BufferedImage に変換する方法

次に、これを参照してください。

Javaを使用して画像のサイズを変更するにはどうすればよいですか?

于 2009-08-04T16:07:09.850 に答える