如何使用 javapackager ant 任务设置 DMG window 和背景大小

How to set DMG window and background size using javapackager ant task

经过长时间的努力,我设法在 MacOSX (Yosemite) 上生成(使用 Ant)一个 DMG(部署到 *.app 文件夹的模块化 JavaFX 应用程序),即使使用应用程序的自定义图标和DMG 卷(都作为 *.icns 文件存储在构建的 package/macosx 文件夹中)。拖放工作,它安装应用程序,应用程序启动所以一切都很好。嗯,差不多。

我也想为 DMG 制作自定义背景。它与 package/macosx 文件夹中的图标一起作为 App-background.png 文件(其中 App 部分是我的应用程序的名称,与图标一样)。而javapackager其实是把背景捡起来的,可惜打开DMG后背景好像放在了windows的左上角,window本身就是背景的两倍大, 所以 window 的背景有 3/4 只是白色。

我尝试了不同的 PNG 尺寸,但无济于事。 DMG window 总是比图片大很多。

有什么方法可以让 javapackager(也就是我实际使用的 fx:deploy)通过适当的设置生成 DMG,从而使 DMG window 适合背景大小?

编辑:看起来 DMG window 实际上具有 PNG(原始背景文件)的大小,但由于某种原因图像显示为背景,"slightly" 缩小了。

经过长时间的调查,我找到了造成这种不当行为的(不是很明显也不是直接的)原因。幸运的是我也找到了解决方案。

显然,Finder 在显示 DMG 文件时处理 PNG 存在一些问题。这一切都归结为包含 3 个字段(分别为 4b、4b 和 1b 长)的块 pHYs。它是 x 轴上的每单位像素,y 轴上的每单位像素和 0 或 1 单位(0 无单位,1 米单位)。使用这些值(通过十六进制编辑器)确实以某种方式改变了缩放行为(和 window 大小),但我无法找出正确的值。最终 我完全摆脱了这个块(从 GIMP 导出为 PNG 而不保存分辨率)并且解决了这个问题。

因此,对于遇到此问题的任何人:只要确保 PNG 文件中没有 pHYs

编辑:使用 ImageMagick 可以轻松做到这一点:

$ convert image.png -define png:exclude-chunk=pHYs image.png

这会从 image.png 文件中删除 pHYs 块。