最终目标是将fireworks png文件中的页面导出到单个图像。所以我有几个问题:
我还没有挖过任何烟花文件。我没有找到关于格式的信息,所以这是下一步,但我想有人可能会知道一些并节省我一些时间:)。
我希望(并且可能不是这种情况)是每个页面都以PNG形式存储在单独的IDAT块中。但是,由于矢量功能,不太可能。也许他们将svg格式存储在块中?
感谢任何帮助或讨论。我打算在接下来的几天里深入研究这个问题。
本
编辑:以下是一些内容:下面的链接超级用户帖子表明文件是APNG。烟花文件不是APNG。 APNG包含动画块:acTL,fcTL,fdAT。除了IDAT块之外,Fireworks还有prVW,mkBF,mkTS,mkBS,mkBT块,但没有APNG块。
这里有关于烟花PNG的非常可靠的帖子:http://newsgroup.xnview.com/viewtopic.php?f=35&t=20592#p86243
所以我想我需要知道这些块做了什么,以及如何解析它们。
答案 0 :(得分:1)
有趣的问题。
如果您正在尝试编写一个获取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
答案 1 :(得分:1)
我自己对Adobe 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