Hallo,
ich habe eine Methode, bei dem ich mein Bild ausgeben will und refreshen bzw. mit einem Wasserzeichen versehen will.
Zuvor lade ich ein Bild hoch, das als Wasserzeichen verwendet werden soll (Methode: handleFileUploadPicture)
In der GUI habe ich verschiedene Einstellmöglichkeiten, und möchte nachdem ich etwas geändert habe, erneut das Bild refresehen und drücke hierzu einen Button "refresh", was die Methode doGeneratePreview() ausführt.
JSF Bean - ich nutze Primefaces für den Upload
Refreshen des Bildes (Wasserzeichen erstellen)
Service - Klasse (=Wasserzeichen erstellen):
Beim ersten mal generieren des Wasserzeichen klappt das auch.
Beim zweiten Mal bekomme ich diesen Fehler (klicken des Buttons bzw. Ausführung der Methode: doGeneratePreview())
Was mache ich falsch? Was muss geändert werden? Warum ändert sich vermutlich der Inputstream von:
picWatermarkSettingType.getTempUploadFileHelper().getInputStream()
Vielen Dank für jede Hilfe
ich habe eine Methode, bei dem ich mein Bild ausgeben will und refreshen bzw. mit einem Wasserzeichen versehen will.
Zuvor lade ich ein Bild hoch, das als Wasserzeichen verwendet werden soll (Methode: handleFileUploadPicture)
In der GUI habe ich verschiedene Einstellmöglichkeiten, und möchte nachdem ich etwas geändert habe, erneut das Bild refresehen und drücke hierzu einen Button "refresh", was die Methode doGeneratePreview() ausführt.
JSF Bean - ich nutze Primefaces für den Upload
Java:
/**
* Hochladen
*/
public void handleFileUploadPicture(FileUploadEvent event) {
try {
UploadedFile primefacesUploadedFile = event.getFile();
UploadFileHelper uploadFileHelper = new UploadFileHelper();
uploadFileHelper.setInputStream(new BufferedInputStream(primefacesUploadedFile.getInputStream()));
picWatermarkSettingType.setTempUploadFileHelper(uploadFileHelper);
} catch (Exception e) {
LOGGER.error(ExceptionUtils.getFullStackTrace(e));
}
}
Refreshen des Bildes (Wasserzeichen erstellen)
Java:
/**
* Watermark generieren
*/
public void doGeneratePreview() {
try {
InputStream streamFile = picWatermarkProcessService
.createWatermarkPreview(picWatermarkSettingType);
} catch (Exception e) {
LOGGER.error(ExceptionUtils.getFullStackTrace(e));
}
}
Service - Klasse (=Wasserzeichen erstellen):
Java:
public ByteArrayInputStream createWatermarkPreview(PicWatermarkSettingType picWatermarkSettingType)
throws IOException {
// Sample Picture laden
BufferedImage originalImage = generateSamplePicture();
// Position laden von Enum
Positions positions = // holt aus dem Enum den Wert
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
///////////////////////
// Vorschau für Bild
///////////////////////
InputStream inputStream = picWatermarkSettingType.getTempUploadFileHelper().getInputStream();
inputStream.mark(0);
BufferedImage watermarkReduced = Thumbnails.of(ImageIO.read(inputStream))
.size(400, 300)
.rotate(picWatermarkSettingType.getRotation())
.asBufferedImage();
BufferedImage watermark = Thumbnails.of(watermarkReduced)
.scale(picWatermarkSettingType.getScale() / 100)
.asBufferedImage();
// Generiert die Vorschau
Thumbnails.of(originalImage).scale(1)
.watermark(positions, watermark, (float) picWatermarkSettingType.getOpacity() / 100)
.outputFormat("jpg")
.outputQuality(1).toOutputStream(outputStream);
return new ByteArrayInputStream(outputStream.toByteArray());
}
/**
* Generiert ein Sample Picture
*
* @return
*/
private BufferedImage generateSamplePicture() {
BufferedImage buffer;
buffer = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffer.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, buffer.getWidth(), buffer.getHeight());
g.dispose();
return buffer;
}
Beim ersten mal generieren des Wasserzeichen klappt das auch.
Beim zweiten Mal bekomme ich diesen Fehler (klicken des Buttons bzw. Ausführung der Methode: doGeneratePreview())
diesen Fehler:
PicWatermarkProcessService for method public java.io.ByteArrayInputStream de.dpunkt.myaktion.gallery.process.PicWatermarkProcessService.createWatermarkPreview(de.dpunkt.myaktion.gallery.model.PicWatermarkSettingType) throws java.io.IOException: javax.ejb.EJBException: java.lang.NullPointerException: Image cannot be null.
Was mache ich falsch? Was muss geändert werden? Warum ändert sich vermutlich der Inputstream von:
picWatermarkSettingType.getTempUploadFileHelper().getInputStream()
Vielen Dank für jede Hilfe