fab*_*aia 15 notification icons google-chrome
Google Chrome 最近在我的 Ubuntu 14.04 安装上升级到版本 35.0.1916.114。
从那时起,通知图标开始出现在系统托盘上。然而,它似乎使用的是低分辨率图标 - 它看起来失真:
我该如何修复/更换它?
小智 14
编辑:有关替换通知图标的更新,请参见下文
如果您的 chrome 二进制文件安装在典型位置,您将在/opt/google/chrome
. 在该文件夹中,您应该找到chrome_100_percent.pak
包含通知图标的文件。这是我用来提取它的步骤,使用来自这个堆栈溢出问题的信息:
代码结帐的砂砾,国际化的项目有
svn checkout http://grit-i18n.googlecode.com/svn/trunk/ grit-i18n-read-only
这将在 CWD 中为您提供一个名为grit-i18n-read-only
. 光盘放入此文件夹
cd grit-i18n-read-only
将data_pack python模块复制到这个文件夹
cp grit/format/data_pack.py .
编辑data_pack.py
您的首选编辑器。在初始导入之后,添加以下行:
sys.path.append(os.getcwd())
在main
函数中的文件末尾,删除该行
print '%s: %s' % (resource_id, text)
(堆栈溢出答案指出这发生在第 160 行,根据我的经验,当前版本在第 201 行)
在其位置插入以下适当缩进的行(3 次):
file = open(str(resource_id), "wb")
file.write(text)
data_pack.py
在 chrome pak 文件上运行该实用程序(我grit-i18n-read-only
先将其复制到文件夹中):
./data_pack.py ../chrome_100_percent.pak
这将导致当前目录中出现很多新文件,所有文件都以数字命名,没有扩展名。您的文件浏览器(例如 nautilus)应该能够确定文件类型并显示图像缩略图。我找到了名为 6866 和 6867 的通知图标。
虽然下面有一些更简单的答案,但我设法将一些代码组合在一起,重新打包您可以在编辑图标后尝试的资源。这会产生一个新.pak
文件,我自己没有尝试使用它,所以我不能肯定地说这会成功产生新的通知图标。
在主函数中data_pack.py
,我注释掉了else
块中的所有代码并添加了以下几行:
# Read in the modified icon resource files
file = open('6864', 'r')
icon1 = file.read()
file.close()
file = open('6865', 'r')
icon2 = file.read()
file.close()
file = open('6866', 'r')
icon3 = file.read()
file.close()
file = open('6867', 'r')
icon4 = file.read()
file.close()
# Write resource pak of only notification icons
iconData = {6864: icon1, 6865: icon2, 6866: icon3, 6867: icon4}
WriteDataPack(iconData, 'tmp.pak', BINARY)
# Create copy of original pak without notification icons
dataPack = ReadDataPack('chrome_100_percent.pak')
# List of icon resources to remove
toRemove = set([6864,6865,6866,6867])
whiteList = set(dataPack.resources.keys()).difference(toRemove)
whiteListFile = open('whitelist.txt', 'w')
for i in whiteList:
whiteListFile.write(str(i)+'\n')
whiteListFile.close()
newDataPack = RePack('tmp2.pak', ['chrome_100_percent.pak'], 'whitelist.txt')
# Merge the two paks together
combinedPack = RePack('chrome_100_percent_new.pak', ['tmp2.pak', 'tmp.pak'], None)
Run Code Online (Sandbox Code Playgroud)
然后,只需运行./data_pack.py
. 这假设chrome_100_percent.pak
在当前目录中,并且应该为您提供一个新chrome_100_percent_new.pak
文件,您可以尝试将/opt/google/chrome/chrome_100_percent.pak
.
我相信资源包中与通知图标相关的一些附加图标已被识别;编辑上述内容以包含这些内容应该非常简单。
现在我回到家并有机会做更多的工作,我成功地替换了 chrome 的通知图标。正如@Glutanimate 所指出的,您一直坚持使用 16x16 分辨率,所以我不确定您实际上可以实现多少改进,但我认为这是主观的。
我只是在 GIMP 中打开了上述图标 (6864 - 6867),它检测到它们是灰度 PNG。我在 GIMP 中将一个新图标粘贴到同一个文件中,从而尝试保持相同的图像属性(例如灰度)。然后我将它们导出为 PNG,取消选中 GIMP 提供的所有选项,但保持压缩级别为 9。生成的文件具有 .png 扩展名,因此我删除了它们并替换了原始文件。然后我重新运行data_pack.py
,已经进行了上面详述的修改。
我保留了原始 pak 的备份副本,并将mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bak
修改后的 .pak 文件移到了它的位置。这样做时,我会确保 chrome 已关闭,并仔细检查是否没有 chrome 进程在运行,我相信 chrome 有一个新设置,即使浏览器现在默认关闭,也允许后台进程。
瞧,我在 Unity 中的通知图标反映了我的更改。
最后的最终编辑:好吧,我撒谎了 - 我尝试了 32x32 PNG,它似乎工作得很好。所以,你去了。这里有一些结果截图。
(来源:来自 Adam Whitcroft 的批处理图标)
编辑:
看起来问题出在node-chrome-pak
. Rocketman10404 的修改data_pack.py
工作正常,即使使用 32px 图标:
请改用他的指示。
原答案:
@rocketman10404 的出色回答让我想到了node-chrome-pak,这是一个 node.js 脚本,可以打包、解包和替换 Chrome/ium.pak
文件中的特定资源。
虽然我已经设法chrome_100_percent.pak
用这个工具替换了通知图标,但我必须报告我无法使更改可见。我仍然认为值得努力概述我为达到这一点而采取的步骤。希望其他人会接受这一点,并找到一种真正使其发挥作用的方法。
安装 node.js
node-chrome-pak
需要 node.js 才能运行。您可以通过添加 Chris Lea 的 nodejs PPA 来安装最新版本:
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
Run Code Online (Sandbox Code Playgroud)
下载脚本并解压 Chrome 的资源
下载脚本:
git clone https://bitbucket.org/hikipro/node-chrome-pak.git
cd node-chrome-pak
Run Code Online (Sandbox Code Playgroud)
复制您的本地chrome_100_percent.pak
:
cp /opt/google/chrome/chrome_100_percent.pak ./chrome_100_percent.pak
Run Code Online (Sandbox Code Playgroud)
解压.pak
文件:
node ./main.js unpack chrome_100_percent.pak
Run Code Online (Sandbox Code Playgroud)
识别和修改通知图标
最后一个操作将创建一个名为 的新文件夹./extracted
。您将在其中找到 pak 文件中包含的所有资源。它们以其资源 ID 命名。您将希望保留此名称,因为它对于重新打包文件很重要。
现在困难的部分在于识别正确的图标。如果我没有完全弄错,以下文件应该是系统托盘中使用的文件:
6864.png
6865.png
6866.png
6867.png
Run Code Online (Sandbox Code Playgroud)
确定您要查找的图标后,您可以继续修改和替换它们。如果您愿意,可以使用我为此目的创建的图标:
.png
不同分辨率的源文件和导出的文件托管在GitHub 上。
这是我发现的第一个限制:如果您用任何分辨率高于原始 Google Chrome 的图像替换图标,将会损坏并停止正常工作。对于这个特定的项目,您必须保持 16x16 的分辨率。实际上,这意味着您将无法显着改进当前的系统托盘图标,即使您要使用此方法。
当然,这种限制是由node-chrome-pak
设计方式引入的。如果您根据@rocketman10404 的答案创建自定义 python 脚本,则可以用更大的图标替换图标。
重新打包资源并替换现有资源
修改/替换现有图标后,您必须创建一个更新的pak
文件...
node ./main.js pack ./extracted ./chrome_100_percent_modified.pak
Run Code Online (Sandbox Code Playgroud)
...并用它来替换现有的:
sudo cp ./chrome_100_percent_modified.pak /opt/google/chrome/chrome_100_percent.pak
Run Code Online (Sandbox Code Playgroud)
这个方法的关键
在我的尝试中,我无法让 Chrome 显示更新的图标。即使我确保所有图标都被正确替换并实际存在于修改后的pak
文件中(通过再次解压缩),我仍然无法替换系统托盘中的实际图标。
不幸的是,我不知道这是为什么。