奇妙なエラーが発生しました。メールで画像が送られてきて、Outlook (Office 365 バージョン) でメールを開き、画像をダブルクリックして開きました。次のエラーが発生しました:
「コンピュータのメモリが不足しているため、Windows フォト ビューアーでこの画像を表示できません。使用していないプログラムを閉じるか、ハード ディスクの空き容量を増やして (空き容量がほとんどない場合)、もう一度お試しください。」
いくつかのポイント:
- これまでこのノートパソコンでフォトビューアーを常に使用してきましたが、これまで問題は発生しませんでした。再起動して画像をもう一度開こうとしましたが、うまくいきませんでした。
- 画像は破損していません。デスクトップに保存して開こうとしましたが、同じ問題が発生しました。Photoshop で開くと、問題なく動作しました。PSD から新しい JPG として保存しました。新しい JPG でも同じメッセージが表示されます。
- どの画像を開こうとしても、このエラーが発生します。
- 画像のサイズは 200KB、解像度は 1428x2000 です。
- 私のラップトップには 32GB の RAM があり、タスク マネージャーによると現在そのうち 8GB を使用しています。
私が試したこと:
Microsoft からのこの投稿:https://social.technet.microsoft.com/Forums/windows/en-US/7b6ae08b-4b5c-443b-9d43-e87ca5e7aeb1/wndows-photo-viewer-operation?forum=w7itproappcompat
- これは機能しませんでした。カラー管理に進むと、プロファイルが設定されていないため、削除できないからです。
私はこの投稿を見ました:Windows フォト ビューアーにはさらに多くの RAM が必要ですか?
- 私には、標準の Intel(R) HD Graphics 530 と Nvidia Quadro M1000M の 2 つのビデオ カードが内蔵されています。投稿にある解像度を試してみましたが (別のビデオ カードを搭載した別のモニターに移動)、何も変わりませんでした。
ディスクをクリーンアップしました。とにかく十分な空き領域がありましたが、何も変わりませんでした。
仕様: 32GB のメモリ、500GB のストレージ (現在 192GB の空き容量)、Intel Core i7-6700HQ を搭載した Lenovo P50 ラップトップで Windows 10 v1909 Build 18363.535 を実行しています。
どなたかこの問題を解決するのを手伝っていただけるとありがたいです。新しい Microsoft フォト アプリは本当にひどいので、どんなことがあっても使用しないようにします。
答え1
Androidからエクスポートした写真でも同様の問題があったので、この問題に気づきました。割引価格で無料送信応用。
私の場合、この問題は含まれているプロフィール-iccその JPG ファイル内にあります。
Profiles:
Profile-icc: 536 bytes
それは次のように確認できますImageMagick 識別 -verbose指示。
これは Outlook から直接開くための解決策ではないかもしれませんが、ソース内のファイルを修正することはできます。
走っているとBADFILE.jpg を変換し、GOODFILE.jpg を削除します。そのファイルに対してコマンドを実行すると、Windows 7 フォト ビューアーで問題なく開きます。
-strip - strip image of all profiles and comments
このツール全体はここから入手できます:https://imagemagick.org/script/download.php
したがって、すべての画像に再度アクセスできるようにするには、バッチを実行するだけです。
mogrify.exe -format jpg -verbose -path C:\OUTPUT_DIR -strip *.jpg
相対パスも使用できます。-path 出力ディレクトリサブフォルダーに保存したい場合。
Outlook から直接ファイルを開く必要がある場合は、たとえば IrfanView をお勧めします。IrfanView では問題なくファイルを開くことができます。これを既定のグラフィック ファイル プログラムとして設定するだけです。
画面構成のデフォルト プロファイルを変更することに関連するアドバイスをしてくれた人もいますが、私はモニターの種類に設定しているので、その設定を変更したくありません。
これを完全に自動化したい場合は、次の 3 つが必要です。
- デフォルトプログラムエディタ (https://defaultprogramseditor.com/)
- イメージマジック(https://imagemagick.org/download/binaries/ImageMagick-7.0.10-1-portable-Q16-x64.zip)
- 開いたファイルを処理するバッチ スクリプト。
1) まず、ImageMagickをc:\apps\ImageMagick-7.0.10-1-portable-Q16-x64に解凍します。
2) バッチスクリプトを作成するc:\apps\gfxopen.bat:
@echo off
C:\Apps\ImageMagick-7.0.10-1-portable-Q16-x64\convert.exe %1 -strip c:\temp\temp12345file.jpg
rundll32 "C:\Program Files\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen c:\temp\temp12345file.jpg
del c:\temp\temp12345file.jpg
3) ストレスを解消するデフォルトプログラムエディター実行して、ファイル タイプ設定 > コンテキスト メニュー > jpg 拡張子を見つけて > 追加...
コマンド名:Open Fixed Image
プログラムパス:"C:\apps\gfxopen.bat" "%1"
次に選択「固定画像を開く」を押して「選択したコマンドをデフォルトとして設定」
それから保存コンテキストメニュー
それだけです :)
答え2
答え3
答え4
Android開発者の皆さん、このことに気付いた方は、WindowsフォトビューアーがICCプロファイルメタデータを好まないようですBitmap.compress
(おそらく、どれでも実際 ICC プロファイルですか? 確認していません。
以下に、JPEG ファイルからメタデータ セグメントを簡単に削除する方法を示します。これにより、Windows フォト ビューアーと再び互換性のある JPEG が生成されます。
// Some image viewer applications (such as Windows Photo Viewer) doesn't seem to like the ICC profile meta data that Android's Bitmap.compress writes.
// This decorator removes the section.
private static class RemoveFFE2OutputStreamDecorator extends OutputStream {
OutputStream underlyingStream;
boolean marker = false;
boolean skipSegment = false;
public RemoveFFE2OutputStreamDecorator(OutputStream underlyingStream) {
this.underlyingStream = underlyingStream;
}
@Override
public void write(int b) throws IOException {
// Based on https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure
if (this.marker) {
this.marker = false;
if ((b & 0xFF) == 0xE2) { // The 0xFF,0xE2 segment that Android writes seems to cause trouble with Windows Photo Viewer.
this.skipSegment = true;
} else {
this.skipSegment = false;
this.underlyingStream.write(0xFF);
this.underlyingStream.write(b);
}
} else if ((b & 0xFF) == 0xFF) {
this.marker = true;
} else if (!this.skipSegment) {
this.underlyingStream.write(b);
}
}
@Override
public void flush() throws IOException {
this.underlyingStream.flush();
}
@Override
public void close() throws IOException {
this.underlyingStream.close();
}
}