Bonjour,
Je suis en train de développer un programme JEE qui doit générer des thumbnails d'images en utilisant JAI.
Quand plusieurs clients importent des images simultanément, l'application génère une erreur de débordement de pile :
"java.lang.OutOfMemoryError: Java heap space"
Auriez-vous une idée pour améliorer cette méthode de redimensionnement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public byte[] resizeImageAsJPG(String path, int p_MaxWidth) { RenderedOp originalImage = JAI.create("fileload", path); ((OpImage) originalImage.getRendering()).setTileCache(null); int origImageWidth = originalImage.getWidth(); double scale = (double) p_MaxWidth / originalImage.getWidth(); ParameterBlock paramBlock = new ParameterBlock(); paramBlock.addSource(originalImage); // The source image paramBlock.add(scale); paramBlock.add(scale); paramBlock.add(0.0); paramBlock.add(0.0); RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); RenderedOp resizedImage = JAI.create(JAI_SUBSAMPLE_AVERAGE_ACTION, paramBlock, qualityHints); ByteArrayOutputStream encoderOutputStream = new ByteArrayOutputStream(); JAI.create(JAI_ENCODE_ACTION, resizedImage, encoderOutputStream, JAI_ENCODE_FORMAT_JPEG, null); byte[] resizedImageByteArray = encoderOutputStream.toByteArray(); return resizedImageByteArray; }
Partager