私はAppleで働いておらず、内部情報も持っていませんが、私はいろいろと調べて、いくつかの理論を持っています。ターミナルを使用している場合は、Xcode.appにcdして、そこにpngcrushを見つけることができます。
$検索。-name pngcrush ./Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush
次に実行する場合:
./pngcrush -?
あなたはいくつかの興味深い一口を見つけます:
| LLVM4.2.1互換のAppleClang4.0(tags / Apple / clang-420.0.12)でコンパイルされ、ソースに示されているようにAppleによって変更されました。
と
-iphone(iPhone OS用に最適化)
バンドル内で元の(以前に自分で粉砕したものよりもはるかに大きい)いくつかの大きなpngも見たので、Xcodeがpngcrushをどのように使用するかを確認したいと思いました。私は古いUNIXのトリックを使用しました:
- pngcrushをxpngcrushに移動します
- 同じ引数リストでpngcrushを呼び出す新しい実行可能シェルファイルを作成します
- 引数を/tmpのテキストファイルに記録します
私が見つけたのは、Appleがpngcrushを次のように呼んでいることでした。
pngcrush -q -iphone oldFile newFile
このことから、このpngrushのApple固有の機能は、iOS用に画像を調整するために特別に設計されたものであると推測できます。私は仕立て屋と言いますが、つぶすのではありません。
Appleは、スペースを最大限に節約するために、pngが可能な限り最小のファイルであるかどうかを本当に気にしますか?私は主張しますが、実際にはそうではありません-デバイスにはかなり大きなファイルストレージスペースがあります。あなたのアプリが本当に速くダウンロードされるかどうか、彼らは本当に気にしますか?繰り返しになりますが、ユーザーは時間がアプリのサイズに関連していると想定し、それは開発者の管理下にあるため、実際には議論しません。
ただし、ユーザーがAppleに責任を負わせるのは、起動速度です。最初のタップからアプリが何かを開始するまで-人々はそれがデバイスのすべての速度であると信じるでしょう(私たちの開発者はそれが厳密には真実ではないことを知っています)。新しいiPad3では、いくつかの起動画像が非常に大きくなっているので、それらをできるだけ速くロードするために何ができるでしょうか。
その質問に対する答えはわかりませんが、Appleが元の画像を解凍してから、デバイスへの読み込みをできるだけ速くする設定で再圧縮することは想像できます。
PS:
1)クラッシュオプションを無効にしたところ、Xcode4.5が変更なしでpngファイルをコピーしているのが観察されました。
2)アプリのサイズを小さくするために、1つでも高品質の設定でJPEGを使用してみましたか?このような画像は非常に見栄えがよく、はるかに小さくなります。私のアプリの実質的にすべての画像はJPEGです。プレビューを試して変換を行うことができます。
編集:これにはエレガントな解決策があるかもしれないと私は思いました。つまり、非常に重要な画像(できるだけ速く表示したい画像)の場合は、「-iphone」フラグを指定してpngcrushを使用します。その他の場合は、より標準的なpngcrushオプションを使用します。
これを行う1つの方法は、新しい画像ディレクトリを作成し、すべてのpngを実際のクラッシャーまたはtje'-iphone'フラグで前処理するシェルファイルを作成し、出力を元の画像フォルダー(Xcodeが取得できる場所)に配置することです。 )。次に、自動の「PNGファイルのクラッシュ」オプションをオフにします。
EDIT2:私はbugreporter.apple.comにバグを入力し、Xcode listservに投稿しました-このブックマークに興味がある場合は、質問を更新して戻ってきてください。
EDIT3:誰かが私にAppleの「-iphone」オプションImageOptimの方法と理由をより詳細に説明するリンクをくれました
EDIT4:Appleは私のバグレポートに応答し、iOSでの処理を容易にするために画像を変更することを確認しました。これにより、意図的に画像が大きくなる可能性があります。