【问题标题】:The fireworks PNG format, any insight? Any libs?烟花PNG格式,有什么见解吗?任何库?
【发布时间】:2011-05-13 15:30:58
【问题描述】:

最终目标是将烟花 png 文件中的页面导出为单个图像。所以我有几个问题:

  1. 您知道有什么东西——库、应用程序——已经这样做了吗?
  2. 您有关于格式的任何信息吗?我假设他们将信息存储在专门的块中。我只是希望这些块的有效载荷的格式不那么难以弄清楚。

我还没有挖掘任何烟花文件。我没有找到有关格式的信息,所以这是下一步,但我想有人可能知道一点并节省我一些时间:)。

我希望(并且可能并非如此)每个页面都以 PNG 格式存储在单独的 IDAT 块中。但是,由于矢量功能,这不太可能。也许他们将 svg 格式存储在块中?

感谢任何帮助或讨论。我计划在接下来的几天内对此进行深入研究。

编辑:这里有几件事:下面链接的超级用户帖子表明文件是 APNG。烟花文件不是 APNG。 APNG 包含动画块:acTL、fcTL、fdAT。 Fireworks 除了 IDAT 块外,还有 prVW、mkBF、mkTS、mkBS、mkBT 块,但没有 APNG 块。

这里有一篇关于烟花 PNG 的非常可靠的帖子:http://newsgroup.xnview.com/viewtopic.php?f=35&t=20592#p86243

所以我想我需要知道这些块的作用,以及如何解析它们。

【问题讨论】:

  • 可能会有帮助:superuser.com/questions/50044/…
  • 谢谢。我之前看到过,并打算在这个问题中引用它。我不认为这是一种直接的 APNG 格式,因为烟花不知道如何处理正确的 APNG。我的 CS3 副本中甚至都没有显示每一帧...
  • prVW chunk 是 'Thumbnail Preview Chunk' kb2.adobe.com/cps/135/tn_13565.html 其他四个我可以找到 0 个信息。

标签: image-processing png fireworks


【解决方案1】:

我自己对 Adob​​e Fireworks 文件中的私有块类型进行的一些挖掘如下(假设 Python 切片符号):

prVW(“缩略图预览?”)

Data format:
- bytes[0:4]   - Chunk length
- bytes[4:8]   - Chunk type
- bytes[8:10]  - zlib file magic 0x789c
- bytes[10:-8] - zlib data
- bytes[-8:-4] - zlib checksum
- bytes[-4:]   - Chunk checksum

After decompressing, the first 4-bytes are the value "0xcafebeef",
likely another file magic byte value for whatever format the data is
in.


mkBF

Data format:
- bytes[0:4]   - Chunk length
- bytes[4:8]   - Chunk type
- bytes[8:12]  - 0xfadecafe (file magic?)
- bytes[12:16] - big-endian length value?
- bytes[16:80] - 64-byte NULL-padded data field
- bytes[80:84] - Chunk checksum


mkBS

Data format:
- bytes[0:4]   - Chunk length
- bytes[4:8]   - Chunk type
- bytes[8:10]  - zlib file magic 0x789c
- bytes[10:-8] - zlib data
- bytes[-8:-4] - zlib checksum
- bytes[-4:]   - Chunk checksum


mkBT

Data format:
- bytes[0:4]   - Chunk length
- bytes[4:8]   - Chunk type
- bytes[8:12]  - 0xfacecafe (file magic?)
- bytes[12:16] - Unknown big-endian value.  Increments for
                 each mkBT chunk present, and appears to only
                 consume the lower 24-bits.
- bytes[16:84] - 68-byte NULL-padded data field
- bytes[84:86] - zlib file magic 0x789c
- bytes[86:-8] - zlib data
- bytes[-8:-4] - zlib checksum
- bytes[-4:]   - Chunk checksum

This chunk may contain a split/spanned zlib stream, as the decompressed
data is cut at 64kb per mkBT chunk and does not appear to carry a zlib
checksum value.  Decompressing each zlib stream and then concatenating them
all together does not appear to be wrong.


mkTS

Data format:
- bytes[0:4]   - Chunk length
- bytes[4:8]   - Chunk type
- bytes[8:10]  - zlib file magic 0x789c
- bytes[10:-8] - zlib data
- bytes[-8:-4] - zlib checksum
- bytes[-4:]   - Chunk checksum

【讨论】:

    【解决方案2】:

    有趣的问题。

    如果您正在尝试编写一个获取 Fireworks PNG(APNG) 并保存页面的实用程序,请不要有多大帮助,但这里是:

    您可以使用 Fireworks 中的“导出”菜单:文件 > 导出 > 页面到文件

    您也可以使用另存为选项并选择Photoshop PSD。 此选项将页面保留为 Photoshop 图层面板中的文件夹/组, 但它确实光栅化了矢量形状。不过,如果您想使用 parse a PSD 而不是 APNG(访问图像、页面),它可能会很方便。

    我已经编写了一个小脚本(主要使用docs),它将您当前打开的 Fireworks PNG 的 PSD 保存到您选择的文件夹中:

    var doc = fw.getDocumentDOM();
    var loc = fw.browseForFolderURL("select a folder to save pages");
    
    var prevWarn = fw.getPref("PsdExport_Warn100"); // bool 
    fw.setPref("PsdExport_Warn100", false);    // don't warn. 
    
    var kObjToLayer = 1; 
    var kFlatten = 2; 
    var prevLayers = fw.getPref("PsdExport_Layers"); 
    fw.setPref("PsdExport_Layers", kObjToLayer);    // flatten layers or not. 
    
    var kEffectEditable = 1; 
    var kEffectRender = 2; 
    var prevEffects = fw.getPref("PsdExport_Effects"); 
    fw.setPref("PsdExport_Effects", kEffectEditable); 
    
    var kTextEditable = 1; 
    var kTextRender = 2; 
    var prevText = fw.getPref("PsdExport_Text"); 
    fw.setPref("PsdExport_Text", kTextRender); 
    
    if(loc) fw.exportPSD(doc, loc+"/yourPages.psd"); 
    
    // Put the prefs back. 
    fw.setPref("PsdExport_Warn100", prevWarn); 
    fw.setPref("PsdExport_Layers", prevLayers); 
    fw.setPref("PsdExport_Effects", prevEffects); 
    fw.setPref("PsdExport_Text", prevText);
    

    如果您将其保存为 .jsf 文件,并在 Fireworks 中打开了一个文档,您应该只需双击 .jsf 文件即可。

    另外,注意到有一个Export PSD extension 可用,它比我这里的小脚本有更多的选项。

    如果您需要矢量图形,可以使用文件导出> FXG 和图像 并选择格式下方的所有页面。 FXG为xml格式,specs可用。

    HTH

    【讨论】:

    • 我宁愿不必依赖任何 adobe 产品或任何 GUI 步骤。我想真正自动化这些页面导出的生成。
    • 另外,很遗憾,Fireworks 文件不是 APNG。它们不包含任何 APNG 块;它们包含专有的“私有”块:prVW、mkBF、mkTS、mkBS、mkBT。如果他们将每个页面存储在不同的 APNG 框架或其他东西中会很好,但不幸的是,情况并非如此。
    • @BenO 我想我明白了,你有兴趣构建一个可以在其他机器(甚至是服务器)上工作的工具,并且不管任何 Adob​​e 工具都可以完成转换。不幸的是,这就是我所能提供的全部帮助。希望您能在 Fireworks 论坛或产品博客上获得一些帮助。
    • 事实证明,烟花有一个 RPC API,它看起来是最省力的解决方案。它(CS5)甚至有一个名为 fw.exportPages() 的函数,可以将所有页面导出为 PNG。所以我只需要一个运行的烟花实例,我可以编写一个小前端来将烟花 PNG 转换为普通的 PNG。 Fireworks XML RPC:help.adobe.com/en_US/fireworks/cs/extend/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2023-03-22
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多