web-dev-qa-db-ja.com

Google Chromeの低解像度通知アイコンを置き換えるにはどうすればよいですか?

Google Chromeは最近、Ubuntu 14.04のインストール時にバージョン35.0.1916.114にアップグレードされました。

それ以来、通知アイコンがシステムトレイに表示され始めました。ただし、低解像度のアイコンを使用しているようです-ゆがんで見えます:

enter image description here

どうすれば修正/交換できますか?

15
fabiomaia

編集:通知アイコンの置換に関する更新については以下を参照してください

chromeバイナリが通常の場所にインストールされている場合、それらは/opt/google/chromeにあります。そのフォルダーには、通知アイコンを含むファイルchrome_100_percent.pakがあります。 このスタックオーバーフローの質問 からの情報を使用して、抽出に使用した手順を次に示します。

  1. コードを grit-i18nプロジェクト にチェックアウトします

    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. chrome pakファイルでdata_pack.pyユーティリティを実行します(最初に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)

次に、./data_pack.pyを実行します。これは、chrome_100_percent.pakが現在のディレクトリにあり、chrome_100_percent_new.pakを介してコピーを試行できる新しい/opt/google/chrome/chrome_100_percent.pakファイルを提供することを前提としています。

通知アイコンに関連するリソースパック内の追加のアイコンがいくつか特定されたと思います。上記を編集してそれらを含めることは非常に簡単です。


最終編集

私は家に戻り、これについてさらに作業する機会を得たので、クロムの通知アイコンを無事に置き換えることができました。 @Glutanimateが指摘したように、あなたは16x16の解像度にこだわっているので、実際にどれだけ改善できるかはわかりませんが、それは主観的なものだと思います。

前述のアイコン(6864-6867)をGIMPで開くと、グレースケール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の通知アイコンは私の変更を反映しています。

最終編集:OK、嘘をつきました-32x32 PNGを試しましたが、うまく機能したようです。それで、そこに行きます。ここでいくつかの結果のスクリーンショット。

  • 元のアイコン:ドロップボックスと天気アイコンの間にあるパネルのデフォルトの「未読通知なし」アイコンをおそらく認識します。

Original Icon

  • 新しいアイコン:同じ場所にある32x32pxの修正版:

New Icon

(出典: バッチアイコン Adam Whitcroftから)

14
rocketman10404

編集:

問題はnode-chrome-pakにあったようです。 rocketman10404の修正されたdata_pack.pyは、32pxアイコンでも正常に動作しています:

enter image description here

代わりに his instructions を使用してください。


元の答え

@ rocketman10404の優れた答えは、Chrome/iumの.pakファイル内の特定のリソースをパック、アンパック、および置換できるnode.jsスクリプトである node-chrome-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

探しているアイコンを特定したら、それらを変更および置換することができます。必要に応じて、この目的で作成したアイコンを使用できます。

ソースファイルとエクスポートされた異なる解像度の.pngsは、 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ファイルに実際に存在することを確認した場合でも(再度解凍することにより)、システムトレイの実際のアイコンを置き換えることができませんでした。

残念ながら、これがなぜなのかわかりません。

8
Glutanimate