[发布] Photoshop ICO 文件格式插件 V2.0版

    [更新预告] 我正在开发 ICO 插件的 3.0 版本。增加了新的比原来更好的缩放算法。同时将改进一些 UI。预计 2017 年 6 ~ 7 月可以发布。2017 年 6 月 11 日。

    【声明】此插件下载链接已经修复,免费提供。  -- hoodlum1980,on 2011-3-23。

 

    经过了少许努力,现在我将能够发布给 Photoshop 使用的 ICO 文件格式插件 2.0 版。

    该插件 2.0 版本主要新增功能是,支持从 PE 文件(DLL,OCX)导入图标的功能。但是由于 Photoshop 可能本身有限制,所以不能直接支持打开 EXE 文件,因此如果要导入 EXE 文件的图标,经过我的调试,发现 Photoshop 不会做任何反应(PS不会调用插件的入口函数),因此一个折中办法是,先把 EXE 文件的后缀改为 DLL,即可正常导入图标。当然,实际上我也能够导入 PE 文件中的位图,但是这个功能意义不大,所以我没有必要去做它。由于有了该功能,现在基本可以肯定,这个插件在功能上一定会超越目前已有的(主要是老外开发的)ICO 格式插件。

    【该插件的优点描述】

    (1)该插件能够保存 Windows XP 系统引入的标准抗锯齿图标(32 bpp)。能根据当前图像,自动插入其他大小和质量的图像。为开发者生成完美的抗锯齿图标,以应用于他们开发的程序产品中,在资源管理器中形成比较专业的效果,不会产生模糊(图标不具有大尺寸图像导致),锯齿感(图标没有 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(用于详细信息和小图标视图)的多个大小和质量的图像,因此不管在资源管理器的哪种视图下,程序图标都会有很好的显示效果,如下图所示:

    

    最后是该插件的发行包的下载连接(包含 2.0 版本 ICO 插件和安装工具,另附送一个油画滤镜):

    (请使用最新版下载链接,原 Release 时 ICO 插件我不记得是否把编译选项设置正确了,如果C++语言选项错误,将导致插件会依赖 VS2005 的运行时库。)

    http://files.cnblogs.com/hoodlum1980/PsPlugIns_V2013.zip

 

    这里,在提供一个老外开发的 ICO 插件的简体中文页面(这个页面是我帮他翻译的,因此他给了我 10 美元的报酬):

    http://telegraphics.com.au/sw/icoformat.zh.html

    要了解抗锯齿图标更多信息,建议安装了 MSDN 的用户阅读以下两篇文章:

    (1)《Creating Windows XP Icons》:本文介绍如何创建 Windows XP 图标。

    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dnwxp/html/winxpicons.htm#winxpicons_step5

 

    (2)《Using Windows XP Visual Styles》:本文主要介绍如何给应用程序,第三方插件等应用 Windows XP 视觉样式,里面提到了如何使用 32 BPP 反锯齿图标。

    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/commctls/userex/cookbook.htm#no_extensions

    【参考资料】

    (1)从PE文件导入图标的实现,主要参考 ICONPRO 源码。该范例位于 MSDN 以下地址:

    Win32 和 COM 开发 \ User Interface \ User Interface Design & Usability \ Technical Articals \

    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/dnwui/html/msdn_icons.htm

    (2)用于降级图像质量的八叉树算法(保存为多个图像的反锯齿图标时,该算法用于生成 16 色和 256 色索引图像)。

    (3)安装工具中自动完成部分,主要参考《Visual C++界面编程技术》,和 codeproject 上某篇文章(具体地址已记不得了),该文章指出,在调用 SHAutoComplete 之前,必须调用 CoInitialize 函数。

    【BUG 修正】

    (1)H:在导入DLL图标时,修复有可能引发资源泄露的代码。2010-12-29。

    (2)H:修复在索引模式存储文件时,可能引发的错误(用于存储文件的某个参数没有正确初始化)。2010-12-29。

    (3)L: 修复在索引模式存储文件时,AndMask 设置对话框的界面没有正确初始化的BUG(应该显示的控件没有显示)。2010-12-29。

    (4)L: 修复从DLL导入图标时,在选择要导入的图标对话框的 ListView 上,BPP 和备注栏信息不够准确的BUG(某些 32 BPP 反锯齿图标显示成索引)。2010-12-29。

    (5)L: 程序美化。打开 ICO 文件时,选择图像对话框的高度可以根据文件中的最大图像高度自动调整。保存没有透明信息的文档时,给用户的提示信息更加显著。关于对话框上的插件版本信息改为从资源中获取。2010-12-30。

    (6)L: 为插件安装工具添加“启动 Photoshop”按钮,识别文件版本,覆盖安装提示等功能。2010-12-30。

    (7)H: 修复读取文件时对文档的垂直分辨率忽略设置的 BUG,该 BUG 导致在读取非 72 像素/英寸分辨率的 ICO 文件时,会导致 Photoshop 启用像素长宽比校正,使图像变形。2010-12-31。

    (8)M: 新增功能,从DLL导出图标时,可以不经过PS,而是直接转存为图标文件。这是因为导入PS时,只能打开图标图像中的一帧图像,因此不能完全按原样导出图标文件。增加此功能以后,图标可以从DLL中无任何改动的导出到文件。当导出至文件的图标数量较大(大于等于10个)时,则会显示一个进度条对话框向用户反馈进度(启用多线程来实现)。调整了选择图标对话框的界面,增加左上角的导出类型下拉框,增加取消按钮下方的“全选”复选框。调整后的对话框如下图所示。2011-1-27。

    

    

    (9)H:修复打开或导入图标时,弹出“内存不足”的错误提示对话框。更新后,对该图标图像做“不支持的图像格式”处理,即用户不能选择该图像打开。程序的检测标准是,如果该图像的 BitmapInfoHeader 中指定的宽度 >= 2048 像素,或者高度 >= 4096 像素(备注:2048 * 2048 像素,32bpp 的图像需要的内存大约为 17MB ),即认为该图像格式不支持。2011-7-9。

    (10)L:把插件中允许的 ICO 文档大小从 512 * 512 像素,提高到 1024 * 1024 像素。该属性主要影响是,如果文档超出该尺寸,存储为的文件格式下拉框中将不会出现 ICO 格式选项。2011-7-9。

    (11)M:在从DLL导入图标时,修复由于 CreateIconFromResource 函数使用共享方式创建图标导致的 GDI 对象无法释放问题。该问题在每次使用从 DLL 文件导入图标功能时,会使 PS 进程中的 GDI 对象数量上升(因为共享方式的图标不会被系统释放),当数量达到或接近 10000 时,将会使系统无法正常绘制。2011-8-12。

    (12)M:扩充了图标的标准尺寸,从 { 16, 32, 48 } (像素)扩充到 { 16,32,48,128,256,512 }(像素)。也就是说,制作超大图标时,图标文件中所包含的的图像会更多,当然文件尺寸也会更大。版本号升级到 2.0.6。ON 2013-7-9。

    (13)L:优化 UI,对于选择图像对话框(打开具有多个图像的图标文件时出现),所有图像中的最大尺寸自动调整对话框和控件的布局。2013-7-9。

时间: 2024-10-24 00:14:30

[发布] Photoshop ICO 文件格式插件 V2.0版的相关文章

慧算账V2.0版发布,互联网记账再升级

本文讲的是慧算账V2.0版发布,互联网记账再升级,日前,慧算账迎来了一次版本的更新升级,V2.0版正式震撼上线.据悉,新推出的版本除了继续提升产品功能和完善用户体验外,其在智能化方面的表现也相当惹眼,下面就赶快随小编一睹为快吧! 一.银行日记账一键导入 以前,会计月末痛苦的事情是什么?不错,就是银行对账!几百条银行流水耗时几小时辛辛苦苦录入,换来的是跟实际1分钱的差额,而且遗憾的是久久核对不出差错在哪儿. 现在,慧算账支持国内19家主流银行对账单直接导入,其他银行可通过慧算账提供的通用模板导入,

Jeecms v2.0 版近期发布公告

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 距jeecms v1.1版正式发布不到一个星期,我们又从jeecms核心开发小组那得到最新消息,jeecms开源项目又将升级了!目前jeecms v2.0 beta版的开发工作正紧锣密鼓地进行中,新版的jeecms预计将在今年11月25左右发布,敬请关注. 可能有的网友会有疑问,为什么这次升级不叫v1.2版,而直接就到了v2.0版呢?这次之所

百度 宣布百度导航V2.0版永久免费

8月28日消息,今天百度宣布百度导航V2.0版永久免费,即日起,用户将可以零花费使用该App.此前百度导航版本需要付费激活,不过允许用户免费试用30天.目前市场上的导航应用大多采用了免费/付费双版本的形式. 据悉,百度导航支持3D导航.海量电子眼和路口放大图数据等功能,新版增加语义搜索功能,能够更深入分析用户输入的关键字,找到合适的结果. 此外,百度导航将四维数据和百度所有本地生活数据结合,全年4次大规模更新,同时根据用户的驾车需求,提供各类驾车导航相关信息搜索.百度导航目前拥有3500万地标信

网易发布最新的网易邮箱5.0版

网易公司日前在京发布最新的网易邮箱5.0版,新版以流畅快捷的极速体验.简约清新的操作界面.随手可及的个性操控.精心设计的多元智能和一触即发的灵敏感应,对邮箱进行了重新定义,其写信语音输入.无障碍设计.邮箱触点.情感化设计等多项功能均是业界首创. 据了解,网易最新发布的邮箱5.0版采用网易自主研发的第五代引擎,通过持续优化通讯协议,让邮件到达更迅速更轻巧.与上一版本相比,新版本更新的功能点超过百个,其中数十个都是网易首创并独家拥有.这些新功能的增加,不但让网易邮箱犹如长了耳朵和眼睛,而且拥有了神经

百度导航V2.0版永久免费

摘要: 8月29日消息, 百度 昨日宣布百度导航V2.0版永久免费,今日又通过百度地图官方微博发布消息称对于此前在iOS和Android平台上购买过百度导航的用户,百度将全部退款. 据悉,百度在今 8月29日消息, 百度 昨日宣布百度导航V2.0版永久免费,今日又通过百度地图官方微博发布消息称对于此前在iOS和Android平台上购买过百度导航的用户,百度将全部退款. 据悉,百度在今年2月份推出百度导航(离线)安卓版,并在MIUI及小米论坛首发测试版,该版本可以免费试用,但是需要缴费激活. 在昨

淘宝对外发布了手机淘宝4.0版客户端

1.手机淘宝4.0支持海外手机号注册 日前,淘宝对外发布了"手机淘宝4.0版"客户端,该版本最大的变化之一是简化了用户注册淘宝账号的流程,支持用户通过手机号申请和注册淘宝账号.值得注意的是,该版本除了支持国内用户外,还支持港.澳.台地区与部分海外用户. 2.淘宝.天猫年货交易量同比上升103.1% 淘宝官方数据平台淘宝指数的数据显示,截至1月14日,在淘宝.天猫两大电商平台上,年货的成交量指数环比上升82.7%,同比上升103.1%.1号店副总裁黄志雄表示,1号店2014年的年货销售与

一想千开PJblog审核功能补丁 v2.0版 发布第1/3页_应用技巧

这次这个补丁,应该说和上和是没有多少关系的,是完全重新编写的.但为了不和上次发布的那个补丁混淆,给这个补丁加个版本号2.0. 一.PJblog审核功能补丁v2.0对PJblog功能上的改进 1.重大改进:一想千开首创"敏感字"概念并引入应用到PJblog审核功能补丁v2.0   什么是"敏感字"?一想千开对"敏感字"的定义是这样的:含有"敏感字"的言论有可能是非法言论,也有可能是正常言论.这类词语我们不能直接加进"过

一想千开PJblog审核功能补丁 v2.0版 发布第1/3页

这次这个补丁,应该说和上和是没有多少关系的,是完全重新编写的.但为了不和上次发布的那个补丁混淆,给这个补丁加个版本号2.0. 一.PJblog审核功能补丁v2.0对PJblog功能上的改进 1.重大改进:一想千开首创"敏感字"概念并引入应用到PJblog审核功能补丁v2.0 什么是"敏感字"?一想千开对"敏感字"的定义是这样的:含有"敏感字"的言论有可能是非法言论,也有可能是正常言论.这类词语我们不能直接加进"过滤关

用最快速度编写和发布的图标导出工具v1.0版

=============================================================================================       声明[1]:这篇文章中的代码在写ICO文件时的方法并不够完善和准确.因此保存ICO文件时会有些小问题.目前看来,有两种方法,可能需要把微软的C++的范例源码借鉴并引入到C#项目中,另一种是把该范例改写为一个DLL,然后用PInvoke方式调用.总之,不管采用哪种解决方法,将会改变本文中的技术路线,因