0

0

用于读写ICO图标文件的 Photoshop 插件

高洛峰

高洛峰

发布时间:2017-02-20 09:57:35

|

2489人浏览过

|

来源于php中文网

原创

    这是我为 photoshop 编写的一个文件格式插件,icoformat,用于读写 windows 图标文件(扩展名为ico, cur)。图标文件格式的ps插件在很多年前有一个老外曾经写过,不过我现在提供的插件则功能上更好,有足够的理由替换掉老外提供的插件。

    老外的插件的特点我记得不是很清楚了,大概根据记忆对比如下:

    (1)老外的插件在文件对话框中选择该插件时,无法显示 ICO 文件。可能是因为他的 PiPL 资源写的有问题。我的插件没有该问题。

    (2)老外的插件在打开含有多个图像的文件时,无法预览,而我提供了对话框上的预览图,对用户更友好。

    (3)老外的插件对图标的透明部分不能很好处理(记忆中),而用我的插件,你可以很好的设置透明部分。

    (4)老外的插件不能保存XP系统的多图像的反锯齿图标,而我的插件能保存为反锯齿图标,并且自动生成其他质量和标准大小的图像 (这一点我认为是最重要的替换老外的插件的理由)。

    (5)图像降级时采用了八叉树算法,降级后的图像质量要比例如IconWorkshop之类的软件采用的方法更好。

    (6)我的插件是 scripting-aware 的(即插件参数会存放在PS脚本系统中),在运行时可以记住用户的设定。

    (7)我的插件可以打开和保存光标(CUR)文件,老外的插件貌似不能。并且我可能还会后续继续开发从PE文件导入图标等其他功能。

    下面主要是对这个插件一些简单的说明和介绍。这个插件一共有4个对话框,分别是关于对话框,图像选取对话框(打开文件时),透明部分设置对话框,图像保存选项设置对话框。下面我将一一展示一下。

 

自助餐美食手绘标签设计下载
自助餐美食手绘标签设计下载

自助餐美食手绘标签设计适用于自助餐美食标签设计 本作品提供自助餐美食手绘标签设计的图片会员免费下载,格式为PSD,文件大小为3.4M; 请使用软件Photoshop进行编辑,作品中文字及图均可以通过软件修改和编辑;

下载

    (1)图像选择对话框

    当打开含有多个图像的图标时,会弹出图像选择对话框:

     用于读写ICO图标文件的 Photoshop 插件

    在这里主要是要求用户从文件中选择一个要打开的图像,“添加AND MASK或Alhpa为独立通道”是指,如果是32 BPP 以下的图标,会把 AND MASK (黑白两色位图,白色表示透明)添加到PS中的新建通道,如果是32 BPP 图标,会把 Alpha 通道添加为 PS 中新建通道。“是否显示棋盘网格”是针对对话框上的图像预览图而言的,如果勾选,实际上是调用了 PS 中的回调函数进行绘制的,否则是通过 WIN32 的 GDI 函数绘制的。 

 

    (2)图像质量选择对话框 

    当保存文件时,根据图像模式的不同弹出不同对话框。如果当前的图像模式是RGB模式,则会弹出下面的对话框,要求用户设置要保存为什么质量的图标。如果你选择的是反锯齿图标,我会自动的为文件中增加其他大小和颜色质量的图像(最后文件中可能含有 3 到 12 个图像,具体个数将依据文件尺寸和标准图像尺寸之间的关系决定),此插件生成的反锯齿图标完全是参考 MSDN 对 XP 系统使用的图标的要求而生成的,所以此插件生成的反锯齿图标可以直接导入到 VS 的 Windows 应用程序项目中进行使用。关于反锯齿图标,可以参考我之前的文章。

     用于读写ICO图标文件的 Photoshop 插件

    下面的拉伸模式选项,仅针对 32BPP 反锯齿图标时有效,因为在这里只有 32 BPP 涉及到需要把图像缩小。所谓删除像素是指像素重叠时,只会取图像上的某一个像素。线性插值是指在源图上的某4个像素中取一个线性插值。从原则上讲,删除像素比线性插值的运算量小,而线性插值的缩放质量可能更好一点,但是实际上很难感受到太大差别。

    如果选择的是 16 BPP,则保存的图像是 X-5-5-5 分布的图像。选择 4 BPP 或 8 BPP 图像时采用的图像降级算法是八叉树算法(我在前一篇文章中曾经介绍过)。由于八叉树算法在颜色数量很少时可能会使图像突变成全部同一个颜色,所以我没有提供保存为单色图像的选项(最低BPP是4)。下图显示了把一个图标降级保存后的图像质量效果:

     用于读写ICO图标文件的 Photoshop 插件

    通过这个插件你可以很容易把PNG图片,转换成反锯齿图标。方法是:在PS中打开PNG图片,然后再另存为 ICO 文件即可。

 

    (3)AND MASK设置对话框 

    保存文件时,如果图像是索引模式,则要求用户设置透明部分(AND MASK部分)。默认选项是直接使用 PS 文档本身的透明信息,但这个对话框也允许你选择其他方式去设置透明信息。

     用于读写ICO图标文件的 Photoshop 插件

    这里有很多设置,你可以用下拉框切换,则下方可能会提供不同的输入界面。你可以设置透明色为黑色,白色,前景,背景,某个采样点的颜色,某个指定RGB颜色,或者alpha通道(白色表示透明),或者指定一个颜色表中的索引。

 

    (4)关于对话框

    你可以在PS的菜单:帮助-关于增效工具-ICO...中看到它,这个对话框也是我精心设计和编写的,还是蛮漂亮的。当你在这个对话框中移动鼠标时,能看到我的博客网址对鼠标的反馈,你可以在网址上面点击,即调用默认浏览器打开网址。这是通过PS提供的 CallBack Suite 实现的,我在之前写的如何编写 PS 滤镜的教程中曾经介绍过。

     用于读写ICO图标文件的 Photoshop 插件

 

    (5)其他说明: 

    该插件是建立在我最近的一些已发表的博客的研究基础上的,从图像文件格式查看器开始,到AlphaBlend和反锯齿图标,生成索引图像的八叉树算法,这些文章发表的目的都是为本插件做的技术准备。要开发这个插件,需要耗费很大精力,包括研究 ICO 文件格式,PS SDK 等等。已参考的资料(例如八叉树算法)在之前的博文中已有介绍,在此省略。

    5.1 如果文件中没有指定 X,Y 分辨率,则我会在 PS 中保持 PS 的默认值:72像素/英寸。

    5.2 如果打开了索引图像,你可以在菜单:图像-模式-颜色表 中看到当前的颜色表。由于有些软件(例如AcdSee)不能正确解析颜色表为实际颜色数量的图像,所以我保存文件时,颜色表一律设置为 16 或者 256,而不是实际的颜色个数。

    5.3 本插件尤其适用于以下用户,我会向下列人群强烈推荐你安装这个插件:

    PS熟练用户,Windows 图标设计师, 喜欢自己参与 UI 设计的程序员,工程师等技术人员(就像我这样的人)。

    这个插件使用户可以完全利用到 Photoshop 的强大图像处理能力,而不再受限制于 VC,VS.NET 等IDE的有限编辑能力,这样你就能借助 Photoshop 制作出更漂亮的图标,当然你也可以很方便的把网络上很多 PNG 素材方便的转换成在程序中使用的图标。 

    我衷心的希望有更多的人喜欢它,使用它。如果你有任何的使用意见和建议和需求,欢迎你在我的博客留言,或者发送 Email 到我的信箱(信箱地址位于左侧的公告栏)。

 

    (6)最后是该插件的发行包的下载连接:

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

 

    (7)安装方法:

    把 “IcoFormat.8BI” 文件复制到Photoshop的文件格式插件目录 ①,例如 C:\Program Files\Adobe\Photoshop CS\增效工具\文件格式\,重启 PS 即可。检查在PS的菜单中如果有下面的菜单:“帮助-关于增效工具-ICO...”,则说明插件安装成功。

    

    (8)更新记录 (BUG等级:H: 极其重要; M: 中等; L: 无关紧要) : 

    8.1 M: 保存为32BPP以下质量时,调整了设置ANDMASK的逻辑(Alpha通道中所有小于255的都被设置为透明),已避免显示出比较生硬的阴影。2010-12-17。

    8.2 H: 修正在保存32BPP反锯齿图标,选择线性插值时,错误的将Alpha通道也使用线性插值的BUG(正确的做法是 Alpha 通道依然用删除像素方法生成)。该BUG导致在产生其他大小的图像时,可能会错误的使不应该透明的像素成为透明。值得一提的是,此 BUG 是由 8.1 引入的。2010-12-18 2:04:15。

    8.3 L: 修正以下BUG,打开图标中的索引图像,取消勾选“开启图像透明效果”选项,但结果有时仍然应用了透明。2010-12-18 3:36:08。

    8.4 H: 调整了插件的 PIPL 资源,使滤镜可以直接从 PS 中获取到文档的透明信息(不再需要用户显式提供附加通道了)。调整了线性插值的代码中逻辑不够准确的部分,并避免像素与源图上的透明部分(黑色)合成。2010-12-19 0:55:23。

    8.5 M: 调整了生成 32 BPP 图标的逻辑,直接从 PS 文档中的数据去降级图像 (原方式在产生索引图像时偶发颜色缺失,原因不详)。2010-12-19 1:41:08。

    8.6 L: 增加存储为 32 BPP 单个图像的反锯齿图标选项。2010-12-22 2:05:30。

    8.7 L: 读取索引图像时,设置透明的方法重新改为之前的方法。可以保证应用透明更加准确,对于16色图像一定会正确应用透明,对256色图像尝试寻找把图像上没有使用的颜色作为透明色,因此有可能无法应用透明。该方法主要缺点是,另存为时,可能使16色索引图像升级成256色图像。2010-12-23 2:57:17。

    8.8 L: 细微调整了读取 16 BPP 图像的像素取值的线性映射方法(影响不大)。2010-12-24 18:48。

 

    (9)致谢: 

     感谢 Chris Cox (Adobe 员工)在官方论坛上对我提的问题给予答复。

    Adoble 论坛的 Photoshop SDK 版块网址:

    http://forums.adobe.com/community/photoshop/photoshop_sdk

 

    (10)参考资料: 

    10.1 八叉树算法(地址略)。

    10.2 Photoshop SDK(6.0, CS)。

    10.3 ICONPRO(MSDN 技术文档中提供的范例)。

 

    (11)本文中使用的术语介绍 

    11.1 BPP(Bits Per Pixel)

    即图像的位深度。其含义是描述每个像素所使用的位数(一个字节含有8位)。例如对于 RGB 真彩色位图来说,每个像素用三个字节表示,其BPP = 24。黑白图像(二元位图)的位深度为1。16色索引图像的位深度为4(每个字节可表示两个像素),256色索引图像的位深度为8(每个字节表示一个像素)。通常位深度除以8,就是表示每个像素的字节个数。

    我们常说的灰度图像实际上并不是一种专有格式,而是一种特殊的256色索引图像,其调色板的特征是每个颜色的R,G,B三个分量是相等的,256个调色板颜色从(0,0,0)到(255,255,255),因此其图像数据的值本质上依然是颜色索引,但同时也可以理解为其灰度的亮度。 

    11.2 反锯齿(AntiAlias)

    这里是我个人的译法,可能不够准确,可能应该称为抗锯齿才更符合更多人的习惯。这是一种使用半透明像素的技术,用于消除锯齿感。首先我们需要了解的是锯齿感其产生的原因是显示器呈现图像使用的是一个密集的矩阵栅格,GDI按照计算机图像算法设置点阵像素(本质上把数学的模拟信号变成离散化后的数字化信号),这种呈现类型的直线看上去带有锯齿,有点像楼梯。相邻像素的非平滑性突变使人产生锯齿观感。

    更为复杂的呈现直线的技术需要使用部分透明的像素和不透明的像素。像素被设为纯色或与背景色的混合色(取决于它们和直线的接近程度)。这种呈现方式被称为消除锯齿,它可以生成视觉上更感平滑,柔和的直线。

    本文中提到的反锯齿图标,指的是 32 BPP 的图像。即每个像素用4个字节表示,分别代表的是R,G,B,A(lpha),比普通RGB位图多出来的一个 Alpha 通道,用于描述该像素的透明程度。因此能够指定像素的半透明,从而和背景产生柔和的融合,即达到反锯齿的效果。

    


    ① PS 插件目录通常是指 $(PS INSTALL DIR) \ Plug-Ins,只要把第三方插件的文件(.8B*)放在这个目录下,PS在启动时就会去扫描并尝试加载这个目录下的 8B* 文件。插件是什么种类,并不是由后缀名决定的,而是由其PIPL属性指定的。在这个目录下,又可以按照插件种类建立相应的子目录。例如滤镜(Filter),文件格式(File Format),但注意只要把文件放到PS的插件目录即可被PS尝试加载。 插件目录可以通过查找注册表的下列位置得到:

    HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop\(版本号,例如8.0)\PluginPath

    但是对于 PS CS 中文版来说,这个值保持着英文版路径(没有被汉化),所以是错误的,所以这给我们为插件提供一个更简单易用的安装工具造成了一点小障碍。对于英文版来说,可以认为就是PS安装目录下面的 Plug-Ins 子目录。

更多 用于读写ICO图标文件的 Photoshop 插件相关文章请关注PHP中文网!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

32

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

268

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

195

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

170

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

85

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_前端开发
第二十四期_前端开发

共161课时 | 4.4万人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 7.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号