首页 > 解决方案 > 无法使用 Java/Groovy 中的 zipentry 在 KMZ 中正确显示图像

问题描述

基本上,我一直试图让图像显示在 KMZ 文件的属性下。我当前的设置创建了一个具有以下结构的解压缩目录:

主文件夹/ doc.kml 文件/ img1.jpeg img2.jpeg img3.jpeg ...然后我使用以下代码将所有内容压缩到KMZ中

    void zipFile(File directory, File file, ZipOutputStream zip) {
        if (!file.isDirectory()){
            def input = new FileInputStream(file)
            String name = file.getPath()
            name = name.replace(kmzDir.path+"\\", "")
            zip.putNextEntry(new ZipEntry(name))
            IOUtils.copy(input, zip)
            zip.closeEntry()
        }

    }

    void zipKMZDirectory() {

        BufferedOutputStream fileWriter = new BufferedOutputStream(new FileOutputStream(new File(kmzDir.path + ".kmz")))
        ZipOutputStream zip = new ZipOutputStream(fileWriter)
        resourceDir.listFiles().each { file ->
            zipFile(resourceDir, file, zip)
        }
        kmzDir.listFiles().each { file ->
            zipFile(kmzDir, file, zip)
        }
        zip.close()
        fileWriter.close()
    }

在 KMZ 之外打开 doc.kml 文件效果很好(在 google earth 中加载图像),但打开 KMZ 文件并尝试查看任何图像只会显示一个蓝色问号来代替图像。

我尝试在尝试加载图像时查看网络数据(右键单击 -> 检查 -> 网络),它说它成功地在主文件夹/文件/image.jpeg 下找到了图像。此外,我尝试删除存储在 kmz 存档中的所有图像,然后通过 7zip 手动将所有图像添加回 zip 中,这确实显示了图像。这告诉我在 zip 压缩阶段(?)出现了问题,不允许谷歌打开图像(尽管我只是尝试自己查看图像并且它们没有损坏或任何东西)。

编辑:我在桌面上使用 Google 地球专业版

标签: javagroovykmlgoogle-earthkmz

解决方案


我不确定到底是什么问题,我假设它是在我制作损坏某些东西的 zip 文件的方式上。我采取了不同的方法来修复它,而不是制作目录然后压缩它,我基本上只是在制作文件时压缩它们(如下:https ://stackoverflow.com/a/12762850/5304918作为大纲)


推荐阅读