这个问题由来已久,其实在很早之前就发现这个问题了。但是一直也没想到怎么解决这个问题,昨天晚上查看图片的时候,这个问题又出现了。比较奇怪的是把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)。
28 comments
检查指定文件夹内的所有文件,识别出图片文件后,使用文件的MD5值和图片的实际格式来重命名这些文件,保证文件名与其内容相匹配。👍
差不多就是这个意思~~嘻嘻
厉害啊
雕虫小技而已啦
不明觉厉
找到问题,解决就简单了
佩服姐姐高超水平
雕虫小技而已啦,主要是警察呢遇到就有点恶心,就想着给解决了
win11好多反人类改动,要折腾的
这个按照文件扩展名识别文件,在某些条件下就成了bug。
我昨晚在网上下个图片 webp 格式,结果 Photoshop 都识别不了,我还转了个格式。不过 Windows 是可以查看的
ps 最新的吗?新版的应该是可以识别的。
2022版,我重新找个新版的试试。
人生苦短,我用mac
mac 也有 mac 的问题,😂
早上是我的问题吗,我进不来了,下午又好了
不是的,上午被打了,一直没开战,另外的域名 oba.by 可以正常访问。
增加了几套线路,😂
阿哲😥😥有什么损失吗?我上个月刚建站六七天就被打了,给我流量都干欠费了😭😭😭
损失就是流量费啊~~
import 的换行看得我强迫症都快犯了,哈哈哈̋(๑˃́ꇴ˂̀๑)
哈哈哈,这个还好吧,专门治疗强迫症
有事做了,,,播放器不能全屏,修一修
但是,这个播放器不是我写的啊~~
可惜不是灵妹妹
是个windows11更新bug吗
也不是,是我下载的图片的问题。扩展名不对,webp 给存成 jpg 了
雕虫小技而已啦哈哈哈哈哈。不过会去看文件头,就确实很像程序员的思维。
是哒