![Windows 照片查看器因内存不足而无法运行?](https://linux22.com/image/1611625/Windows%20%E7%85%A7%E7%89%87%E6%9F%A5%E7%9C%8B%E5%99%A8%E5%9B%A0%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3%E8%80%8C%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
刚刚收到一个奇怪的错误。我通过电子邮件收到了一张图片,在 Outlook(Office 365 版本)中打开了该电子邮件,然后双击图片将其打开。我收到此错误:
“Windows 照片查看器无法显示此图片,因为您的计算机可能没有足够的内存。请关闭一些不使用的程序或释放一些硬盘空间(如果快满了),然后重试。”
几点:
- 我一直使用这台笔记本电脑上的照片查看器,之前没有遇到过问题。我重新启动并尝试再次打开图片,但没有成功。
- 图像没有损坏。我保存到桌面,尝试打开,同样的问题。我用 Photoshop 打开,效果很好。我将其从 PSD 保存为新的 JPG。新的 JPG 也显示相同的消息。
- 我尝试打开的任何图像都会导致此错误。
- 该图像大小为 200KB,分辨率为 1428x2000。
- 我的笔记本电脑有 32GB 的 RAM,根据任务管理器显示,目前使用了 8GB。
我尝试过的:
- 这不起作用,因为当我进入色彩管理时,我没有设置配置文件,所以我无法删除。
我看过这个帖子:Windows 照片查看器需要更多内存吗?
- 我有 2 个内置显卡:标准 Intel(R) HD Graphics 530 和 Nvidia Quadro M1000M。我尝试了帖子中的分辨率(将其移动到由不同显卡驱动的不同显示器),但没有任何变化。
磁盘清理。本来就有足够的剩余空间,但什么都没改变。
规格:我在联想 P50 笔记本电脑上运行 Windows 10 v1909 Build 18363.535,配备 32GB 内存、500GB 存储空间(目前可用 192GB)、Intel Core i7-6700HQ。
如果有人能帮助解决这个问题,我将不胜感激。新的 Microsoft Photos 应用程序实在太糟糕了,我会不惜一切代价避免使用它。
答案1
我之所以遇到这个问题,是因为我从 Android 导出照片时也遇到了类似的问题发送折扣免费应用。
就我的情况而言,这个问题与以下方面有关:简介-icc在那个 JPG 文件中。
Profiles:
Profile-icc: 536 bytes
可以通过以下方式验证ImageMagick 识别-详细命令。
这可能不是直接从 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
也可能使用相对路径,例如-路径输出目录如果您希望它们位于子文件夹中。
如果您必须直接从 Outlook 打开该文件,我建议您使用 IrfanView,它打开该文件没有问题。只需将其设置为默认图形文件程序即可。
有些人建议做一些与更改屏幕配置中的默认配置文件有关的事情,但我已将其设置为我的显示器类型,所以我不想弄乱这些设置。
如果你想要全自动,你需要 3 样东西:
- 默认程序编辑器(https://defaultprogramseditor.com/)
- ImageMagick(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:\应用程序\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 照片查看器不喜欢Bitmap.compress
写入的 ICC 配置文件元数据(也许它不喜欢任何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();
}
}