Skip to content

Commit 7fd44a0

Browse files
vins01-4scienceMicheleboychuk
authored andcommitted
Merged in task/dspace-cris-2025_02_x/DSC-2830 (pull request DSpace#5752)
DSC-2830 Approved-by: Mykhaylo Boychuk
2 parents 5b2fd36 + 8244cba commit 7fd44a0

4 files changed

Lines changed: 57 additions & 50 deletions

File tree

dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickThumbnailFilter.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.regex.PatternSyntaxException;
1616

1717
import org.apache.pdfbox.Loader;
18+
import org.apache.pdfbox.pdmodel.PDDocument;
1819
import org.apache.pdfbox.pdmodel.PDPage;
1920
import org.apache.pdfbox.pdmodel.common.PDRectangle;
2021
import org.dspace.content.Bitstream;
@@ -85,23 +86,20 @@ public String getDescription() {
8586

8687
public File inputStreamToTempFile(InputStream source, String prefix, String suffix) throws IOException {
8788
File f = File.createTempFile(prefix, suffix);
88-
f.deleteOnExit();
89-
FileOutputStream fos = new FileOutputStream(f);
90-
91-
byte[] buffer = new byte[1024];
92-
int len = source.read(buffer);
93-
while (len != -1) {
94-
fos.write(buffer, 0, len);
95-
len = source.read(buffer);
89+
try (FileOutputStream fos = new FileOutputStream(f)) {
90+
byte[] buffer = new byte[8192];
91+
int len = source.read(buffer);
92+
while (len != -1) {
93+
fos.write(buffer, 0, len);
94+
len = source.read(buffer);
95+
}
9696
}
97-
fos.close();
9897
return f;
9998
}
10099

101100
public File getThumbnailFile(File f, boolean verbose)
102101
throws IOException, InterruptedException, IM4JavaException {
103102
File f2 = new File(f.getParentFile(), f.getName() + ".jpg");
104-
f2.deleteOnExit();
105103
ConvertCmd cmd = new ConvertCmd();
106104
IMOperation op = new IMOperation();
107105
op.autoOrient();
@@ -123,11 +121,7 @@ public File getThumbnailFile(File f, boolean verbose)
123121
*/
124122
public File getImageFile(File f, boolean verbose)
125123
throws IOException, InterruptedException, IM4JavaException {
126-
// Writing an intermediate file to disk is inefficient, but since we're
127-
// doing it anyway, we should use a lossless format. IM's internal MIFF
128-
// is lossless like PNG and TIFF, but much faster.
129124
File f2 = new File(f.getParentFile(), f.getName() + ".miff");
130-
f2.deleteOnExit();
131125
ConvertCmd cmd = new ConvertCmd();
132126
IMOperation op = new IMOperation();
133127

@@ -154,9 +148,15 @@ public File getImageFile(File f, boolean verbose)
154148
// same size as the MediaBox if it doesn't exist. Also note that we
155149
// only need to check the first page, since that's what we use for
156150
// generating the thumbnail (PDPage uses a zero-based index).
157-
PDPage pdfPage = Loader.loadPDF(f).getPage(0);
158-
PDRectangle pdfPageMediaBox = pdfPage.getMediaBox();
159-
PDRectangle pdfPageCropBox = pdfPage.getCropBox();
151+
PDRectangle pdfPageMediaBox;
152+
PDRectangle pdfPageCropBox;
153+
try (
154+
PDDocument pdfDoc = Loader.loadPDF(f)
155+
) {
156+
PDPage pdfPage = pdfDoc.getPage(0);
157+
pdfPageMediaBox = pdfPage.getMediaBox();
158+
pdfPageCropBox = pdfPage.getCropBox();
159+
}
160160

161161
// This option must come *before* we open the input file.
162162
if (pdfPageCropBox != pdfPageMediaBox) {

dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickVideoThumbnailFilter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public InputStream getDestinationStream(Item currentItem, InputStream source, bo
5959
public File getThumbnailFile(File f, boolean verbose)
6060
throws IOException, InterruptedException, IM4JavaException {
6161
File f2 = new File(f.getParentFile(), f.getName() + ".jpg");
62-
f2.deleteOnExit();
6362
ConvertCmd cmd = new ConvertCmd();
6463
IMOperation op = new IMOperation();
6564
op.autoOrient();

dspace-api/src/main/java/org/dspace/app/mediafilter/JPEGFilter.java

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -230,30 +230,37 @@ protected InputStream getThumb(
230230
) throws Exception {
231231

232232
File tempFile = File.createTempFile("temp", ".tmp");
233-
tempFile.deleteOnExit();
234233

235234
// Write to temp file
236235
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
237-
byte[] buffer = new byte[4096];
236+
byte[] buffer = new byte[8192];
238237
int len;
239238
while ((len = source.read(buffer)) != -1) {
240239
fos.write(buffer, 0, len);
241240
}
242241
}
243242

244-
int rotation = 0;
245-
try (FileInputStream fis = new FileInputStream(tempFile)) {
246-
rotation = getImageRotationUsingImageReader(fis);
247-
}
243+
try {
244+
int rotation;
245+
try (FileInputStream fis = new FileInputStream(tempFile)) {
246+
rotation = getImageRotationUsingImageReader(fis);
247+
}
248248

249-
try (FileInputStream fis = new FileInputStream(tempFile)) {
250-
// read in bitstream's image
251-
BufferedImage buf = ImageIO.read(fis);
249+
try (FileInputStream fis = new FileInputStream(tempFile)) {
250+
BufferedImage buf = ImageIO.read(fis);
251+
if (buf == null) {
252+
throw new IOException("No image reader found for bitstream");
253+
}
252254

253-
return getThumbDim(
254-
currentItem, buf, verbose, xmax, ymax, blurring, hqscaling, brandHeight, brandFontPoint, rotation,
255-
brandFont
256-
);
255+
return getThumbDim(
256+
currentItem, buf, verbose, xmax, ymax, blurring, hqscaling, brandHeight, brandFontPoint, rotation,
257+
brandFont
258+
);
259+
}
260+
} finally {
261+
if (tempFile != null && tempFile.exists()) {
262+
tempFile.delete();
263+
}
257264
}
258265
}
259266

@@ -327,29 +334,30 @@ public InputStream getThumbDim(Item currentItem, BufferedImage buf, boolean verb
327334

328335
// now render the image into the thumbnail buffer
329336
Graphics2D g2d = thumbnail.createGraphics();
330-
g2d.drawImage(correctedImage, 0, 0, xsize, ysize, null);
337+
try {
338+
g2d.drawImage(correctedImage, 0, 0, xsize, ysize, null);
331339

332-
if (brandHeight != 0) {
333-
ConfigurationService configurationService
334-
= DSpaceServicesFactory.getInstance().getConfigurationService();
335-
Brand brand = new Brand(xsize, brandHeight, new Font(brandFont, Font.PLAIN, brandFontPoint), 5);
336-
BufferedImage brandImage = brand.create(configurationService.getProperty("webui.preview.brand"),
337-
configurationService.getProperty("webui.preview.brand.abbrev"),
338-
currentItem == null ? "" : "hdl:" + currentItem.getHandle());
340+
if (brandHeight != 0) {
341+
ConfigurationService configurationService
342+
= DSpaceServicesFactory.getInstance().getConfigurationService();
343+
Brand brand = new Brand(xsize, brandHeight, new Font(brandFont, Font.PLAIN, brandFontPoint), 5);
344+
BufferedImage brandImage = brand.create(configurationService.getProperty("webui.preview.brand"),
345+
configurationService.getProperty("webui.preview.brand.abbrev"),
346+
currentItem == null ? "" : "hdl:" + currentItem.getHandle());
339347

340-
g2d.drawImage(brandImage, 0, ysize, xsize, 20, null);
341-
}
348+
g2d.drawImage(brandImage, 0, ysize, xsize, 20, null);
349+
}
342350

351+
ByteArrayInputStream bais;
352+
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
353+
ImageIO.write(thumbnail, "jpeg", baos);
354+
bais = new ByteArrayInputStream(baos.toByteArray());
355+
}
343356

344-
ByteArrayInputStream bais;
345-
// now create an input stream for the thumbnail buffer and return it
346-
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
347-
ImageIO.write(thumbnail, "jpeg", baos);
348-
// now get the array
349-
bais = new ByteArrayInputStream(baos.toByteArray());
357+
return bais;
358+
} finally {
359+
g2d.dispose();
350360
}
351-
352-
return bais; // hope this gets written out before its garbage collected!
353361
}
354362

355363

dspace-api/src/main/java/org/dspace/app/mediafilter/PDFBoxThumbnail.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public InputStream getDestinationStream(Item currentItem, InputStream source, bo
7373
BufferedImage buf;
7474

7575
// Render the page image.
76-
try ( PDDocument doc = Loader.loadPDF(new RandomAccessReadBuffer(source)); ) {
76+
try ( PDDocument doc = Loader.loadPDF(new RandomAccessReadBuffer(source)) ) {
7777
PDFRenderer renderer = new PDFRenderer(doc);
7878
buf = renderer.renderImage(0);
7979
} catch (InvalidPasswordException ex) {

0 commit comments

Comments
 (0)