次の方法で共有


Windows 秘話: 拒否される JPG の謎

ファイル拡張子を間違えると、特に別の場所に問題があると思っている場合に、たくさんの問題を引き起こすことになります。

Raymond Chen

ある顧客から、グループ ポリシーを使用して、すべての従業員に会社で定めた標準の壁紙を展開しようとしても、適切に機能しないという報告を受けました。この壁紙には、corp.jpg という名前が付けられており、Joint Photographic Experts Group (通称 JPEG) で作成された形式のものだということがわかりました。

この顧客の担当者が行った、いくつかの検証作業によると、会社の標準の壁紙イメージの代わりに別の JPEG イメージを使用すると、新しいイメージは問題なく展開されることがわかりました。このトラブルシューティング手順により、問題の原因は大幅に絞り込まれました。グループ ポリシー オブジェクトの展開方法や JPEG 形式の壁紙全般にかかわる問題でないことは間違いありません。また、顧客が、誤って "ビットマップ形式の壁紙のみ有効にする" ポリシーを設定したわけでもありませんでした。この特定の JPEG イメージになんらかの問題があったのです。このイメージは何かに取り付かれていたのでしょうか。

顧客の担当者からは、「この 2 つの JPEG イメージのプロパティを比較すると、色の解像度が異なることに気付きました」という報告がありました。「適切に展開できなかった顧客の壁紙イメージの色の解像度は 8 ビットです。検証に使用した JPEG の色の解像度は 24 ビットです。これはバグですか。それとも設計上の理由によるものですか。Windows で 8 ビットの JPEG をサポートしていないのであれば、この情報は、どこかに記載されていますか」と続けました。

実際のところ、Windows 7 は、JPEG 形式の壁紙に対応しています。ファイル サイズには制限があり、現在は 20 MB に設定されています。これよりサイズが大きなファイルは、完全に拒否されます。この制限はサニティ チェックなので、誤って (または故意に) 壁紙に数ギガバイトのサイズのファイルを設定しないでください。このようなファイルを設定すると、Windows ではファイルをデコードする必要があるので、パフォーマンスが低下します。それでは、顧客が使用していたイメージが大きすぎたのでしょうか。Windows の JPEG デコーダーで、イメージが有効でないと判断されるような問題がファイル自体にあったのでしょうか。

CSI: Windows 捜査班

より詳細な調査を行うため、容疑が掛けられているイメージを製品チームに提供することを、顧客に同意してもらいました。ファイルのサイズは 48 KB しかなかったので、20 MB の制限が原因ではありませんでした。そこで、調査の次の段階として、JPEG デコーダー チームに、イメージ ファイルを分析し、Windows で拒否された理由を特定するように依頼しました。

イメージが微妙に破損していたり、わずかに仕様から外れていたりしたのかもしれません。Windows の JPEG デコーダーでサポートされていない JPEG の機能が使用されていたのかもしれません。単純に Windows の JPEG デコーダー自体に問題があって、この特定のイメージが拒否された可能性もあります。

結果的に、シェル チームは、JPEG デコーダー チームに調査を依頼する必要はありませんでした。イメージ ファイルを見てみると、答えは簡単にわかりました。注意深い読者の方は、顧客から 8 ビットの JPEG を使用したと報告があった時点で、問題の原因に気付いていたかもしれませんが、8 ビットの JPEG イメージなどというものは存在しません。JPEG イメージは必ず 24 ビット イメージになります。

顧客が使用していたのは、実際には JPEG イメージではありませんでした。それは、拡張子を JPEG に変更した、GIF ファイルでした (GIF とは、グラフィックス インターチェンジ形式 (Graphics Interchange Format) の省略形で、別のビットマップ イメージ形式です)。そのため、Windows の JPEG デコーダーでイメージが拒否されました。イメージが JPEG ではなかったからです。

これで、顧客への指示は簡単なものになりました。GIF ファイルを、BMP 形式または本物の JPEG 形式に変換する必要がありました。Windows 7 の壁紙では、この 2 つのイメージ形式がサポートされています。ファイルを変換するときには、適切なファイル拡張子を指定する必要がありました。

以上のことから、JPEG イメージで問題が発生したときは、まず、そのイメージが本当に JPEG イメージであることを確認しておくと役立ちます。

Raymond Chen

Raymond Chen は自分の Web サイト「The Old New Thing」および同じタイトルの書籍 (Addison-Wesley、2007 年) で、Windows の歴史、Win32 プログラミング、そして 9,925-BTU というカセット コンロについて扱っています。

 

関連コンテンツ