我正在使用以下代码将图像作为DLFileEntry从JPG转换为PNG格式。
try {
DLFileEntry dlFileEntry = DLFileEntryServiceUtil.getFileEntry(dlFileEntryId);
InputStream inputStream = dlFileEntry.getContentStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
byte[] byteArray = buffer.toByteArray();
ImageBag imageBag = ImageToolUtil.read(byteArray);
RenderedImage renderedImage = imageBag.getRenderedImage();
if (renderedImage == null) {
throw new IOException("Unable to decode image");
}
renderedImage = ImageToolUtil.scale(renderedImage, 2000);
buffer = new ByteArrayOutputStream();
ImageIO.write(renderedImage, "png", buffer);
InputStream fis = new ByteArrayInputStream(buffer.toByteArray());
DLAppServiceUtil.updateFileEntry(
dlFileEntry.getFileEntryId(),
dlFileEntry.getName(),
MediaType.IMAGE_PNG_VALUE,
dlFileEntry.getTitle(),
dlFileEntry.getDescription(),
"",
true,
fis,
buffer.size(),
serviceContext);
} catch (Exception e) {
e.printStackTrace();
}
即使它更新了“文档和媒体”中的图像内容类型和扩展名,当我们尝试下载图像时,它仍然是JPG格式。
图像在文档和媒体中如上所示。您可以看到内容类型已变为image/png
。
上图显示了我尝试下载此图片并保存时的屏幕截图。当我尝试下载时,它仍然是JPG的原始格式。除了上面的代码,我还应该怎么做,以便将图像完全转换为PNG?
答案 0 :(得分:1)
您仍然存储旧文件名:dlFileEntry.getName()
我猜测jpeg
或jpg
是旧文件名的扩展名,浏览器会从扩展程序中确定其文件过滤器。
所以更好地交换扩展名:
DLAppServiceUtil.updateFileEntry(
dlFileEntry.getFileEntryId(),
dlFileEntry.getName().replaceAll("\\..*?$",".png"),
...
这将更改为该文件存储的扩展名