如何替换Google Chrome浏览器的低分辨率通知图标?


15

在我的Ubuntu 14.04安装上,Google Chrome最近升级到了35.0.1916.114版本。

从那时起,通知图标开始出现在系统托盘上。但是,似乎它使用的是低分辨率图标-看上去变形了:

在此处输入图片说明

如何修复/更换它?


1
图标存储在/usr/share/icons,如果有帮助的话
MrVaykadji

@MrVaykadji:谢谢您的帮助!我在该目录下查看,但找不到任何Google Chrome通知图标。我猜那些在不同的目录中。
fabiomaia 2014年

1
也许/opt吧?那就是安装谷歌二进制文件的地方。
MrVaykadji 2014年

2
该死的。而且Google-Chrome不是开源的,因此,如果它是硬编码的(意味着在二进制文件中),则您将无法更改该图标。也许您可以尝试查看所有名称中带有“ chrome”的文件,catfish例如,或通过其他方法来搜索整个磁盘。
MrVaykadji

1
该通知图标至少在3点上是错误的:它不尊重用户的偏好;它不尊重Ubuntu的颜色;它使用的分辨率非常低。
Rael Gugelmin Cunha 2014年

Answers:


14

编辑:有关更换通知图标的更新,请参见下文

如果您将chrome二进制文件安装在典型位置,则可以在中找到它们/opt/google/chrome。在该文件夹中,您应该找到chrome_100_percent.pak包含通知图标的文件。这是我使用此堆栈溢出问题中的信息来提取它的步骤:

  1. 代码结帐的砂砾,国际化的项目

    svn checkout http://grit-i18n.googlecode.com/svn/trunk/ grit-i18n-read-only

  2. 这将在您的CWD中为您提供一个名为的文件夹grit-i18n-read-only。CD放入此文件夹

    cd grit-i18n-read-only

  3. 将data_pack python模块复制到此文件夹

    cp grit/format/data_pack.py .

  4. 编辑data_pack.py您的首选编辑器。在初始导入之后,添加以下行:

    sys.path.append(os.getcwd())

  5. main函数的文件末尾,删除该行

    print '%s: %s' % (resource_id, text)

    (Stack Overflow答案指出此情况发生在第160行,以我的经验,当前版本在第201行出现)

  6. 在其位置上,插入适当缩进的以下行(3次):

    file = open(str(resource_id), "wb")

    file.write(text)

  7. data_pack.py在chrome pak文件上运行该实用程序(我grit-i18n-read-only先将其复制到该文件夹中):

    ./data_pack.py ../chrome_100_percent.pak

这将在当前目录中产生许多新文件,所有文件都以数字命名,没有扩展名。您的文件浏览器(例如nautilus)应该能够确定文件类型并显示图像缩略图。我发现了名为6866和6867的通知图标。


编辑

尽管下面有一些简单的答案,但我设法整理了一些代码来重新打包在编辑图标后可以尝试使用的资源。这将产生一个新.pak文件,我没有尝试使用自己,所以我不能肯定地说这将成功生成新的通知图标。

在中的main函数中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)

然后,运行./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中的通知图标反映了我的更改。

Final-Final Edit:好的,我撒谎了-我尝试了32x32 PNG,看来效果还不错。所以,你去了。这里是一些结果截图。

  • 原始图标:您可能会在我的保管箱和天气图标之间的面板中识别出默认的“未读通知”图标:

原始图标

  • 新图标:我的32x32px修改版本位于同一位置:

新图标

(来源:Adam Whitcroft的批处理图标


感谢更新!我可以确认32px图标与data_pack.py可以正常工作。我修改了您发布的代码段,以说明所有通知图标。我希望你不要介意。
谷氨酰胺

1
FWIW,您也可以使用此方法完全删除指示器,而不禁用通知系统(cf. askubuntu.com/a/473416/81372)。
谷氨酸(Glutanimate),2014年

朋友,如果您稍微整理一下教程,我会很高兴...是否需要对data.py进行所有修改?我有点困惑。没有冒犯的意思,我只想遵循它。
2014年

1
不错的技巧。只需添加,您就可以在这里找到更多图标thenounproject.com/search/?q=bell
gc5 2014年

有了Chrome 36+,现在的图标是6894 ... 6897
gc5 2014年

8

编辑:

看来问题出在哪里node-chrome-pakdata_pack.py即使使用32px图标,rocketman10404的修改也可以正常工作:

在此处输入图片说明

请改用他的指示


原始答案

@ 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

下载脚本并解压缩Chrome资源

下载脚本:

git clone https://bitbucket.org/hikipro/node-chrome-pak.git
cd node-chrome-pak

将您的本地复制chrome_100_percent.pak过来:

cp /opt/google/chrome/chrome_100_percent.pak ./chrome_100_percent.pak

解压缩.pak文件:

node ./main.js unpack chrome_100_percent.pak

识别和修改通知图标

最后一个操作将创建一个名为的新文件夹./extracted。在其中,您将找到pak文件中包含的所有资源。它们以其资源ID命名。您将需要保留此名称,因为它对于重新打包文件很重要。

现在,困难的部分在于识别正确的图标。如果我没有完全弄错,以下文件应该是系统托盘中使用的文件:

6864.png
6865.png
6866.png
6867.png

确定所需图标后,您可以继续修改和替换它们。如果需要,可以使用我为此创建的图标:

      

      

源文件和.png不同分辨率的导出文件托管在GitHub上

这是我发现的第一个限制:如果将图标替换为比原始Google Chrome更高的分辨率的图像,则会损坏它并停止正常工作。对于此特定项目,您将必须保持16x16分辨率。实际上,这意味着即使您要使此方法正常运行,也无法显着改善当前的系统托盘图标。

当然,这种限制是通过node-chrome-pak设计方式引入的。如果您基于@ rocketman10404的答案创建自定义python脚本,则可以将图标替换为较大的图标。

重新打包资源并替换现有资源

修改/替换现有图标后,您将必须创建更新的pak文件...

node ./main.js pack ./extracted ./chrome_100_percent_modified.pak

...并用它代替现有的:

sudo cp ./chrome_100_percent_modified.pak /opt/google/chrome/chrome_100_percent.pak

这种方法的症结

在尝试中,我无法让Chrome显示更新的图标。即使我确定所有图标都被正确替换并确实存在于修改后的pak文件中(通过再次将其解压缩),我仍然无法替换系统托盘中的实际图标。

不幸的是,我不知道为什么会这样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.