Liferay DLFileEntry图像转换未完全转换图像

时间:2015-12-03 10:51:13

标签: java image liferay scale

我正在使用以下代码将图像作为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格式。

enter image description here

图像在文档和媒体中如上所示。您可以看到内容类型已变为image/png

enter image description here

上图显示了我尝试下载此图片并保存时的屏幕截图。当我尝试下载时,它仍然是JPG的原始格式。除了上面的代码,我还应该怎么做,以便将图像完全转换为PNG?

1 个答案:

答案 0 :(得分:1)

您仍然存储旧文件名:dlFileEntry.getName()

我猜测jpegjpg是旧文件名的扩展名,浏览器会从扩展程序中确定其文件过滤器。

所以更好地交换扩展名:

DLAppServiceUtil.updateFileEntry(
    dlFileEntry.getFileEntryId(),
    dlFileEntry.getName().replaceAll("\\..*?$",".png"),
    ...

这将更改为该文件存储的扩展名