2012-08-27 1 views
2

Я использую AsyncScalr в сервлете, чтобы уменьшить масштаб больших изображений (~ 10-15 мегабайт), процесс фактического изменения размера занимает около 40 мс, что мало. Переполнение происходит от чтения изображения из локального хранилища в качестве BufferedImage. поэтому время в основном похоже:Масштабирование больших изображений с использованием Java и AsyncScalr

прочитайте файл изображения: 1630ms !! Изменение размера изображения: 41 мс Запись изображения: 40 мс

Ниже приведен код, который я использую, есть ли более оптимальный способ сделать это?

 final FileImageInputStream fileImageInputStream = new FileImageInputStream(file); 
     BufferedImage bufferedImage = ImageIO.read(fileImageInputStream); 

     // resize file 
     Future<BufferedImage> result = AsyncScalr.resize(bufferedImage, Method.SPEED, width, OP_ANTIALIAS, OP_BRIGHTER); 
     try { 
      bufferedImage = result.get(); 
     } 
     catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 

     // Write the image 
     ImageIO.write(bufferedImage, imageOutput, outputStream); 
+1

Быстрый совет, если вы обрабатываете это в сервлете, я полагаю, вы обрабатываете загрузки изображений? Если это так, я сделал что-то подобное на imgscalr.com и вытащил данные двоичного изображения непосредственно из тела запроса и потоковым потоком в процесс декодирования ImageIO через Stream. Это помогает избежать записи файла, а затем его считывания и декодирования. Еще один совет, если это на EC2, и вы используете том EBS, вы можете получить более высокую пропускную способность, используя летучие локальные диски на машине. –

ответ

0

ответить на мой вопрос, используя java.awt.Toolkit для загрузки изображений решила проблему.

+0

Что теперь похоже на тайминги с помощью Toolkit для загрузки изображений вместо ImageIO? –

+0

весь процесс занимает около 600 мс. Я взял также thumbnailator (http://code.google.com/p/thumbnailator) вместо imgscalr, который более эффективен и генерирует лучшие изображения. – nicmon