Photoshop ICO 文件格式插件是一款功能更加强大的ICO格式插件(比ICOFormat.8bi的增效文件),该插件支持从PE文件(DLL、OCX)导入图标,如果想导入EXE文件的图标,可以把EXE文件的后缀改成DLL,然后用PS打开即可导入图标。
该插件 2.0 版本主要新增功能是,支持从 PE 文件(DLL,OCX)导入图标的功能。但是由于 Photoshop 可能本身有限制,所以不能直接支持打开 EXE 文件,因此如果要导入 EXE 文件的图标,经过我的调试,发现 Photoshop 不会做任何反应(PS不会调用插件的入口函数),因此一个折中办法是,先把 EXE 文件的后缀改为 DLL,即可正常导入图标。当然,实际上我也能够导入 PE 文件中的位图,但是这个功能意义不大,所以我没有必要去做它。由于有了该功能,现在基本可以肯定,这个插件在功能上一定会超越目前已有的(主要是老外开发的)ICO 格式插件。
该插件支持自动安装或手动安装的方式。
自动安装:
1、运行PS插件安装工具 (PsPlugInSetup.EXE),软件会自动查找Photoshop的安装路径,列出插件目录及子目录,
2、点击【安装】即可完成。
手动安装:
1、下载文件,然后解压后找到ICO.8bi;
2、将ICO.8bi文件复制到D:Program FilesAdobeAdobe Photoshop CS5Plug-ins下,复制完后重启Photoshop即可。
(1)该插件能够保存XP系统引入的标准反锯齿图标。能根据当前图像,自动插入其他大小和质量的图像。为开发者生成完美的反锯齿图标,以应用于他们开发的程序产品中,在资源管理器中形成比较专业的效果,不会产生模糊(图标不具有大尺寸图像导致),锯齿感(图标没有Alpha通道导致)。商业软件例如腾讯,Adobe Reader等都采用的是标准反锯齿图标。这是其他已知的 ICO 插件不能一步做到的(他们一次只能生成含有单一图像的图标,如果要把多个图标合成为一个图标,需要借助其他软件)。
(2)该插件在为反锯齿图标自动生成索引图像时,采用了八叉树算法。该算法具有简洁优雅(内存成本少,仅需要较少的树节点开销,时间成本为遍历图像时间,即 O(n)的时间复杂度),对图像质量影响低的优点。相比 IconWorkShop 软件的自动生成的索引图像,由于八叉树算法是根据图像统计信息生成的实际调色板,能尽可能准确的反应具体图像内容,因此在效果上更好(作者主观意见)。
(3)该插件在索引模式下保存为图标时,可以给用户更多设置透明 (AND MASK 数据)的选择,例如根据指定颜色,或者附加通道。
(4)该插件能够从含有图标资源的 PE 文件(DLL,EXE(需要重命名),OCX)中导出图像。这是目前其他已知的 ICO 插件没有实现的功能。
(5)能够读取和存储 16 BPP 的图像。
(6)能够读写光标( CUR )文件,目前其他已知的 ICO 插件不支持。
(7)良好的用户交互性,例如在导入图标,打开图标文件时,为用户显示准确的图标预览图。
(8)代码的准确性,可靠性,稳定性,可维护性,以及代码效率和技巧性,遵守 Adobe Photoshop SDK 文档中的建议和规范(这一点对于用户来说是透明的,不可见的,它取决于作者的态度,自我要求,责任心和技术素质)。
(1)当打开一个 16 色图像(4 BPP )时,如果应用透明,那么我将把 Photoshop 颜色表的第 17 个颜色设置为透明色。这是因为,图标图像上的透明部分的 XOR AND 数据一定是黑色的(否则绘制图标时会显示不正常,例如透明部分的背景颜色被改变),而不透明部分可能也有黑色的像素,因此如果把黑色设置为透明色,则可能导致本来不透明的黑色像素在 PS 中也为透明。为了解决这个矛盾,我把透明色设置到第 17 个颜色,这样会保证应用透明时一定时准确的。但是缺点是存储时,由于颜色表数量超过 16,所以会被保存为 256 色图像,即勾选应用透明选项时,4 BPP 图像会被升级成 8 BPP(图像质量没有变化,但文件大小大约增加一倍),即 4 BPP 图像的读写过程不是完全可逆。
(2)打开一个 256 色图像(8 BPP)时,不一定能保证一定能够应用透明,这是因为图标的透明部分本质上是从 AND MASK 数据指定的,每个图标图像相当于一个普通图像携带一个单色图像的蒙版,本质上是两个图像。而索引图像在 PS 中必须从颜色表的 256 个颜色中挑选一个作为透明色(换句话说,透明色不可能出现在图像的显示部分),由于这个矛盾,使理论上一个图标的不透明部分有可能把所有的 256 个颜色都用到,这样就无法对它应用透明,但这种概率是很低的,但我们可以使用编码的手段生成这种图标。对于 8 BPP 图像,在应用透明时,我的方式是遍历图像后,看看颜色表中是否存在没有用到的颜色,把第一个图像上没有使用的颜色作为透明色,大多数情况下这种方法的效果都很好。打开索引图像后,你可以在 Photoshop 的以下菜单查看到对应该图像的颜色表,以及用这种方法找到的透明色,菜单位置:图像 ---- 模式 ---- 颜色表。
(3)因为八叉树算法不适合用于把图像降级成单色图像(二元位图),所以目前暂不支持存储为 1 BPP 图像(但插件能读取 1 BPP 的图像)。
(4)当保存为 32 BPP 多个图像的反锯齿图标时,因为其他图像(尺寸更小,质量更低)是插件以当前图像为基准而自动生成的,所以你只能精确的编辑当前图像(即 PS 的当前文档),用户无法对其他自动生成的图像进行像素级别的编辑。在插件中我已经尝试用最符合用户预期的方式去生成其他图像,但这不可能保证自动生成的图像完全合乎意愿。因此如果你需要继续编辑其他图像,你可以用此插件保存的成果在其他第三方编辑工具中打开进行进一步的细微调整。
从 DLL 导入图标的效果截图如下,以下是从 Windows 系统的 DLL 导入图标是,先弹出的选择图标对话框:
最上方的文本框指示的是PE文件的路径,左侧下拉框可以切换下方 ListView 的视图(平铺,图标,小图标,列表,详细信息),默认为“图标”视图,类似在资源管理器中一样。右侧文本框显示的是当前选中的图标的具体信息,其中的尺寸,BPP 都是图标图像中的最大数据。用户可以拖动该对话框的边缘,改变对话框的大小。插件将会记住用户对话框的视图和大小的设置。用户可以直接双击某一个图标进行打开。如果该图标含有多个图像,将会再次弹出一个对话框,要求用户选择该图标中的具体某一个图像!
此外,我写了一个PS插件安装工具 (PsPlugInSetup.EXE),可以帮助用户自动安装插件,该安装工具的截图如下:
如图所示,上面的下拉框显示的是 Photoshop 的插件目录,该值是通过查询注册表得到的。下方给出了建议的子目录。上面的两个目录用户也可以自行设置。点击安装即可。
这个工具是一个通用的 PS 插件安装工具,即只需要改变 PsPlugInSetup.ini 中的配置信息即可用于不同插件的安装,由于 PS 中文版的汉化可能并没有汉化注册表里的信息,所以在 ini 文件中需要提供两个建议子目录(分别对应中文版和英文版)。该工具我可以提供源码。
此外,对于插件目录的文本框,采用 SHAutoComplete 实现自动完成功能。值得一提的是,这个安装工具的图标就是使用这个插件从 PNG 素材制作出来的,它是标准的反锯齿图标,含有从 48*48(用于缩略图) 到 16*16(用于详细信息和小图标视图)的多个大小和质量的图像,因此不管在资源管理器的哪种视图下,程序图标都会有很好的显示效果,如下图所示: