Масштабировать изображение, которое хранится как байт [] в Java - PullRequest
6 голосов
/ 04 августа 2009

Я загружаю файл с формой распорок. У меня есть изображение в байтах [], и я бы хотел его масштабировать.

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");
        }
    }

Если вы исчерпали пространство кучи Java в tomcat, как я, увеличьте пространство кучи, используемое tomcat. Если вы используете плагин tomcat для Eclipse, должно применяться следующее:

В Eclipse выберите «Окно»> Настройки> Tomcat> Настройки JVM

Добавьте следующее в JVM Раздел параметров

-Xms256m -Xmx512m

Ответы [ 2 ]

20 голосов
/ 04 августа 2009

Зависит от формата данных.

Однако, если вы используете что-то вроде 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");
    }
}
2 голосов
/ 04 августа 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...