Я загружаю файл со строкой. У меня есть изображение как байт [], и я хотел бы его масштабировать.Масштабировать изображение, которое хранится как байт [] в Java
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 Heap пространства в котом как я, увеличить пространство кучи, который используется котом. В случае, если вы используете котом плагин для Eclipse, следующий должен применяться:
В Eclipse выберите Window> Настройки> Tomcat> JVM Settings
Добавьте следующие строки в разделе JVM Параметры
-Xms256m -Xmx512m
__Guessing here__: JPEG не делает прозрачность. Измените 'TYPE_INT_ARGB' на' TYPE_INT_RGB' и 'новый цвет (0,0,0,0)' на 'новый цвет (0,0,0)' –
. Что касается места кучи, вы можете сэкономить некоторое пространство, работая напрямую на входном потоке вместо того, чтобы читать его в массив байтов. Однако для масштабирования изображения вам нужна копия (и его масштабированная версия) в памяти; поэтому вам просто нужно увеличить кучу пространства. Посмотрите на 'java -xmx'. –