Windows11 Photos无法打开jpg图片

这个问题由来已久,其实在很早之前就发现这个问题了。但是一直也没想到怎么解决这个问题,昨天晚上查看图片的时候,这个问题又出现了。比较奇怪的是把jpg改成jpeg就能正常显示了,但是实际上这两个文件格式是一样的,就是扩展名不同而已。

具体的表现就是下面的样子:

点击图片打开之后,窗口无法正常拖拽,全屏之后无法重新渲染,并且有的图片打开之后非常模糊。

昨天晚上还在考虑是不是跟分辨率或者缩放有关系。

今天搜索了以下,发现这个问题貌似是个通病:https://cn.bing.com/search?q=windows+11+photos+open+jpg&form=QBLHCN&sp=-1&lq=0&pq=windows+11+photos+open+jpg&sc=10-26&qs=n&sk=&cvid=64CC0D0560E047778DF11DB09CB7BFBC&ghsh=0&ghacc=0&ghpl=

搜索之后发现了另外一个问题,就是网上竟然有各种jpg图片的修复工具,按照我浅薄的理解,这个图片修复如果是数据有问题,那么所有的图片查看工具应该都会失败,或者打开不开,但是使用picasa这种工具是完全可以正常浏览的,那么问题来了,这种工具修复的是什么?

发现了这一点之后,我依然怀疑图片本身是没问题的,那么出问题的还是photos,对于图片的解析有问题,很有可能虽然扩展名是jpg,但是实际上格式不是jpg,而改成jpeg,正好photo的文件解析阴差阳错的给处理对了。

下面就是证实想法的时候了,打开图片发现,文件头为webpv8:

正常的jpg:

webp文件头:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      'R'      |      'I'      |      'F'      |      'F'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           File Size                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      'W'      |      'E'      |      'B'      |      'P'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

知道问题的原因,那么要解决也就简单了。批量将文件的扩展名改成正确的就ok了。

直接通过python + pillow来实现是最简单的,直接上代码吧:

import pathlib

from PIL import Image
import os
from pathlib import Path
import hashlib
import shutil
from pyfiglet import Figlet

source_file_paths = [
    Path(r'E:\Pycharm_Projects\image_extened_name_tool\test_images'),
]

def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.

def print_hack():
    print('*' * 100)
    # f = Figlet(font='slant')
    f = Figlet()
    print(f.renderText('obaby@mars'))
    print('图片格式探测重命名工具 V1.0')
    print('Verson: 24.04.22')
    print('Blog: http://www.h4ck.org.cn')
    print('      http://nai.dog')
    print('*' * 100)


def get_image_format(file_path):
    image = Image.open(file_path)
    # 返回大写的图片格式
    return image.format.lower()

def rename_images_in_dir(p):
    global done_paths
    print('=' * 200)
    print('[M] 开始处理目录' + p.name + ' ......')
    for dir in p.iterdir():
        if dir.is_dir():
            for img in dir.glob('*.*'):
                ext = get_image_format(img)
                if img.suffix != '.'+ ext :
                    # image_name = img.name
                    # shutil.delete(img)
                    old_name = img.name
                    try:
                        img.rename(img.with_suffix('.'+ ext ))
                    except :
                        pass
                    print('[*]' + old_name + ' 修改为:'  + img.with_suffix('.'+ ext ).name )

            print('[*]' + dir.name + ' 目录处理完成')
            print('-' * 200)
        else:
            ext = get_image_format(dir)
            if dir.suffix != '.' + ext:
                # image_name = img.name
                # shutil.delete(img)
                old_name = dir.name
                try:
                    dir.rename(dir.with_suffix('.'+ ext ))
                except Exception as e:
                    # pass
                    print(e)
                print('[*]' + old_name + ' 修改为:' + dir.with_suffix('.'+ ext ).name)


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    print_hack()
    # print_hi('PyCharm')
    # ext = get_image_format(r'F:\秀人集\[XiuRen秀人网]No.8319_模特合集女神豆瓣酱私房性感姐妹花灰色蕾丝内衣完美诱惑写真81P\0b6350db47878a9c3a0e2b4a9370d099.jpg')
    # ext = get_image_format(r'F:\xrmnw\[LeYuan星乐园]Vol.015_美女主播酸酱兔吊带背心秀美胸黑色蕾丝内裤诱惑写真47P\1a82e08cf99610433c061273f855d8db.jpg')
    # print(ext)
    print('*' * 100)
    print('[S] 开始处理图片:')
    for p in source_file_paths:
        rename_images_in_dir(p)

    print('[D] 所有目录完成清理。请欣赏图片吧。')
    print('*' * 100)

批量处理之后,photos就可以正常工作啦,妈妈再也不用担心这个破玩意儿卡死啦(粗略猜测网上的各种修复工具可能也是类似的原理,这个东西包装一层效果就不一样了,当然也可能是直接把webp又给转成了jpg)。

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://h4ck.org.cn/
* 个性:https://oba.by/
* 本文标题: 《Windows11 Photos无法打开jpg图片》
* 本文链接:https://h4ck.org.cn/2024/04/16696
* 短链接:https://oba.by/?p=16696
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

28 comments

  1.  Level 4
    Safari 17 Safari 17 Mac OS X 10.15 Mac OS X 10.15 cnAsia/Shanghai

    检查指定文件夹内的所有文件,识别出图片文件后,使用文件的MD5值和图片的实际格式来重命名这些文件,保证文件名与其内容相匹配。👍

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省济南市 移动

      雕虫小技而已啦,主要是警察呢遇到就有点恶心,就想着给解决了

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省济南市 移动

      这个按照文件扩展名识别文件,在某些条件下就成了bug。

  2. Level 5
    Safari 17 Safari 17 iPhone iOS 17.4.1 iPhone iOS 17.4.1 cnAsia/Shanghai

    我昨晚在网上下个图片 webp 格式,结果 Photoshop 都识别不了,我还转了个格式。不过 Windows 是可以查看的

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      不是的,上午被打了,一直没开战,另外的域名 oba.by 可以正常访问。
      增加了几套线路,😂

      1. Level 4
        MIUI Browser 17 MIUI Browser 17 Motorola Motorola cn湖北省武汉市 联通

        阿哲😥😥有什么损失吗?我上个月刚建站六七天就被打了,给我流量都干欠费了😭😭😭

  3. Level 3
    Google Chrome 124 Google Chrome 124 Mac OS X 10.15 Mac OS X 10.15 cn湖北省武汉市 电信

    import 的换行看得我强迫症都快犯了,哈哈哈̋(๑˃́ꇴ˂̀๑)

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      也不是,是我下载的图片的问题。扩展名不对,webp 给存成 jpg 了

  4. Level 4
    Microsoft Edge 124 Microsoft Edge 124 Windows 10 Windows 10 cn重庆市 移动

    雕虫小技而已啦哈哈哈哈哈。不过会去看文件头,就确实很像程序员的思维。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注