質問: 質問下部に添付したファイルを Windows8.1 の 「Windowsフォトビューアー」 で開くと 「この画像をWindows フォトビューアーで表示できません。利用できる十分なメモリがない可能性があります。」 というエラーになります。 しかし、スライドショー、ペイント、Chromeブラウザなどでファイルを開けば画像として正しく表示されます。 Windows フォトビューアーで開いたときだけ画像が表示されません。 ICC_PROFILEというのが関係していることまでは原因を特定。 Hex Editorで画像を開き、ICC_PROFILEの部分をICC_PROFILAやICC_PROFILXなどに書き換えてやると、Windowsフォトビューアーでも画像が開けるようになりました。 ここで質問です。 **・jpgには、ICC_PROFILEを含むjpgと、ICC_PROFILEを含まないjpgがある (ICC_PROFILEというのはメタデータで、jpgファイルに必須のものではない) という認識で合っているでしょうか?** **・javascriptでjpgファイルからICC_PROFILEを消すにはどうすればよいでしょうか?** もともとのjpgファイルは、Node.jsのpuppeteerでブラウザのscreenshotを保存したものです。 ・puppeteerでscreenshotを作成するときにICC_PROFILEを含まないjpgとして保存する もしくは ・puppeteerでscreenshotを作成した時点ではICC_PROFILEありで、それをjavascript上でICC_PROFILEなしのjpgに変換する ということを実現したいです。 ![画像の説明をここに入力](https://i.stack.imgur.com/WYYbY.jpg)
回答: * **jpgには、ICC_PROFILEを含むjpgと、ICC_PROFILEを含まないjpgがある(ICC_PROFILEというのはメタデータで、jpgファイルに必須のものではない)という認識で合っているでしょうか?** 認識は合っているでしょう。こんな記事があります。 4.2 Color profile - JPEG - Wikipedia > > Many JPEG files embed an ICC color profile (color space). Commonly used color profiles include sRGB and Adobe RGB. > > > 「多くの」JPEGファイルには、となっているので必須では無いでしょう。 カラースペースの変換と一般的なマーカー - JPEG メタデータ形式の仕様および使用上の注意 > > オプションの ColorSpace のサポート: > > > ColorSpaceはオプションと書かれています。 RGB のデフォルト - JPEG と ICC プロファイル > > Web の世界では sRGB が標準です。 > > ICC プロファイルが入っていない JPEG 画像は sRGB として暗黙的に解釈します。(少なくとも Safari では) > > > ICC プロファイルが入っていないものもあると示されています。 * **javascriptでjpgファイルからICC_PROFILEを消すにはどうすればよいでしょうか?** 出来るかどうか不明ですが、例えばこちらの記事で説明されているChromeブラウザの`Force color profile`を切り替えて試してみてはどうでしょう? |ロlll)ウェブブラウザーで画像がキレイに表示されない→解決 d(・_| 関連/影響があるかどうかわかりませんが、その近くに`Forced Colors`というのもあるようです。 Chromeの色がおかしくなった!色が薄い...。 存在するデータを変換したり消去したりするよりも、サポートしているツールに切り替えた方が良いのでは? WindowsのフォトビューアーはICCプロファイルv4に未対応...Honeyviewを導入 Honeyview > > ライセンス: フリーウェア(アドウェア/スパイウェア/ウイルスなし), EULA > > > こちらはWindows10で表示は出来るものの、色が違う際の対処らしいです。 Windows10のフォトビューワーの色がおかしいよ こちらは古くて解決していないですが、同様の質問記事です。 ICCプロファイルを含むJPEGを、含まないJPEGに変換したい どうしても削除したい場合は、exiftool で出来るかもしれません。 こちらは承認されていませんが。 How do i remove embedded color profile from jpg image? オプション1つでは駄目で組み合わせが必要なようです。 ただしこれで解決した印もありませんが。 Topic: How to remove ICC Profile -icc_profile:all= does not seem to work (Read 8517 times) > > It seems that if there is no actual profile embedded PS interprets the Colorspace property and treats the image as if there were an embedded profile. > > So I need to remove the Colorspace property, too. Adding "-all:Colorspace=" to what I'm doing solves my problem. > > > JavaScriptから何かするには、こんなツールがあるようなので、使えるかもしれません。 node-exiftool > > A Node.js interface to the exiftool command-line application. > > > 逆にこちらは color profile 以外のメタデータを削除したい質問ですが、color profileを削除すると色が変わるからのようです。 How can I strip tags from a JPEG without removing the color profile? 後から付いた回答で、単純に削除するのはお勧めしない、管理ソフトを使って正しいフォーマットに変換した方が良いと書かれています。 そしてこちらの記事では、ICC_PROFILEのデータは多くの場所に組み込まれているので、それを整合性を保って取り除くのは大変らしく書いてあるようです。 JPG - how to read / extract data from ICC profile section APP2