python--检查图片是否损坏、图片后缀是否与实际图片类型对应

如何判断图片是否损坏 但有时候我们可能会遇到损坏的图像文件,这些文件可能无法正确地加载和处理。在本文中,我将介绍如何使用Python来判断图像是否损坏,并提供相应的源代码。总结一下,使用Python的Pillow库可以方便地判断图像文件是否损坏。通过打开并验证图像文件,我们可以捕获可能的异常并判断图像文件的完整性。Pillow是一个强大的图像处理库,可以用于打开、编辑和保存各种图像格式的文件。如果该图像文件损坏,将打印"图像文件损坏";类,它是Pillow库的一部分,用于处理图像。的函数,它接受一个图像文件的路径作为输入。 阅读详情

检查图片是否损坏

日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;

测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:
在这里插入图片描述
脚本运行结果:
在这里插入图片描述
代码如下:

# 从本地判断图片是否损坏
    def is_valid_image(path):
        '''
        检查文件是否损坏
        '''
        try:
            bValid = True
            fileObj = open(path, 'rb')  # 以二进制形式打开
            buf = fileObj.read()
            if not buf.startswith(b'\xff\xd8'):  # 是否以\xff\xd8开头
                bValid = False
            elif buf[6:10] in (b'JFIF', b'Exif'):  # “JFIF”的ASCII码
                if not buf.rstrip(b'\0\r\n').endswith(b'\xff\xd9'):  # 是否以\xff\xd9结尾
                    bValid = False
            else:
                try:
                    Image.open(fileObj).verify()
                except Exception as e:
                    bValid = False
                    print(e)
        except Exception as e:
            return False
        return bValid
        
    flag1=is_valid_image(r'valid/0.jpg')
    print(flag1)
    flag1=is_valid_image(r'valid/broke.jpg')
    print(flag1)
    print ''

通过该脚本可以自动的对图片进行校验,后续是直接删除还是将正常、损坏分开就交给大家发挥啦;

图片后缀与实际类型匹配检验

我相信很多同学都有和我一样的习惯,在jpg不满足要求是,手动改为png,实际上大多数情况下,这种方式是可行的,但是在类型为gif等时,是无法直接打开的,这个需求的来源是我通过itchat做的自动微信内容备份工具

在下载聊天中的图片时,经常会下载到gif但是实际为jpg或者png的情况,这就导致这些图片无法直接展示,且需要手动改回实际类型,因此有了下面这个脚本;

类型校验转换前:
在这里插入图片描述
校验log:
在这里插入图片描述
校验及转换结果:
在这里插入图片描述
代码如下:

def is_type_wrong(path):
        '''
        检查文件后缀是否与实际对应,例如实际是jpg,后缀是gif,导致打不开
        '''
        print path
        real_type = path[path.rfind('.')+1:]
        print real_type
        if path.lower().endswith('.gif') or path.lower().endswith('.jpg') or path.lower().endswith('.png'):
            header = []
            with open(path, 'rb') as f:
                while(len(header)<5):
                    header.append(f.read(1))
            print header
            tmp = real_type
            if (header[0] == '\x47' and header[1] and '\x49' and header[2] == '\x46' and header[3] == '\x38'):
                tmp = 'gif'
            if (header[0] == '\xff' and header[1] == '\xd8'):
                tmp = 'jpg'
            if (header[0] == '\x89' and header[1] == '\x50' and header[2] == '\x4e' and header[3] == '\x47' and header[4] == '\x0D'):
                tmp = 'png'
            print tmp
            if real_type != tmp:
                return True,tmp
        return False,real_type

    if __name__ == '__main__':
        is_wrong,real_type=is_type_wrong('type/1.gif')
        if is_wrong:
            os.system('cp type/1.gif type/1.'+real_type)
        is_wrong,real_type=is_type_wrong('type/2.gif')
        if is_wrong:
            os.system('cp type/2.gif type/2.'+real_type)
        is_wrong,real_type=is_type_wrong('type/3.gif')
        if is_wrong:
            os.system('cp type/3.gif type/3.'+real_type)
        is_wrong,real_type=is_type_wrong('type/4.gif')
        if is_wrong:
            os.system('cp type/4.gif type/4.'+real_type)

通过该脚本,可以自动的对图片的后缀以及其实际类型进行校验,配合linux的cp、mv等命令很容易的实现图片类型修正的功能,还是挺有用的感觉;

小结

实际上这两个脚本的运行都是依赖于图片文件自身具备的格式,对其固定格式进行检查,实现完整性、正确性的检验,大家也可以尝试这进行手动的修改类型,比如jpg改为png,手动损坏一个图片文件,比如直接txt打开后删掉一段即可来试试看哈

python之如何判断图片是否损坏 使用PIL库即可,再根据异常处理来判断。 阅读详情

相关推荐

python校验图片是否损坏【完全损坏或部分像素缺失】

图片数据训练时如果遇到图片损坏的情况可能会导致训练终止,可以加入这个方法进行处理检查图片是否损坏:损坏返回True, 没坏返回False:param img_path: 图片路径:return:''' break_flag = False # 判断图片是否完全损坏 if not imghdr . what(img_path) : # raise Exception(123) print(f'图片完全损坏: {

什么都干的派森 2107

判断图片哪些损坏了 查找图片损坏的软件

快速检测大量图片中的损坏文件,只需将整个图片文件夹拖入指定区域,系统会自动扫描并识别所有无法打开的损坏图片,避免人工逐张检查的繁琐操作。该工具专门用于批量查找损坏图片,解决用户处理海量图片时遇到的图片损坏问题。

vfvfb_csdn_我的地盘 200

python实现加jpg后缀

python实现加jpg后缀,简单实现,python3.0

用Python实现检查图片是否可用

在图像处理和计算机视觉应用中,检查图片是否可用是进行后续图像处理之前的一个重要前置任务。本文将介绍如何使用Python和OpenCV库进行图片检查,以验证图片的完整性和质量。导入所需的库并定义一个函数,用于执行图片检查。import os import cv2 def check_image(image_path) : # 检查图片文件是否存在 if not os . path . exists(image_path) : print(f"图片文件不存在: {

搬砖屋 3769

Python检查图片是否损坏及图片类型是否正确过程详解

检查图片是否损坏 日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本; 测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的: 脚本运行结果: 代码如下: def is_valid_image(path): ''' 检查文件是否损坏 ''' try: bValid = True fileObj = open(path, 'rb') # 以二进制形式打开 buf = fileObj.read()

OpenClaw 接入智谱 GLM-5-Turbo 龙虾套餐:完整避坑指南与 SOP

OpenClaw 接入智谱 GLM-5-Turbo 的核心在于“端点匹配”和“多渠道验证”。端点匹配:龙虾套餐必须用标准端点。多渠道验证:遇到 TUI 不显示时,用curl或飞书机器人验证,不要被 Bug 误导。希望这份 SOP 能帮你顺利跑通 OpenClaw + GLM-5-Turbo,享受强大的 AI 编程助手!

Aaron_liu20的博客 1705

检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python

图片工具 检查图片是否损坏 日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本; 测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的: 脚本运行结果: 代码如下: # 从本地判断图片是否损坏 def is_valid_image(path): ''' 检查文件是否损坏 ...

HoLoong 238

WPF 解决listview值更改时页面没有刷新

WPF 解决listview值更改时页面没有刷新。

weixin_52475977的博客 1386

python 判断图片是否损坏_检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python...

图片工具检查图片是否损坏日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:脚本运行结果:代码如下:# 从本地判断图片是否损坏def is_valid_image(path):'''检查文件是否损坏'''try:bValid = Tr...

weixin_40003780的博客 310

FPGA实战:用Verilog实现Costas环载波同步(附Vivado2019.2仿真步骤)

本文详细介绍了如何在FPGA上使用Verilog实现Costas环载波同步,包括核心原理、Vivado2019.2工程配置、代码实现及仿真验证。通过正交下变频、相位误差检测和环路滤波等关键模块的设计,帮助开发者掌握数字通信系统中的载波同步技术,并提供了实用的调试和优化技巧。

k0l1m2n3o的博客 136

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤。

wyxtx的博客 5666

python判断图片是否损坏和真实类型_检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python...

图片工具检查图片是否损坏日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的: 脚本运行结果: 代码如下:# 从本地判断图片是否损坏def is_valid_image(path):'''检查文件是否损坏'''try:bValid = ...

weixin_39680208的博客 501

【施磊】C++课程笔记目录

【C++编程】施磊老师C++笔记目录

GeniusAng的博客 4126

判断文件是否损坏_Python检查图片是否损坏、图片后缀是否与实际图片类型对应...

日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:脚本运行结果:代码如下: # 从本地判断图片是否损坏 def is_valid_image(path): ''' 检查文件是否损坏 ''' try: bValid = True fi...

weixin_39742471的博客 370

android studio 2022打开了v1 签名但是生成的apk没有v1签名问题

我使用了Android Studio Flamingo | 2022.2.1 Patch 2版本的IDE编译了一个apk,但是apksigner查看apk的签名信息时,发现只有v2签名,没有v1签名。试着改小一下minSdkVersion 为23重新编译apk,再检测一下签名版本v1居然打开了!参考网上搜索到的方法,手动在build.gradle里面添加。但是编译出来的apk还是只有v2的签名。里面提到了v1签名还和。

hedalei的博客 466

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6040

python图像检测_Python检查图片是否损坏及图片类型是否正确过程详解

检查图片是否损坏日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:脚本运行结果:代码如下:def is_valid_image(path):'''检查文件是否损坏'''try:bValid = TruefileObj = open(...

weixin_39758032的博客 1645

YOLOv8-Pose 姿态识别 RK3588 实战:从模型训练到 RKNN 部署,精度与推理速度双提升

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 366

python判断图片是否损坏和真实类型_Python检查图片是否损坏及图片类型是否正确过程详解...

检查图片是否损坏日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:脚本运行结果:代码如下:def is_valid_image(path):'''检查文件是否损坏'''try:bValid = TruefileObj = open(...

weixin_34139050的博客 940

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python下载文件损坏_Python检查图片是否损坏及图片类型是否正确过程详解

检查图片是否损坏日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:脚本运行结果:代码如下:def is_valid_image(path):'''检查文件是否损坏'''try:bValid = TruefileObj = open(...

weixin_39719732的博客 316

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: python基础--实例:登录小游戏
下一篇: 代码详解之什么是Python正则表达式
python-花猫
博客等级 码龄7年 105粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值